| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: schön schreiben (576 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: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
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: 1526 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 >>)
 |