| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Bemassungen kopieren/einfügen (422 mal gelesen)
|
Kaanzler Mitglied Student
Beiträge: 16 Registriert: 12.02.2004 AutoDesk Map 3d 2007 WinXP HP Plotter Canon, Brother Drucker, HP Plotter Office 2K Visual Basic, C#
|
erstellt am: 26. Nov. 2008 09:24 <-- editieren / zitieren --> Unities abgeben:
Moin, ich habe da ein Problem: Ich möchte alle Elemente eines Layers lesen und in eine Datenbank schreiben. Das klappt auch ganz wunderbar. Aber: Wenn der Kunde eine Bemassung kopiert ( per dem Kontextmenü ) und dann irgendwo anders auf dem selben Layer einfügt, wird nicht nur die Bemassung neu erstellt, sondern auch Linienelemente, Text und Solid's erstellt. Diese Elemente wandern dann ebenfalls in die Datenbank. Das ist nicht erwünscht, weil die neue Bemassung ebenfalls drinsteht. So werden dann Elemente "doppelt" gespeichert. Hat jemand eine zündene Idee? Ich arbeite mit folgenden Events: _BeginCommand _EndCommand _ObjectAdded _ObjectErased _ObjectModified Vielen Dank für Vorschläge aller Art.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Ehrenmitglied V.I.P. h.c. Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 ACAD 2004DX Mechanical PP
|
erstellt am: 26. Nov. 2008 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für Kaanzler
Eine Bemaßung verweist nun einmal auf einen unbenannten Block, der Linien (Maß und Maßhilflinie), Solid .. für die Pfeilspitze und MText für den Maßtext enthält ... ------------------ - 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 |
Ex-Mitglied
|
erstellt am: 26. Nov. 2008 09:32 <-- editieren / zitieren -->
Hi, ohne nachgesehen zu haben bilde ich mir ein, dass diese Bemassungs-'Teilobjekte' alle eine ParentID haben, diese zu prüfen (während ObjectAdded) sollte Dir dann die Entscheidung des weiteren Programmverlaufs ermöglichen. Ich nehme auch an, dass BlockReferenzen kopieren, die AttributReferenzen inkludieren, auch abgefangen werden muss. - alfred - |
Kaanzler Mitglied Student
Beiträge: 16 Registriert: 12.02.2004 AutoDesk Map 3d 2007 WinXP HP Plotter Canon, Brother Drucker, HP Plotter Office 2K Visual Basic, C#
|
erstellt am: 26. Nov. 2008 11:12 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, vielen Dank für die Idee. Ich hab mal aufgelistet welche Elemente erstellt/geändert werden: Code:
OwnerName OwnerID iObjectID Typ ----------------------------------------------------------------- "AcDbBlockTableRecord" 2128474208 2128474216 AcDbLine "AcDbBlockTableRecord" 2128474208 2128474224 AcDbLine "AcDbBlockTableRecord" 2128474208 2128474232 AcDbLine "AcDbBlockTableRecord" 2128474208 2128474240 AcDbLine "AcDbBlockTableRecord" 2128474208 2128474248 AcDbSolid "AcDbBlockTableRecord" 2128474208 2128474256 AcDbSolid "AcDbBlockTableRecord" 2128474208 2128474264 AcDbMText"AcDbBlockTableRecord" 2130386168 2128474200 AcDbAlignedDimension
Die "Grund"-Elemente haben also nicht direkt etwas mit der Bemassung zu tun, oder? Ich habe mich entschieden, einen neuen Layer zu verwenden, auf dem nur Bemassungen liegen dürfen. Beim Speichern in die DB werden dann nur die Bemassungs-Elemente gesichert. Für weitere Ideen bin ich dennoch immer offen! Vielen Dank im Voraus. Kaanzler. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Ehrenmitglied V.I.P. h.c. Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 ACAD 2004DX Mechanical PP
|
erstellt am: 26. Nov. 2008 11:16 <-- editieren / zitieren --> Unities abgeben: Nur für Kaanzler
Zitat: Original erstellt von Kaanzler: Die "Grund"-Elemente haben also nicht direkt etwas mit der Bemassung zu tun, oder?
Doch .. Erklärung siehe obigen Post von mir .. ------------------ - 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 |
Kaanzler Mitglied Student
Beiträge: 16 Registriert: 12.02.2004 AutoDesk Map 3d 2007 WinXP HP Plotter Canon, Brother Drucker, HP Plotter Office 2K Visual Basic, C#
|
erstellt am: 26. Nov. 2008 12:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas, ich habe deine Antwort wohl gelesen. ( und auch verstanden ) Aber bietet AutoCad mir die Verbindung von der Bemassung zu den Grund-Elementen? Die OwnerId der Grundelemente verweist ja augenscheinlich nicht auf das Bemassungselement. Falls Du da eine Idee hast, wäre ich sehr dankbar. MfG Kaanzler Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 26. Nov. 2008 12:22 <-- editieren / zitieren -->
Hi, die OwnerID '2128474208' nehme ich an, zeigt genau auf den übergeordneten 'Bemassungsblock' (wie schon von CADmium beschrieben), die OwnerID '2130386168' zeigt wahrscheinlich auf den BlockTableRecord des Modellbereichs. Du brauchst eigentlich nur den BlocktableRecord, auf den die OwnerID hinzeigt, öffnen und nachsehen, ob die Eigenschaft '.IsLayout' auf true steht, dann wird das Element dem Modellbereich (oder Papierbereich) hinzugefügt, dann hast Du auch Deine Layer-Korrekturmaßnahmen zu exekutieren. Gegenprobe müßte die Eigenschaft BlocktableRecords.IsAnonymous sein (hab's nicht probiert und bin jetzt nciht sicher) - alfred -
|
Kaanzler Mitglied Student
Beiträge: 16 Registriert: 12.02.2004 AutoDesk Map 3d 2007 WinXP HP Plotter Canon, Brother Drucker, HP Plotter Office 2K Visual Basic, C#
|
erstellt am: 26. Nov. 2008 12:34 <-- editieren / zitieren --> Unities abgeben:
|