Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  ConvertToStaticBlock

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:  ConvertToStaticBlock (3534 mal gelesen)
Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 24. Nov. 2008 08:24    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


hm2.dwg.txt

 
Hallo Forum,

auf Wunsch meines Auftraggebers muß ich meinen dynamischen Block in einen statischen Block konvertieren.
Ich möchte dafür folgende Routine verwenden:

Code:
Sub test()
Dim block As AcadBlockReference
For Each block In ThisDrawing.ModelSpace
    block.ConvertToStaticBlock (hm)
Next block
End Sub

Nun bekomme ich aber leider nicht, wie in der Hilfe beschrieben einen benannten Block sondern einen unbenannten Block.

Eine Testzeichnung habe ich angefügt. Ich hab´s in Map2009 und in Map2008 probiert. Beidemale unbenannte Blöcke.

PS: Das in der Hilfe erwähnte IAcadBlockReference2 Objekt kennt mein Autocad Map gar nicht!

Was mache ich da falsch ?
Kann mir bitte jemand sagen wie man´s besser macht ?

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil
Inventor AIP 4-11, 2008 -2022
Win 10

erstellt am: 24. Nov. 2008 08: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 Nur für Goofy007 10 Unities + Antwort hilfreich

Ohne mich mit dem Problem an sich beschäftigt zu haben - benenne doch den unbenannten Block hinterher einfach um.

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

runkelruebe
Ehrenmitglied V.I.P. h.c.
Straßen- / Tiefbau



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

Beiträge: 8075
Registriert: 09.03.2006

sw:
Win7-x64
Office 365 ProPlus
C3D (& LT )
ET; DACH; Extensions
-------------------
hw:
FX3800
i5 CPU 670
8GB RAM

erstellt am: 24. Nov. 2008 08:49    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 Goofy007 10 Unities + Antwort hilfreich

Hi,
hast Du mal Dein MAP als ACAD gestartet?
Ich habe in der Vergangenheit festgestellt, dass da Unterschiede auftauchen, siehe auch hier: KLICK, das erklärt zumindest den Teil mit "PS: Das in der Hilfe erwähnte IAcadBlockReference2 Objekt kennt mein Autocad Map gar nicht!"

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info     Excel -Suche    RuA-Suche     FAQ-ACAD     Hilfe zu CAD.de 

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

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 24. Nov. 2008 08:53    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 Udo,

ja daran hab ich natürlich auch schon gedacht.

Aber es ist nich sehr befriedigend.
Zumal Adesk ja explizit die Methoden ConvertToAnonymousBlock und ConvertToStaticBlock anbietet.

Wenns ein Bug ist, dann muß ich den Weg über umbenenen gehen.
Aber wenn nur ich was falsch mache, wäre es sinnvoller zu lernen wie man´s richtig macht.

Aber trotzdem, schon mal danke für die Antwort!

lg
Didi

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

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 24. Nov. 2008 09:04    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 Runkelrübe,

ich hab jetzt mal als Acad gestartet.
Leider ändert das gar nix.
Immer noch unbennte Blöcke, immer noch keine  IAcadBlockReference2 im Objektkatalog.

Auch dir ein Dankeschön für die Antwort

lg
Didi

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


Ex-Mitglied

erstellt am: 24. Nov. 2008 10:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

Du hast ein Problem, ich hab eine Lösung  die Dir nicht gefallen wird   

Code:
Sub test()
   Dim block As AcadBlockReference
   Dim tBlName As String: tBlName = "STATIC"
   Dim tBlIndex As Integer: tBlIndex = 1
  
   For Each block In ThisDrawing.ModelSpace
      block.ConvertToStaticBlock (tBlName & Format(tBlIndex, "000"))
      tBlIndex = tBlIndex + 1
   Next block
End Sub

Das Problem ist, dass ein dynamischer Block (Blockreferenz!) immer unterschiedlich aussehen kann, daher muss zum Ableiten in eine statische BlockReference eine Blockdefinition erzeugt werden, die eben so aussieht, wie die aktuellen dynamischen Eigenschaften der zu konvertierenden Blockreference vorgeben.

Ein Beispiel:
Du hast eine Blockdefinition 'TISCH' ==> in Deiner Zeichnung hast Du den drin mit 100cm, 120cm, 140cm Länge
Willst Du daraus statische Blockdefinitionen machen, musst Du 3 Blockdefinitionen (TISCH100, TISCH120, TISCH140) machen. Und der Haken: AutoCAD erkennt natürlich nicht, wenn Du bei einem weiteren 'TISCH L=120' bist, dass es schon eine statische Blockdefinition dafür gibt.

Schlussfolgerung: Du kannst nicht alle Blockreferenzen in statische .. konvertieren und allen den gleichen Zielnamen geben.

- alfred -

[EDIT]noch was zu der Konvertierung dyn. zu statisch: wenn in den dynamischen Blockdefinitionen 'Sichtbarkeiten' eingebaut sind, dann bitte aufpassen, denn die statischen Blockdefinitionen, die daraus erzeugt werden, sind keineswegs so sauber, dass z.B. ein DXFOUT als R12 richtig funktioniert, es werden im statischen Block alle Elemente des dynamischen Blocks enthalten sein, die durch Sichtbarkeitsparameter deaktivierten Geoemtrieelemente sind nur 'unsichtbar' gestellt. Bei DXFOUT/R12 sind sie alle (auch die unsichtbaren) wieder da. D.h. die Blockdefintionen müssen dann nachgearbeitet werden.
[/EDIT]

[Diese Nachricht wurde von a.n. am 24. Nov. 2008 editiert.]

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 24. Nov. 2008 18: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 Alfred,

Danke für deine Antwort.
Die gefällt mir sogar sehr gut, denn die erklärt warum es bei mir nicht ging.


lg
Didi

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

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 25. Nov. 2008 08:45    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 Alfred,

ich hab deinen Code jetzt getestet. Der macht genau das was ich mit meinem machen wollte.

lg
Didi

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

CADoktor
Mitglied
Techniker


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

Beiträge: 35
Registriert: 29.03.2006

erstellt am: 27. Nov. 2008 10:21    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 Goofy007 10 Unities + Antwort hilfreich

Jetzt muss ich auch noch meinen Senf dazugeben ...

1. "For Each block In ThisDrawing.ModelSpace" geht nicht!! Objekttyp prüfen dann zuweisen!

2. Ich würde Blocknamen direkt weiterverwenden ... EffectiveName + Zähler

3. Es sollen ja nur Dynamische Blöcke bearbeitet werden =)> Prüfen ob .IsDynamicBlock

Anbei Code

Sub DynBlock2StatBlock()
    Dim objEntity As AcadEntity
    Dim objBlockRef As AcadBlockReference
    Dim lngIndex As Integer
 
    lngIndex = 1
 
    For Each objEntity In ThisDrawing.ModelSpace
        If objEntity.ObjectName = "AcDbBlockReference" Then
            Set objBlockRef = objEntity
            If objBlockRef.IsDynamicBlock Then
                objBlockRef.ConvertToStaticBlock (objBlockRef.EffectiveName & Format(lngIndex, "0000"))
                lngIndex = lngIndex + 1
            End If
        End If
    Next objEntity
 
End Sub

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

CADoktor
Mitglied
Techniker


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

Beiträge: 35
Registriert: 29.03.2006

erstellt am: 27. Nov. 2008 11:08    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 Goofy007 10 Unities + Antwort hilfreich

Das Ganze noch als Variante, bei der alle Bereiche (Modellbereich und Layouts) durchlaufen werden und auch verschachtelte Blöcke bearbeitet werden (wenn dynamische Blöcke innerhalb eines anderen Blockes sind)

Sub DynBlock2StatBlock()
    Dim objEntity As AcadEntity
    Dim objBlockDef As AcadBlock
    Dim objBlockRef As AcadBlockReference
    Dim lngIndex As Integer
 
    lngIndex = 1

    For Each objBlockDef In ThisDrawing.Blocks
   
        If Not objBlockDef.IsXRef Or InStr(objBlockDef.Name, "|") = 0 Then
            For Each objEntity In objBlockDef
                If objEntity.ObjectName = "AcDbBlockReference" Then
                    Set objBlockRef = objEntity
                    If objBlockRef.IsDynamicBlock Then
                        objBlockRef.ConvertToStaticBlock (objBlockRef.EffectiveName & Format(lngIndex, "0000"))
                        lngIndex = lngIndex + 1
                    End If
                End If
            Next objEntity
        End If
    Next objBlockDef
End Sub

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

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 27. Nov. 2008 18:20    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 Doc,

herzlichen Dank für deinen Code.
Du hast selbstverständlich Recht mit deiner Kritik, aber ich kann dich beruhigen, der von mir gepostete Code sollte so nie verwendet werden. Der war nur zu Testzwecken. Eigentlich habe ich vor zuerst ein Selectionset zu erstellen, und dann dieses abzuarbeiten.
Aber dein Code gefällt mir auch sehr gut!

lg
didi

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

H-kan84
Mitglied
Konstrukteur Yachtinnenausbau


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

Beiträge: 253
Registriert: 28.07.2006

erstellt am: 16. Jan. 2009 14: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 Nur für Goofy007 10 Unities + Antwort hilfreich

hi,
ich fange an mich mit dem thema VBA zu beschäftigen..und bin grad auf diesen code gestoßen.

Das funktioniert prima außer:

die Sichtbarkeitsklassen von den dynmaischen blöcken, werden im blockeditor angezeigt Sprich alle sichtbarkeitsklassen in einer

Wäre schön wenn man das noch umgehen könnte.

kann mir jmd helfen?

grüße

------------------
Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieser Nachricht!

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


Ex-Mitglied

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

Hi,

Du kannst nachdem der statische Block erstellt wurde, die Elemente der Blockdefinition durchgehen und prüfen, welches Element die Eigenschaft '.Visible' auf false hat, ich glaube so hab ich's mal gelöst, lass mich wissen, wenn es nicht so sein sollte.

- alfred -



Trainee Sales (m/w/d) für Investionsgüter CNC-Bearbeitungszentren und Automationslösungen im Außendienst, für die Region Berlin/Brandenburg

HEDELIUS ist heute einer der führenden europäischen Hersteller von vertikalen CNC-Bearbeitungszentren. Dieser Erfolg kommt nicht von ungefähr. HEDELIUS Bearbeitungszentren sind keine Massen­ware, sondern bieten maßgeschnei­derte Qualität ?Made in Germany?. In jeder Maschine sind stetig gewachsenes Know-how, größte Sorgfalt und viel Herzblut auf höchstem Niveau vereint. Funktionieren kann das nur ...

Anzeige ansehenAußendienst
H-kan84
Mitglied
Konstrukteur Yachtinnenausbau


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

Beiträge: 253
Registriert: 28.07.2006

erstellt am: 16. Jan. 2009 18:09    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 Goofy007 10 Unities + Antwort hilfreich

danke,
ich werde mich da mal reinlesen und es ausprobieren wenn oich es hin bekomme.

wenn man Burst aus den expresstools drüber laufen läßt gehts auch.  aber halt aufgelößte blöcke


grüße

------------------
Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieser Nachricht!

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