Anda di halaman 1dari 18

Bagaimana untuk membaca data dari SAP2000

Halo semua,

tutorial ini merupakan pengantar untuk fungsi SAP2000 API. Saya akan mencoba untuk
menunjukkan bagaimana untuk mengatur pilihan dasar yang akan membantu menghindari
mengganggu bug dalam kode Anda jika Anda seorang pemula dalam bidang ini.

Baiklah, mari kita mulai kemudian...Katakanlah kita ingin mendapatkan koordinat berkas dari
SAP2000 dan menuliskannya di Excel melalui VSTA untuk Revit! (Saya menggunakan VSTA
untuk Revit karena dengan meletakkan togheter tutorial ini dan satu dari Demetris Anda dapat
memiliki produk kerja akhir!).

Langkah pertama, mari kita membuka Revit dan Mari kita pergi di bagian makro.

Manajer makro akan terlihat seperti ini:

dari sini dengan mengklik pada modul kami akan membuat yang baru:
Untuk contoh khusus ini saya akan menggunakan proyek bukan aplikasi (ini berarti bahwa
makro ini tidak akan tersedia untuk semua saya Revit proyek lainnya:

Semua benar kami baik untuk pergi!


Mari kita memulai coding... tidak bahwa cepat! Hal pertama pernah ingat, jangan lupa untuk
memuat referensi! dalam kasus ini akan mudah cukup kita akan memuat SAP2000 dan Excel
referensi dalam proyek kami. Jadi, klik Edit dan jendela ini akan poup keluar. Klik kanan pada
import_geometry dan memilih preferensi:

bentuk sana pergi untuk referensi dan ADD:

dan di sini kita pergi... di Tab COM kita akhirnya dapat menemukan: SAP2000v12 dan
Microsoft Excel 12,0 perpustakaan objek dan menambahkan mereka!
OK, semua set, mari kita memulai coding! Ini adalah langkah-langkah utama yang kita akan
mengikuti:

-menghitung jumlah elemen (balok) dalam kasus kami akan menjadi 1 karena kita mengimpor
berkas hanya 1 tapi kalau-kalau kau untuk mengimpor lebih dari satu berkas kode akan masih
bekerja!;

-mendapatkan data dari SAP;

-menulis data ke excel.

OK, hal pertama kita perlu lakukan adalah membuat sebuah instance dari SAP dan menciptakan
model SAP baru:

'create an instance of the Sap2000 object


SapObject = New Sap2000.SapObject
'create the SapModel object
SapModel = SapObject.SapModel

let’s define some variables now:


Dim ret As Long
Dim StartPoint As String
Dim EndPoint As String
Dim myStartX As Double
Dim myStartY As Double
Dim myStartZ As Double
Dim myEndX As Double
Dim myEndY As Double
Dim myEndZ As Double

Dim sectname As String


Dim sectpropr As String
Dim j As Integer
Dim b As Integer ' beams

dan sekarang kita ingin menghitung berapa banyak elemnts yang ada di proyek kami:

'counting elements
Dim framenumber As Long
framenumber = SapModel.FrameObj.Count

'Loop to count each element (beams, columns, braces) here we used i


For i As Integer = 1 To framenumber
ret = SapModel.FrameObj.GetPoints(i, StartPoint, EndPoint)
ret = SapModel.PointObj.GetCoordCartesian(StartPoint, myStartX,
myStartY, myStartZ)
ret = SapModel.PointObj.GetCoordCartesian(EndPoint, myEndX,
myEndY, myEndZ)
next

dan di sini adalah bagian di mana kita menambahkan berkas untuk kami vektor yang akan
dicetak di Excel:

If myStartZ = myEndZ Then


beam_Num.Add(j)
end if

Sekarang kita dapat redimensioning array yang akan dicetak dalam excel:

''redimensioning the arrays


ReDim beamData(beam_Num.Count - 1, 8 ) '---------------it
might change

and after this we can start reading data and printing it to excel:

'Loop in order to get the parameters we want into 2d arrays we used k


For k As Integer = 1 To framenumber
ret = SapModel.FrameObj.GetPoints(k, StartPoint, EndPoint)
ret = SapModel.PointObj.GetCoordCartesian(StartPoint, myStartX,
myStartY, myStartZ)
ret = SapModel.PointObj.GetCoordCartesian(EndPoint, myEndX,
myEndY, myEndZ)
ret = SapModel.FrameObj.GetSection(k, sectname, sectpropr)
ret = SapModel.PropFrame.GetType(sectname, sectiontype)

If myStartZ = myEndZ Then


beaNum.Add(l)
b = beaNum.Count - 1
beamData(b, 0) = k 'Beam names
beamData(b, 1) = myStartX 'x value
beamData(b, 2) = myStartY 'y value
beamData(b, 3) = myStartZ 'z value
beamData(b, 4) = myEndX
beamData(b, 5) = myEndY
beamData(b, 6) = myEndZ
beamData(b, 7) = sectname
beamData(b, 8 ) = sectiontype
zValues(b) = myStartZ 'constructing a list of zValues
in order to use it for Levels
end if

Harap perhatikan bahwa jika pernyataan yang muncul dari waktu ke waktu itu tidak diperlukan
dalam contoh ini tetapi ini adalah petunjuk bagi Anda jika Anda ingin mulai mengimpor kolom
dan semua penjuru!

OK, mari kita lihat hasil sekarang... kita pada dasarnya telah pergi dari geometri SAP yang
terlihat seperti ini:

ini:
Tidak buruk!

tetapi tidak lebih dari namun... hanya menggabungkan tutorial ini dan ini lain satu togheter dan
Anda akan memiliki bekerja penuh SAP2000 untuk Revit penerjemah untuk balok:

http://www.architexted.com/blog/how-to-create-linear-elements-in-revit-structure-with-vsta-
macros-vb-net/

Harap Anda menikmati ini tutorial dan terima kasih untuk membaca!

Cara membuat elemen-elemen linier Revit


struktur dengan VSTA Macros (vb.net)
by Demetris Kekatos: demetris.kekatos@gmail.com

Ini adalah tutorial untuk amatir pengguna alat-alat VSTA makro dalam Revit. Setelah tutorial ini
Anda akan mampu menarik struktural unsur-unsur linier Revit (balok, kolom dan kawat gigi)
memperoleh data geometri dari spreadsheet Excel terbuka.

Ketika mentransfer geometri dari salah satu perangkat lunak lain, Excel dapat menjadi
langkah pertengahan antara dua perangkat lunak. Misalnya Anda dapat mengambil awal dan titik
akhir dari semua unsur-unsur dari model bangunan belalang, mencetak data ini ke Excel
Spreadsheet dan kemudian membuat makro VSTA membaca data ini dan menarik unsur-unsur
Revit.
Bahkan jika Anda tidak memiliki dalam pikiran untuk mentransfer elemen dari perangkat lunak
apa pun ke Revit, tutorial ini akan menunjukkan cara untuk menarik balok, kolom dan kawat gigi
secara umum. Maka Anda dapat menggunakan alat-alat ini untuk membuat makro yang menarik
menara secara otomatis misalnya.

Jadi kita akan mulai dari awal:

Buka proyek Revit 2011 baru dan menghemat proyek sebagai importingGeometry

-Dalam lingkungan Revit:

Pergi ke "Manage" tab, klik pada ikon makro dan pilih Macro Manager

-Jendela makro manajer muncul dan di sini Anda dapat melihat dua tab. Aplikasi dan Tab
dengan nama file. Kami akan membuat makro importingGeometry Tab, yang berarti bahwa
makro hanya dapat digunakan dari file tertentu ini.

Klik pada Create > Module


Catatan: Jika kita ingin membuat makro dan dalam berbagai proyek, Anda harus membuat
makro sama ke tab aplikasi.

- Masukkan nama untuk modul (nama terus-menerus dengan tidak ada kesenjangan). Pilih
VB.NET sebagai bahasa pemrograman dan sebelum mengklik OK, Anda dapat menambahkan
keterangan apa makro.

Ini kemudian akan membantu Anda ketika Anda memiliki daftar macro berbeda di Revit.
Sekarang Anda akan dapat melihat Anda kosong makro.

- Selanjutnya klik pada > Edit, untuk masuk ke makro dan menulis kode kita.

- Jadi kami subrutin "membuat balok" akan ditempatkan antara subrutin default yang Revit
tempat di kelas ini (disebut: ThisDocument)

Di sini kita hanya diimpor kotak pesan


- Untuk membuat ini sederhana makro bekerja, kita harus mengkompilasi ini pertama.

Go to > Build > Build import_geometry

- Setelah kompilasi makro, kami masih bisa untuk menggunakan dan menjalankannya dari
jendela makro Manager.

- Klik pada Run dan pesan akan keluar pop:


Sekarang kami yakin bahwa semuanya berjalan..

kembali ke drawBeams tutorial, selanjutnya langkah:

Mendapatkan akses ke Microsoft Excel dari lingkungan VSTA makro :

- Langkah pertama adalah untuk menambahkan file referensi yang tepat, yang Revit akan
digunakan untuk "berbicara" dengan Excel.

Go to > Project > Add Reference…

Pada COM tab memilih Microsoft Excel referensi seperti yang ditunjukkan pada gambar di
bawah ini
- Selanjutnya kita harus mengimpor namespace of Excel. Perhatian tempat terbaik untuk
mengimpor namespaces di Revit VSTA adalah di atas semua kode standar yang Revit impor di
setiap makro
Sebelum menyajikan diperlukan kode saya hanya ingin merujuk Revit apa kebutuhan untuk
menarik elemen seperti berkas:

1. Start and End point of the element


2. The section of the element and
3. The level placed to the project

Ketika coding itu benar-benar penting untuk mengetahui apa yang Anda butuhkan untuk
mencapai tujuan Anda … Sekarang kita telah siap untuk menulis beberapa kode

Mendapatkan akses ke Revit model dan terbuka Excel Spreadsheet:

'' method for creating Beams in Revit


Public Sub createBeams()
MsgBox("Retrieve Beam Data")

''the first thing to do is get access to the Revit project


Dim myModel As Autodesk.Revit.DB.Document
myModel = Me.Document

''Get access to the active Excel Document


Dim myExcel As Microsoft.Office.Interop.Excel.Application
Dim myWorkBook As Microsoft.Office.Interop.Excel.Workbook
myExcel = CType(GetObject(, "Excel.Application"), Application)
myWorkBook = myExcel.ActiveWorkbook

''get access to the right spreadsheet


Dim beam_sheet As Microsoft.Office.Interop.Excel.Worksheet
beam_sheet = myWorkBook.Worksheets(1)
'the number of the parenthesis sets the sheet we want to reach
Mengambil unsur data dari Excel:

''InputBox where the user is called to type the number of beams


Dim num_beams As Integer
num_beams = InputBox("Please enter the number of Beams...")

'' a loop to read data for each element from excel and draw it in Revit
For i As Integer = 2 To num_beams + 1

'' retrieve Start Point x,y,z


Dim my_x1 As Double
Dim my_y1 As Double
Dim my_z1 As Double
my_x1 = beam_sheet.Cells(i, 2).value
my_y1 = beam_sheet.Cells(i, 3).value
my_z1 = beam_sheet.Cells(i, 4).value
'' retrieve End Point x,y,z
Dim my_x2 As Double
Dim my_y2 As Double
Dim my_z2 As Double
my_x2 = beam_sheet.Cells(i, 5).value
my_y2 = beam_sheet.Cells(i, 6).value
my_z2 = beam_sheet.Cells(i, 7).value

'' retrieve beam section


Dim section As String
section = beam_sheet.Cells(i, 8).text

Akhirnya menarik elemen ke dalam proyek Revit:

''Transaction(in order to change the existing Revit model we always have to


start a transaction)
Dim structure_builder As Autodesk.Revit.DB.Transaction
structure_builder = New Autodesk.Revit.DB.Transaction(myModel, "create
Beams")

'' lets create some beams


If (structure_builder.Start() =
Autodesk.Revit.DB.TransactionStatus.Started) Then

''set start point and end point of the element


Dim start_point As Autodesk.Revit.DB.XYZ = Nothing
Dim end_point As Autodesk.Revit.DB.XYZ = Nothing
start_point = New Autodesk.Revit.DB.XYZ(my_x1, my_y1, my_z1)
end_point = New Autodesk.Revit.DB.XYZ(my_x2, my_y2, my_z2)

'define the element line


Dim myBeamLine As Autodesk.Revit.DB.Line = Nothing
myBeamLine = Autodesk.Revit.DB.Line.Bound(start_point, end_point)

'load the Section of the element from Revit Structural Library


Dim beamLibrary As String
beamLibrary = "C:\ProgramData\Autodesk\RST 2011\Imperial
Library\Structural\Framing\I_W_Wide Flange.rfa"
Dim beam_sym As Autodesk.Revit.DB.FamilySymbol = Nothing
Dim loaded As Boolean
loaded = myModel.LoadFamilySymbol(beamLibrary, section, beam_sym)

'define Levels
Dim my_level As Autodesk.Revit.DB.Level

'finally draw the beam


Dim myBeam As Autodesk.Revit.DB.FamilyInstance = Nothing
myBeam = myModel.Create.NewFamilyInstance(myBeamLine, beam_sym, my_level,
Autodesk.Revit.DB.Structure.StructuralType.Beam)

''finalize the transaction and update model


structure_builder.Commit()

End If
Next

MsgBox("Macro Completed")

End Sub

Catatan:

a. untuk menarik berkas kita harus memuat keluarga yang tepat dari bagian yang Revit dalam
database-nya. C:\ProgramData\Autodesk\RST 2011\Imperial
Library\Structural\Framing\I_W_Wide Flange.rfa… Jadi Anda harus menemukan di mana Revit
membuat keluarga struktural dalam sistem Anda dan paste jalan yang benar untuk kode ini.

b. Tentang tingkat. Kita dapat menyadari bahwa tingkat yang digunakan dalam kode tanpa
menentukan nilai. Memberikan awal dan titik akhir unsur Revit tidak membutuhkan tingkat
untuk menempatkan elemen untuk ketinggian yang benar

Setelah mengimpor kode kita harus "Membangun" makro dan kemudian jalankan dari
jendela Manger makro

Jangan lupa untuk membuat excel spreadsheet dengan info yang tepat, karena makro akan gagal
jika tidak menemukan sumber untuk membaca data
Ini adalah apa yang harus Anda dapatkan di Revit setelah menjalankan makro ini …

Untuk menyimpulkan: Ini adalah tubuh utama tentang bagaimana untuk membuat unsur-unsur
dalam Revit. Untuk contoh jika Anda ingin membuat kawat gigi atau kolom logika seluruh
adalah satu-satunya hal yang berubah sama adalah perintah terakhir:

''draw columns
Dim myColumn As Autodesk.Revit.DB.FamilyInstance = Nothing
myColumn = myModel.Create.NewFamilyInstance(myColumnLine, column_sym,
my_level, Autodesk.Revit.DB.Structure.StructuralType.Column)

Bagian dari tingkat sedikit rumit ketika membuat kolom. Ini mungkin akan menjadi subjek
dalam tutorial berikut …
There are numerous ways to define the start and end point of an element and draw elements in
Revit through VSTA macros. Hope this tutorial was informative…

Welcome to Revit Macros…

Anda mungkin juga menyukai