Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Blöcke mit Zeichnungsreihenfolge auflösen

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:  Blöcke mit Zeichnungsreihenfolge auflösen (2510 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

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

erstellt am: 04. Jul. 2014 08:51    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,

ich möchte in meiner Zeichnung Blöcke auflösen. Diese Blöcke enthalten oft Schraffuren und Solids. Diese sollten nach dem Auflösen auch wieder in der Zeichnungsreihenfolge dargestellt werden wie sie ursprünglich in der Blockdefinition waren. Kann ich irgendwie diese Drawordertable des Blocktablerecord auf die aufgelösten Elemente anwenden. Hat sich mit diesem Problem schon mal jemand beschäftigt?
Oder weiß jemand ein Beispiel von dem ich abkupfern könnte.
Unten, ein Teil meines bisherigen Codes. Ich schiebe die Attribute schon mal in den Voredergrund, damit diese auf jeden Fall lesbar sind.
Aber das ist natürlich nur ne Teillösung.
Danke im Vorraus.


Rest = New DBObjectCollection
                MyBlockref.Explode(Rest)
                MyBlockref.Erase()
                For Each Myentity In Rest
                    If Myentity.Color.IsByBlock Then
                        Myentity.Color = MyBlockref.Color
                    End If
                    If Myentity.LineWeight = -2 Then
                        Myentity.LineWeight = MyBlockref.LineWeight
                    End If
                    If Myentity.Linetype = "ByBlock" Then
                        Myentity.Linetype = MyBlockref.Linetype
                    End If
                    If Myentity.GetType.Name = "AttributeDefinition" Then
                    Else
                        MyBTR.AppendEntity(Myentity)
                        acTrans.AddNewlyCreatedDBObject(Myentity, True)
                    End If
                Next
                dot = acTrans.GetObject(MyBTR.DrawOrderTableId, OpenMode.ForWrite)
                dot.MoveToTop(Attriids)

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

Karlovac
Mitglied



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

Beiträge: 54
Registriert: 12.09.2013

AutoCAD Mechanical 2012-2015
Windows 7 Enterprise X64
Visual Studio 2010/2013
Intel Xeon W3680
Nvidia Quadro 2000
16 GB RAM

erstellt am: 04. Jul. 2014 09:51    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,

wäre die Methode .ExplodeToOwnerSpace() eine Alternative?

schöne Grüße 

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: 04. Jul. 2014 10:43    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 Karlovac,

Das wäre eine Alternative die funktionieren würde, wenn ich die Einzelteile danach irgendwie packen könnte. wenn ich diese ID's irgenwie raus bekämme, könnte ich diese Funktion verwenden.
ich möchte bei diesen Einzelteilen noch ein paar Eigenschaften einstellen.

Gruß Theo

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

Karlovac
Mitglied



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

Beiträge: 54
Registriert: 12.09.2013

AutoCAD Mechanical 2012-2015
Windows 7 Enterprise X64
Visual Studio 2010/2013
Intel Xeon W3680
Nvidia Quadro 2000
16 GB RAM

erstellt am: 04. Jul. 2014 10: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 Theo37 10 Unities + Antwort hilfreich

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Jul. 2014 10:51    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

Du kannst doch prüfen welche Objekte NEU in der Datei sind 

PS: Auch wenn dich das weniger Interessieren dürfte:
Wenn man Acad als User normal bedient, dann liegen die zuletzt "aufgelösten" Objekte sogar als "letzter Auswahlsatz" vor !

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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: 04. Jul. 2014 12: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,

ich habe "explodetoownerspace" jetzt mal geprüft. Da ist meiner meinung nach kein wesentlicher Unterschied zu "Explode". Die ursprüngliche Zeichnungsreihenfolge wird ignoriert. Kann auch an meinen Blöcken liegen, die oft etwas chaotisch aufgebaut sind.
Mit meiner ursprünlichen Frage mit der Zeichnungsreihenfolge, kann keiner was anfangen?
Haben die gesprengten Einzelteile wirklich keinen Bezug mehr zu den ursprünlichen Blockteilen?
Wenn ich diesen Zusammenhang herstellen könnte, könnte ich auch die ursprüngliche Zeichnungsreihenfolge wieder herstellen.

Gruß, Theo

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Jul. 2014 17:39    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

Es sind ja neue Objekte die du erstellst, die haben weder mit dem Block noch der Blockreferenz zutun(die wird nur gelöscht).

Anzeigereihenfolge der Objekte zueinander kannst du auslesen,
dann an die Anzeigestelle der Blockreferenz setzen.
Aber da ich nicht .Net reden kann  lasse ich es hier auch mit dem Erklären.

Du willst ja den Acad-Ursprung Befehl nachprogrammieren..
Wenn es nur für dich ist und nur für die aktuelle Datei,
sende einen Command _explode und fertig.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

Karlovac
Mitglied



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

Beiträge: 54
Registriert: 12.09.2013

AutoCAD Mechanical 2012-2015
Windows 7 Enterprise X64
Visual Studio 2010/2013
Intel Xeon W3680
Nvidia Quadro 2000
16 GB RAM

erstellt am: 07. Jul. 2014 08:43    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

BTW: ist es möglich, dass sich die DrawOrder-Problematik nur auf Texte (insbesondere Attribute) bezieht?
Dazu findet man im Netz nämlich so einige Beiträge.

Habe das Thema Explode & DrawOrder mit einigen Blöcken mit Geometrie-Elementen (Line, PolyLine, Solid, Hatch) getestet
und mit verschiedenen Methoden (.Explode, .ExplodeToOwnerSpace bzw. auch SendCommand "_explode") die gleichen (richtigen) Ergebnisse erhalten;
während ein DrawOrder-Problem mit einem Attribute relativ leicht nachzustellen ist.

Schöne Grüße 

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. Jul. 2014 16:02    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


Muster.dwg

 
Hallo euch Beiden,

ich glaube die Probleme mit der Zeichnungsreihenfolge, treten nur auf wenn die Zeichnungsreihenfolge manuel also mit dem Befehl Zeichnungsreihenfolge verändert wurde. Oft wurde z.B. ein Text oder ein Attribute nachträglich mit einem Solid hinterlegt. Dieser wurde dann nachträglich hinter den Text oder Attribut geschoben.
im Augenblick behelfe ich mir damit, dass ich Attribute und Text einfach in den Vordergrund schiebe und Solids und Schraffuren dahinter. Bei einem Ring oder einer dicken Polylinie funktionert das aber schon nicht mehr(ist nicht sicher im Vorder oder Hintergrund). Schöner wäre es wenn wirklich die alte Zeichnungsreihenfolge wieder hergestellt würde.
Anbei mal ein Beispiel mit was ich eigentlich kämpfe.

Gruß, Theo

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 08. Jul. 2014 18:02    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

Ich kann dir nur Mut zusprechen dich da rein zu knien oder zu googeln, denn ich kann es dir auch nur
in der Theorie erzählen (weil ich ja kein .Net kann, nur die Dateistruktur ein wenig kenne). Oder es ist noch
jemand so nett und hilft dir hier im Board weiter.

Ziel: Nachprogrammierung des _explode Befehls.
<Attribute an Blockreferenzen lasse ich erst mal weg und nehme zunächst nur Blockelemente an, wie 3 Solids zB>

Problem1: Die "aufgelösten" Objekte sind neue Objekte

Problem2: Die (Anzeige)Reihenfolge untereinander, sofern diese nicht der Erstellreihenfolge entspricht, stimmt nicht mehr.

// Problem1
Also mußt du nachsehen an welcher (Anzeige)Stelle die Blockreferenz war und dort müssen nun alle anderen Objekte hin (Anzeigereihenfolge)

// Problem2
Die Reihenfolge der neuen Objekte entspricht der Objektreihenfolge in der ursprünglichen Blockdefinition,
sollte die Anzeigereihenfolge also manipuiert worden sein, so ist diese nun auch durcheinander,weil jungfräulich.
Also die Anzeigereihenfolge der Objekte in der Blockdefinition auslesen und entsprechend
die neuen Objekte sortieren(Anzeigereihenfolge).

Ich schreibe mal in Listenform, da ich etwas lispel 
Block mit 3 Solids, wobei das letzte Objekt in der Anzeigereihenfolge unter den beiden anderen liegt.
Merkliste:
'((Objekt1 AnzeigeObjekt2)
((Objekt2 AnzeigeObjekt3)
((Objekt3 AnzeigeObjekt2)
)

Wenn du nun die Anzeigereihenfolge der neuen Objekte dementsprechend geändert hast,
liegen alle Objekte zueinander richtig und auch in der DWG an der richtigen Stelle.
Ich habe Funktionen wie die Optionen des AutoCAD-Befehl _draworder zur Verfügung, also
Anzeigereihenfolge ganz hoch,runter/unterObjekt,überObjekt

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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: 10. Jul. 2014 10:05    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

Hi Cadffm,

Problem 1 hatte ich gar nicht, wäre aber leicht zu lösen gewesen.

Problem 2 beschreibt genau das Problem das ich hatte.
Da hat mir Deine Lispliste viel weitergeholfen.
Ich habe das ganze mal in .Net ausgeführt und es klappt jetzt einwandfrei. Ich hänge die Sub mal unten an, wenn es jemand brauchen kann oder Verbesserungsvorschläge hat.

Übrigens. Du schreibst "Ziel: Nachprogrammierung des _explode Befehls"
Das stimmt nicht ganz, ich versuche den "Burst" Befehl von den Expresstools nach zu programmieren. Der hat ein paar echt gute Eigenschaften, aber auch ein paar Nachteile die ich versuche heraus zu bekommen.

Gruß, Theo

Sub SetDrawOrder(Blockdefid As ObjectId, ByRef MyOrder() As Integer)
        Dim MyBlockdef As BlockTableRecord
        Dim OrgID As ObjectId
        Dim DraworderIds As ObjectIdCollection
        Dim Mydot As DrawOrderTable
        Dim i As Integer = 0
        Dim MyEnum As BlockTableRecordEnumerator
        Using aT As Transaction = dbdoc.TransactionManager.StartTransaction()
            MyBlockdef = aT.GetObject(Blockdefid, OpenMode.ForRead)
            Mydot = aT.GetObject(MyBlockdef.DrawOrderTableId, OpenMode.ForRead)
            DraworderIds = Mydot.GetFullDrawOrder(False)
            MyEnum = MyBlockdef.GetEnumerator()
            ReDim MyOrder(i)
            While MyEnum.MoveNext
                OrgID = MyEnum.Current
                If DraworderIds.Contains(OrgID) Then
                    MyOrder(i) = DraworderIds.IndexOf(OrgID)
                    i = i + 1
                    ReDim Preserve MyOrder(i)
                End If
            End While
            ReDim Preserve MyOrder(i - 1)
        End Using
    End Sub

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



Technischen Zeichner / Konstrukteur Anlagenplanung Walzwerk (m/w/d)

Wir sind ein smarter unabhängiger Mittelständler, der die Welt des Stahls besser macht. Wir sind die Pioniere der renommierten 3-Walzentechnologie in der internationalen Stahlbranche. Engineering bedeutet bei uns, über das Bestehende hinauszudenken. Seit mehr als sieben Jahrzehnten steht KOCKS rolled® steel für exzellente Güte.

Die Kultur bei KOCKS ist weltoffen, kollegial & aufrichtig: ...

Anzeige ansehenTechnischer Zeichner, Bauzeichner
cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 10. Jul. 2014 10:37    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

Wow, da bin ich aber Stolz wie Bolle auf mich!
Burst ist freilich ein netter Anfang, aber es fehlte wohl die Motivation es richtig zu machen ;D
Aber es gibt ja andere Routinen die das besser können.

Wir, COD, bietet auch alle sinnvollen Optionen in unserer "Burstroutine" an, dies ist auch
alles in .Net (C#) umgesetzt, aber das machen bei uns die Programmierer, nicht ich.
Wenn ich dir dann dennoch helfen konnte, um so schöner.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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