Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Block im Ursprung einfügen

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:  Block im Ursprung einfügen (2776 mal gelesen)
otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 10. Sep. 2009 21: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 zusammen,

ich habe einen VBA-Code der mir nach Anklicken eines Icons einen Block in meine Zeichnung einfügt. Der Block wird aus einer DWG-Bibliothek (eigener Ordner mit vielen Blöcken) geholt.
Das funktioniert.

Wie kann ich den Block im Ursprung einfügen?

In Lisp würde ich dem Blocknamen einfach ein "*" voranstellen und der Block würde im Ursprung (gesprengt) eingefügt.
?

------------------
Christian

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


Ex-Mitglied

erstellt am: 10. Sep. 2009 21:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,
Code:

Dim tBlRef as AcadBlockReference

'dann machst Du Deinen Einfügevorgang

Dim tExplodedEnts as Variant
tExplodedEnts = tBlRef.Explode


- alfred -

PS: ein Beispiel wäre auch schon >>>hier<<< vorhanden

------------------
www.hollaus.at

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 10. Sep. 2009 21:56    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

Danke Alfred,

für den Tipp.

------------------
Christian

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 16. Sep. 2009 14:57    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

Hi alfred,

funktioniert einwandfrei.
Noch eine kleine Nachfrage:
Es gibt den Befehl _explode und _xplode.

Ich hätte beim Zerlegen in den Ursprung gerne, dass die zerlegten Blockobjekte den Einfügelayer und alle anderen Eigenschaften beibehält (gezeichnet sind meine Blöcke alle auf Layer 0, Farbe VonBlock, Linien VonBlock, ...)
In der Befehlszeile wäre das _xplode H.

Wie drücke ich das in VB aus?

------------------
Christian

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 16. Sep. 2009 15:01    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 otm 10 Unities + Antwort hilfreich

du liest die Einfügeparamter ( wird sicher aktueller Layer ect. sein) aus und weißt diese Eigenschaft dann den tExplodedEnts zu

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 21. Sep. 2009 15:55    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

Hi CADmium,

deine Vermutung ist richtig, nur weiß ich noch nicht wie das geht.
Ich habe derzeit beim vorherigen Schritt noch ein Problem.

Löse ich den Block auf mit "...Explode", dann habe ich schön die Einzelteile, aber auch die ursprüngliche Blockreferenz ist noch da.
Muss ich die extra löschen mit "...Delete"?

------------------
Christian

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


Ex-Mitglied

erstellt am: 21. Sep. 2009 16:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Muss ich die extra löschen mit "...Delete"

...fast, zum Löschen brauchst Du die Methode '.Erase'


>> nur weiß ich noch nicht wie das geht.

Code:
Dim tEnt as AcadEntity
For Each tEnt in tExplodedEnts
  tEnt.Layer = tBlRef.Layer    'wobei tBlRef die ursprüngliche Blockreferenz ist
  tEnt.Color = tBlRef.Color
  tEnt.Lineweight = tBlRef.Lineweight
  tEnt.Linetype = tBlRef.Linetype
Next
tBlRef.Erase

HTH, - alfred -

------------------
www.hollaus.at

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 21. Sep. 2009 16:26    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

Hi alfred,

ich habe folgendes geschrieben:

Code:

'Blockreferenz einfügen, die schon in der Zeichnung vorhanden ist.
    Dim BlkRef As AcadBlockReference '
    'Unterscheiden, ob im Modelbereich oder im Layout eingefügt wird.
    If ThisDrawing.ActiveSpace = acModelSpace Then
        Set BlkRef = ThisDrawing.ModelSpace.InsertBlock(EPkt, BlkNameAG, XF, YF, ZF, RiWi)
    Else
        Set BlkRef = ThisDrawing.PaperSpace.InsertBlock(EPkt, BlkNameAG, XF, YF, ZF, RiWi)
    End If
   
    'Eingefügte Blockreferenz in den Ursprung zerlegen.
    If UrsprungJN = True Then
        Dim tExplodedEnts As Variant
        Dim tEnt As Variant
       
        tExplodedEnts = BlkRef.Explode
       
        For Each tEnt In tExplodedEnts
            tEnt.Layer = BlkRef.Layer
            tEnt.color = BlkRef.color
            tEnt.Lineweight = BlkRef.Lineweight
            tEnt.Linetype = BlkRef.Linetype
        Next
        BlkRef.Erase
       
        MsgBox "Blockreferenz wurde in den Ursprung zerlegt.", vbInformation, "BlkInsert"
    End If

Wenn ich tEnt als Variant definiere läuft das Programm durch, ergibt aber noch nicht das richtige Ergebnis.

Ich habe vergessen zu sagen, dass die zu sprengenden Blöcke meist mehrere Layer enthalten und nur die Objekte, die im Block auf dem Layer 0 gezeichnet sind oder die Eigenschaft VonBlock haben, sollen die Eigenschaften der Blockreferenz erhalten, die anderen Teilobjekte sollen Ihre Eigenschaften behalten.

------------------
Christian

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 21. Sep. 2009 16:29    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

Hab's

Code:

For Each tEnt In tExplodedEnts
            If tEnt.Layer = "0" Then
                tEnt.Layer = BlkRef.Layer
                tEnt.color = BlkRef.color
                tEnt.Lineweight = BlkRef.Lineweight
                tEnt.Linetype = BlkRef.Linetype
            End If
        Next

------------------
Christian

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


Ex-Mitglied

erstellt am: 21. Sep. 2009 16:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Wenn ich tEnt als Variant definiere

...wieso definierst Du diese als 'Variant' und nicht als 'AcadEntity'?


>> ....nur die Objekte, die im Block auf dem Layer 0 gezeichnet sind
>> oder die Eigenschaft VonBlock ...

...dann prüfe bitte vor Eigenschaftsänderung, ob das Deinen Kriterien entspricht! Das sollte doch nicht das Problem sein, zumindest nicht, wenn ich die Frage richtig interpretiere 

Code:
if tEnt.Layer = "0" then tEnt.Layer = BlkRef.Layer

- alfred -

------------------
www.hollaus.at

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 21. Sep. 2009 16:40    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

Hier nochmal mit Berücksichtung aller 3 Eigenschaften

Code:

'Block einfügen, wenn er schon in der Zeichnung vorhanden ist.
    Dim BlkRef As AcadBlockReference ' !!! Blockreferenz, d.h. der Block muss bereits in der Zeichnung definiert sein
   
    If ThisDrawing.ActiveSpace = acModelSpace Then
        Set BlkRef = ThisDrawing.ModelSpace.InsertBlock(EPkt, BlkNameAG, XF, YF, ZF, RiWi)
    Else
        Set BlkRef = ThisDrawing.PaperSpace.InsertBlock(EPkt, BlkNameAG, XF, YF, ZF, RiWi)
    End If
   
    'Eingefügte Blockreferenz in den Ursprung zerlegen.
    If UrsprungJN = True Then
        Dim tExplodedEnts As Variant
        Dim tEnt As Variant
       
        tExplodedEnts = BlkRef.Explode
       
        For Each tEnt In tExplodedEnts
            If tEnt.Layer = "0" Then
                tEnt.Layer = BlkRef.Layer
                tEnt.color = BlkRef.color
            End If
            If tEnt.Lineweight = -2 Then '"VonBlock"
              tEnt.Lineweight = -1 '"VonLayer"
            Else
              tEnt.Lineweight = BlkRef.Lineweight
            End If
            If tEnt.Linetype = -2 Then '"VonBlock"
                tEnt.Linetype = -1 '"VonLayer"
            Else
                tEnt.Linetype = BlkRef.Linetype
            End If
        Next
        BlkRef.Erase
       
        MsgBox "Blockreferenz wurde in den Ursprung zerlegt.", vbInformation, "BlkInsert"
    End If

Vielen Dank für das Auf-die-Sprünge-Helfen

------------------
Christian

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 21. Sep. 2009 16:42    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

Hi alfred,
mit AcadEntity gibt er mir einen Fehler aus.
Deshalb difiniere ich es als Variant, damit geht es.

------------------
Christian

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