| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: schön schreiben (474 mal gelesen)
|
mias Mitglied
Beiträge: 23 Registriert: 30.07.2007
|
erstellt am: 30. Jul. 2007 12:15 <-- editieren / zitieren --> Unities abgeben:
hallo! ich mache gerade erst meine ersten gehversuhe in VBA mit autoCAD. ich hab erfahrung mit anderen sprachen und wollte euch bitten, mir zu helfen, dass was ich jetzt ziemlich unschön hinbekommen habe besser zu schreiben: Code: For i = 0 To X_MAX For j = 0 To Y_MAX '--- loop indeces coincide with geographical/geometric location ins(0) = i ins(1) = j selecta = Round(random(1, 3)) turner = Round(random(0, 1)) Dim blockRefObj As AcadBlockReference insertionPnt(0) = i * 351.66 insertionPnt(1) = j * 280 insertionPnt(2) = 0 If (selecta = 1) Then Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "MOD01", 1#, 1#, 1#, 0) ElseIf (selecta = 2) Then Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "MOD02", 1#, 1#, 1#, 0) Else Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "MOD03", 1#, 1#, 1#, 0) End If Next j Next i
danke! mias
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 30. Jul. 2007 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für mias
Hi und Willkommen mias, Ich würde als erstes die If, Elfseif-Schleife durch eine Selectcase-Auswertung austauschen, da das meiner Meinung nach übersichtlicher ist. Select Case selecta Case 1 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "MOD01", 1#, 1#, 1#, 0) Case 2 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "MOD02", 1#, 1#, 1#, 0) Case 3 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "MOD03", 1#, 1#, 1#, 0) End Select Poste doch mal deinen ganzen Code, damit man mal sieht, was du genau vorhast. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mias Mitglied
Beiträge: 23 Registriert: 30.07.2007
|
erstellt am: 30. Jul. 2007 12:43 <-- editieren / zitieren --> Unities abgeben:
hallo carsten! danke für die schnelle antwort! wahnsinn! hier erstmal der ganze code: Code: Sub main() Dim i As Integer, j As Integer Dim ins(2) As Double Dim total_volumen As Double Dim marks() As cubus '--- Definieren des Blocks Dim blockObj As AcadBlock Dim insertionPnt(0 To 2) As Double insertionPnt(0) = 0 insertionPnt(1) = 0 insertionPnt(2) = 0 ThisDrawing.SendCommand "erase" & vbCr & "all" & vbCr & vbCr ReDim marks(X_MAX, Y_MAX) As cubus '---part 1: seed array and place objects in field For i = 0 To X_MAX For j = 0 To Y_MAX '--- loop indeces coincide with geographical/geometric location ins(0) = i ins(1) = j selecta = Round(random(1, 3)) Dim blockRefObj As AcadBlockReference insertionPnt(0) = i * 351.66 insertionPnt(1) = j * 280 insertionPnt(2) = 0 If (selecta = 1) Then Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "MOD01", 1#, 1#, 1#, 0) ElseIf (selecta = 2) Then Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "MOD02", 1#, 1#, 1#, 0) ElseIf (selecta = 3) Then Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "MOD03", 1#, 1#, 1#, 0) End If Next j Next i ZoomExtents
ich versuche eine fassade - bzw die aufteilung der öffnungen in ihr so (durch die blöcke) zu generieren. der lästige random parameter wird später durch lichtstärkedaten ersetzt. ich hab allerdings gleich mal noch eine frage: kann ich die blockreferenz auch noch an das i, j knüpfen? d.h. beim einfügen benennen, damit ich später noch darauf zugreifen kann? ich versuchs gerade so:
Code: Set blockRefObj(i,j) = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "MOD03", 1#, 1#, 1#, 0)
wie kann das klappen. danke nochmal und schönen tag! mias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mias Mitglied
Beiträge: 23 Registriert: 30.07.2007
|
erstellt am: 31. Jul. 2007 11:22 <-- editieren / zitieren --> Unities abgeben:
|
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 31. Jul. 2007 11:37 <-- editieren / zitieren --> Unities abgeben: Nur für mias
Hallo, du musst dir vorher das Feld für die Blockreferenzen entsprechend anlegen.
Code: Dim blockRefObj(X_MAX,Y_MAX) as AcadBlockReference
Dann kannst du, wie in deinem Beispiel, die Blöcke zuweisen.Alternativ kannst du das Feld dynmisch verwalten und innerhalb der Schleife jeweils neu dimensionieren.
Code: Redim PRESERVE blockRefObj(i,j)
Übrigens würde ich mal über den COde die Zeile
Code: Option explicit
einfügen. Dann kannst du sehen welche Variablen von dir nicht bzw. falsch deklariert wurden.Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mias Mitglied
Beiträge: 23 Registriert: 30.07.2007
|
erstellt am: 31. Jul. 2007 11:48 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|