Kamis, 23 Agustus 2012

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.

clip_image002[4]

Manajer makro akan terlihat seperti ini:

clip_image004[4]

dari sini dengan mengklik pada modul kami akan membuat yang baru:

clip_image006[4]

Untuk contoh khusus ini saya akan menggunakan proyek bukan aplikasi (ini berarti bahwa makro ini tidak akan tersedia untuk semua saya Revit proyek lainnya:

clip_image008[4]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:

clip_image010[4]

dan di sini kita pergi... di Tab COM kita akhirnya dapat menemukan: SAP2000v12 dan Microsoft Excel 12,0 perpustakaan objek dan menambahkan mereka!

 

clip_image012[4]

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:
clip_image014[4]

ini:

clip_image016[4]

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.

clip_image018[4]

     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

clip_image020[4]

 

-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

clip_image021[4]

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.

clip_image023[4]

Sekarang Anda akan dapat melihat Anda kosong makro.

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

clip_image025[4]

 

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

Di sini kita hanya diimpor kotak pesanclip_image026[4]

 

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

Go to > Build > Build import_geometry

clip_image027[4]

 

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

clip_image029[4]

- Klik pada Run dan pesan akan keluar pop:

clip_image030[4]

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

clip_image031[4]

Pada COM tab memilih Microsoft Excel referensi seperti yang ditunjukkan pada gambar di bawah ini

clip_image032[4]

 

- 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

clip_image033[4]

 

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

clip_image035[4]

Ini adalah apa yang harus Anda dapatkan di Revit setelah menjalankan makro ini …

clip_image037[4]

 

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…

 

Tidak ada komentar:

Posting Komentar

LinkWithin

Related Posts Plugin for WordPress, Blogger...