| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: Datenbank mit Dynamischen Blöcken (1719 mal gelesen)
|
Theo37 Mitglied Techniker
 
 Beiträge: 426 Registriert: 08.10.2008 ACAD 2024 WIN 7 64bit Intel Xenon CPU E5-1620 3.60GHz 16GB RAM
|
erstellt am: 06. Jun. 2012 15:38 <-- editieren / zitieren --> Unities abgeben:         
Hallo an Alle, ich füge mit dem Code unten, eine externe DWG in meine geöffnete Datei als Block ein. Das ganze geht schon eine ganze zeitlang gut, nur jetzt ist mir ein Fehler aufgefallen. Und zwar wenn die Externe DWG dynamische Blöcke enthält, dann klappt das ganze erst beim zweiten Befehlsaufruf. Wäre nicht weiter schlimm, wenn die ersten eingefügten Objekte nicht trotzdem vorhanden wären und einfach nicht angezeigt werden. kann mir jemand erklären, wie ich bei dynamischen Blöcken vorgehen muß, damit diese schon beim ersten Einfügen sichtbar eingefügt werden? Danke Theo Try myDB = New Database(False, True) myDB.ReadDwgFile("D:\Lisp\" & AktBlock & ".dwg", IO.FileShare.None, True, "") AcadDoc.Database.Insert(AktBlock, myDB, True) If myDB IsNot Nothing Then myDB.CloseInput(True) : myDB.Dispose() : myDB = Nothing Jigaufruf(AktBlock) Catch ex As Exception
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
       

 Beiträge: 4191 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 08. Jun. 2012 08:55 <-- editieren / zitieren --> Unities abgeben:          Nur für Theo37
Hallo Theo, ich habe es nicht ausprobiert, von der Logik AutoCADs her betrachtet könnte es allerdings wie folgt klappen: Du analysierst zunächste ide einzufügende Zeichnung, ob diese dyn. Blockdefinitionen enthält. Kopierst dann zunächst die dyn. Blockdefinitionen in die aktuelle Zeichnung. Dabei würde ich auch 2-stufig vorgehen, dass zuerst die dyn. Blockdefinitionen, die kein anonymer Block sind kopiert werden und danacch die, die ein dynamischer Block sind. Jetzt erst fügst du die komplette Zeichnung ein. Ich vermute folgenden Hintergrund: Da für jede dyn. Änderung einer dyn. Blockreferenz ein anonymer Block angelegt wird, auf den diese dann verweist, welche ihrerseits dann auf die ursprüngliche Blockdefinition verweist, könnte es sein, dass die Reihenfolge des Imports der Blockdefinitionen von Bedeutung ist. Die Blockdefinitionen auch alle vorhanden sein müssen, bevor irgendwelche Blockreferenzen auf diese verweisen. Da der Modellbereich bekanntlich intern ebenfalls als Blockdefinition verarbeitet wird, und dieser beim Import als erste Blockdefinition eingefügt wird, existieren zu diesem Zeitpunkt die anonymen Blockdefinitionen noch nicht, was dann zu dieser Erscheinung führen könnte. Man beachte den Konjunktiv - ich habe es nicht getestet - es ist nur ein Vermutung. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
 defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theo37 Mitglied Techniker
 
 Beiträge: 426 Registriert: 08.10.2008 ACAD 2024 WIN 7 64bit Intel Xenon CPU E5-1620 3.60GHz 16GB RAM
|
erstellt am: 08. Jun. 2012 14:42 <-- editieren / zitieren --> Unities abgeben:         
Hallo Holger, es ist schon so wie Du schreibst. Ich prüfe jetzt vorher eine jede Blockdef die eingfügt werden soll ob sie dynamisch ist und noch nicht in der geöffneten Zeichnung vorhanden ist. Wenn das der Fall ist, dann hole ich sie mit WBlockclone in die Datenbank der geöffneten Zeichnung. Auf diese Weise erscheinen die eingefügten (dynamischen)Blöcke sofort richtig(Egal ob als JIG oder richtig eingefügt). Die unbennnaten Blöcke, füge ich nicht nochmal extra ein. Weiß nicht was das für einen Vorteil hätte. Danke und schönes WE Theo Try myDB = New Database(False, True) myDB.ReadDwgFile("D:\Lisp\" & AktBlock & ".dwg", IO.FileShare.None, True, "") Dim newBT As BlockTable Dim Blockdef As BlockTableRecord Dim MyID As ObjectId Using tr As Transaction = myDB.TransactionManager.StartTransaction newBT = tr.GetObject(myDB.BlockTableId, OpenMode.ForRead) For Each MyID In newBT Blockdef = tr.GetObject(MyID, OpenMode.ForRead) If Blockdef.IsDynamicBlock Then Using tr2 As Transaction = AcadDoc.Database.TransactionManager.StartTransaction Dim MyOldBT As BlockTable MyOldBT = AcadDoc.Database.BlockTableId.GetObject(OpenMode.ForRead) If MyOldBT.Has(Blockdef.Name) Then Else MsgBox("Dynamischer Block wird eingelesen") Dim map As New IdMapping Dim OBIDS As New ObjectIdCollection OBIDS.Add(MyID) AcadDoc.Database.WblockCloneObjects(OBIDS, AcadDoc.Database.BlockTableId, map, DuplicateRecordCloning.Ignore, False) End If tr2.Commit() End Using End If Next End Using AcadDoc.Database.Insert(AktBlock, myDB, False) If myDB IsNot Nothing Then myDB.CloseInput(True) : myDB.Dispose() : myDB = Nothing Jigaufruf(AktBlock) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theo37 Mitglied Techniker
 
 Beiträge: 426 Registriert: 08.10.2008 ACAD 2024 WIN 7 64bit Intel Xenon CPU E5-1620 3.60GHz 16GB RAM
|
erstellt am: 12. Jun. 2012 15:49 <-- editieren / zitieren --> Unities abgeben:         
Hallo Holger, mal ne allgemeine Frage zur Vorgehensweisse. Wenn ich in Autocad Objekte kopiere dann werden die neuen Objekte in der selben Reihenfolge angezeigt wie die alten. Wenn also vorher eine Schraffur im Hintergrund lag, dann liegt auch die neue Schraffur wieder im Hintergrund. Ich möchte jetzt mit WBlockclone das selbe erreichen, also daß die neu erzeugten Objekte in der selben Zeichnungsreihenfolge angezeigt werden wie die Ursprünglichen. Meine Idee dazu wäre die Objekte vor dem Clonen nach ihrem Handle oder der ObjektID zu sortieren, so daß die Objekte mit kleinem Handle oder ObjektID zuerst erstellt werden und die mit hohen Werten zum Schluß. Wäre das eine Möglichkeit die richtige Reihenfolge zu erhalten, oder bin ich da auf dem Holzweg? Gruß, Theo
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
       

 Beiträge: 4191 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 12. Jun. 2012 15:52 <-- editieren / zitieren --> Unities abgeben:          Nur für Theo37
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |