| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Objekte aus Referenz kopieren -> Block Explode Problem (4068 mal gelesen)
|
Hendrik2 Mitglied
 Beiträge: 6 Registriert: 14.09.2009
|
erstellt am: 14. Sep. 2009 20:25 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich habe folgendes Problem bei der Programmierung in AutoCAD 2008. Ich muss aus einer DWG Datei alles in eine andere übernehmen und einen Teil der Objekte löschen oder von vornherein nicht kopieren. Ich habe das wie folgt gemacht: Code:
' Als Referenz anhängen Set XRefFile = ThisDrawing.ModelSpace.AttachExternalReference(Filename, fso.GetBaseName(Filename), EinfügePt, 1, 1, 1, 0, False)' Binden - Hier entsteht ein Block ThisDrawing.Blocks.Item(XRefFile.Name).Bind True ' Um damit weiterarbeiten zu können muss ich den Block auflösen SelSet.Select acSelectionSetAll For Each Entity In SelSet If TypeOf Entity Is AcadBlockReference Then Set BlockRef = Entity BlockRef.Explode End If Next Entity
Nur das ich beim Explode die tolle Meldung erhalte: "Nicht geeignet" - Manuell also per Ändern->Ursprung kann ich diese BlockReferenz aber auflösen. Wenn das so schlicht Falsch ist würde ich mich über den richtigen Weg freuen. Gruß, Hendrik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 14. Sep. 2009 21:40 <-- editieren / zitieren -->
Hi Hendrik, mit VBA ist der einfachste Weg: - mach die Zeichnung auf statt zu referenzieren - selektiere dort die Objekte, die in eine andere DWG zu transportieren sind - erstelle mit den selektierten Elementen eine Zeichnung mittels 'WBlock' - füge diese mit 'insert' in die Zielzeichnung ein (und explodiere diese bei Bedarf) Sample von 'WBlock' findest Du in der VBA-Hilfe Sample von 'Insertlock' ebenfalls arbeitest Du mti VB.NET, da gibt's schnelleres (vor allem da die Quellzeichnung nicht in den AutoCAD-Editor zu laden ist), dann lass es mich/uns wissen. - alfred - ------------------ www.hollaus.at |
Hendrik2 Mitglied
 Beiträge: 6 Registriert: 14.09.2009
|
erstellt am: 14. Sep. 2009 21:56 <-- editieren / zitieren --> Unities abgeben:         
Danke - ich werde das gleich mal testen. Aber nur mal so aus neugier - warum geht das denn nicht so wie ich das versucht habe? Zum Punkt Sprache kann ich sagen das ich primär in C#.NET und was CAD angeht in Micostation fit bin - leider entwickle ich eine vorhandene Anwendung weiter daher komme ich nicht um VBA herum. Gruß, Hendrik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 14. Sep. 2009 22:19 <-- editieren / zitieren -->
Hi, sorry, ich vergaß: Herzlich willkommen bei CAD-de! Ich gebe zu, den Weg von Dir habe ich nicht ausprobiert. Wieso sich das XRef nicht explodieren lassen sollte, dem bin ich auch nicht nachgegangen. Meine Antwort kommt aus der Überlegung der 'Performance' und 'Verunstaltung der aktuellen Zeichnung', denn: - Zuerst mittels XRef zu referenzieren um es danach mittels explode aufzulösen ist langsamer als gleich mit 'InsertBlock' einzufügen - Wenn Du eine ganze Zeichnung einfügst (aber nur einen Teil davon brauchst), dann hast Du zumindest mal in der aktuellen Zeichnung eine Blockdefinition, die alle Bestandteile der externen Zeichnung inkludiert. Auch wenn Du diese BlockReferenz zerlegst und Teile davon löscht, bleibt noch immer die Definition im Block-Header. Damit ist die Zeichung zumindest bis zum Befehl 'bereinigen'/'_purge' größer als gewünscht und notwendig. ---------- Zu dem Explode-Problem zurück: ich sehe nur, dass Du ein SelectionSet von 'allem' machst, war Deine Zeichnung vor binden des XRefs leer oder sind da ev. schon BlockReferenzen enthalten, die nicht-proportional skaliert sind (ScaleX <> ScaleY <> ScaleZ)? Denn eingentlich 'darf' der Explode-Befehl nur diese BlockReferenzen 'ablehnen' Ein Beispiel zum Explodieren, in dem SendCommand für solche Fälle eingebaut ist, findest Du >>>hier<<< - alfred - ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 14. Sep. 2009 editiert.] |
Hendrik2 Mitglied
 Beiträge: 6 Registriert: 14.09.2009
|
erstellt am: 17. Sep. 2009 18:01 <-- editieren / zitieren --> Unities abgeben:         
So - erstmal vielen Dank. Das hat soweit geklappt wobei es auch geht, wenn ich die ganze DWG als Block einfüge und den Kram auflöse. Eine kleinere Frage hätte ich aber noch: Code:
Dim HSW As AcadText 'PtHSW ist ein Double(2) mit den Koordinaten Set HSW = ThisDrawing.PaperSpace.AddText("Text", PtHSW, 1) HSW.Alignment = acAlignmentCenter HSW.TextAlignmentPoint = PtHSW
Ich befinde mich im Layout. Wenn dich das bis zum SET... ausführe kann ich den Text sehen. Wenn ich die Ausrichtung änder ist der Text weg. Was mache ich falsch? Gruß, Hendrik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 17. Sep. 2009 18:11 <-- editieren / zitieren -->
Hi, ich sehe keinen Fehler und kann auch keinen reproduzieren. Dein Code (mit Anfangswert von PtHSW = 10,5,0) funktioniert bei mir. Sorry, - alfred - ------------------ www.hollaus.at |
Hendrik2 Mitglied
 Beiträge: 6 Registriert: 14.09.2009
|
erstellt am: 22. Sep. 2009 01:07 <-- editieren / zitieren --> Unities abgeben:         
Hallo, so den Fehler habe ich gefunden. War schlicht eine falsch geschriebene Variable für den TextAligenmentPoint. Ich habe aber glatt noch eine Frage: Kann ich die Bereinigungsfunktion auch aus VBA aufrufen? Gruß, Hendrik Und auf jeden Fall schonmal vielen Dank! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 22. Sep. 2009 01:15 <-- editieren / zitieren -->
Hi, Code: ThisDrawing.PurgeAll
- alfred - ------------------ www.hollaus.at |
Hendrik2 Mitglied
 Beiträge: 6 Registriert: 14.09.2009
|
erstellt am: 23. Sep. 2009 17:03 <-- editieren / zitieren --> Unities abgeben:         
|