Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Datenbank mit Dynamischen Blöcken

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:  Datenbank mit Dynamischen Blöcken (1465 mal gelesen)
Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 06. Jun. 2012 15:38    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 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




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 08. Jun. 2012 08: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 Nur für Theo37 10 Unities + Antwort hilfreich

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


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 08. Jun. 2012 14: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

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


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

Beiträge: 423
Registriert: 08.10.2008

ACAD 2019
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 12. Jun. 2012 15: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

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




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 12. Jun. 2012 15:52    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 Theo37 10 Unities + Antwort hilfreich

... keine Ahnung! Um die Reihenfolge habe ich mich noch nie gekümmert.

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

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