Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  schön schreiben

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von mias an!   Senden Sie eine Private Message an mias  Schreiben Sie einen Gästebucheintrag für mias

Beiträge: 23
Registriert: 30.07.2007

erstellt am: 30. Jul. 2007 12:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mias 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von mias an!   Senden Sie eine Private Message an mias  Schreiben Sie einen Gästebucheintrag für mias

Beiträge: 23
Registriert: 30.07.2007

erstellt am: 30. Jul. 2007 12:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von mias an!   Senden Sie eine Private Message an mias  Schreiben Sie einen Gästebucheintrag für mias

Beiträge: 23
Registriert: 30.07.2007

erstellt am: 31. Jul. 2007 11:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

hallo!

ich wollte nochmal nachfragen, wie ich die eingefügten blöcke - code: siehe oben - eindeutig benennen kann, damit ich sie später noch bearbeiten kann!

danke! mias

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für mias 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von mias an!   Senden Sie eine Private Message an mias  Schreiben Sie einen Gästebucheintrag für mias

Beiträge: 23
Registriert: 30.07.2007

erstellt am: 31. Jul. 2007 11:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

oh danke! passt, klappt und hat mir sehr geholfen! mias

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz