|  |  | 
|  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | 
|  |  | 
|  | NVIDIA RTX PRO 6000 Blackwell Max-Q Workstation Edition, eine Pressemitteilung 
 | 
| Autor | Thema:  Blöcke mit Zeichnungsreihenfolge auflösen (2834 mal gelesen) | 
 | Theo37 Mitglied
 Techniker
 
   
 
      Beiträge: 427Registriert: 08.10.2008
 ACAD 2024WIN 7 64bit
 Intel Xenon CPU E5-1620 3.60GHz
 16GB RAM
 |    erstellt am: 04. Jul. 2014 08:51  <-- editieren / zitieren -->    Unities abgeben:            
  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
 
 
  
 
      Beiträge: 54Registriert: 12.09.2013
 AutoCAD Mechanical 2012-2015Windows 7 Enterprise X64
 Visual Studio 2010/2013
 Intel Xeon W3680
 Nvidia Quadro 2000
 16 GB RAM
 |    erstellt am: 04. Jul. 2014 09:51  <-- editieren / zitieren -->    Unities abgeben:           Nur für Theo37   | 
                        | Theo37 Mitglied
 Techniker
 
   
 
      Beiträge: 427Registriert: 08.10.2008
 ACAD 2024WIN 7 64bit
 Intel Xenon CPU E5-1620 3.60GHz
 16GB RAM
 |    erstellt am: 04. Jul. 2014 10:43  <-- editieren / zitieren -->    Unities abgeben:            
  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
 
 
  
 
      Beiträge: 54Registriert: 12.09.2013
 AutoCAD Mechanical 2012-2015Windows 7 Enterprise X64
 Visual Studio 2010/2013
 Intel Xeon W3680
 Nvidia Quadro 2000
 16 GB RAM
 |    erstellt am: 04. Jul. 2014 10:49  <-- editieren / zitieren -->    Unities abgeben:           Nur für Theo37   | 
                        | cadffm Ehrenmitglied V.I.P. h.c.
 良い精神
 
 
  
 
      Beiträge: 22689Registriert: 03.06.2002
 System: F1und Google
 |    erstellt am: 04. Jul. 2014 10:51  <-- editieren / zitieren -->    Unities abgeben:           Nur für Theo37   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
 
   
 
      Beiträge: 427Registriert: 08.10.2008
 ACAD 2024WIN 7 64bit
 Intel Xenon CPU E5-1620 3.60GHz
 16GB RAM
 |    erstellt am: 04. Jul. 2014 12:04  <-- editieren / zitieren -->    Unities abgeben:            
  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.
 良い精神
 
 
  
 
      Beiträge: 22689Registriert: 03.06.2002
 System: F1und Google
 |    erstellt am: 04. Jul. 2014 17:39  <-- editieren / zitieren -->    Unities abgeben:           Nur für Theo37   
  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
 
 
  
 
      Beiträge: 54Registriert: 12.09.2013
 AutoCAD Mechanical 2012-2015Windows 7 Enterprise X64
 Visual Studio 2010/2013
 Intel Xeon W3680
 Nvidia Quadro 2000
 16 GB RAM
 |    erstellt am: 07. Jul. 2014 08:43  <-- editieren / zitieren -->    Unities abgeben:           Nur für Theo37   
  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
 
   
 
      Beiträge: 427Registriert: 08.10.2008
 ACAD 2024WIN 7 64bit
 Intel Xenon CPU E5-1620 3.60GHz
 16GB RAM
 |    erstellt am: 08. Jul. 2014 16:02  <-- editieren / zitieren -->    Unities abgeben:            
  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.
 良い精神
 
 
  
 
      Beiträge: 22689Registriert: 03.06.2002
 System: F1und Google
 |    erstellt am: 08. Jul. 2014 18:02  <-- editieren / zitieren -->    Unities abgeben:           Nur für Theo37   
  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. // Problem1Also mußt du nachsehen an welcher (Anzeige)Stelle die Blockreferenz war und dort müssen nun alle anderen Objekte hin (Anzeigereihenfolge)
 // Problem2Die 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
 
   
 
      Beiträge: 427Registriert: 08.10.2008
 ACAD 2024WIN 7 64bit
 Intel Xenon CPU E5-1620 3.60GHz
 16GB RAM
 |    erstellt am: 10. Jul. 2014 10:05  <-- editieren / zitieren -->    Unities abgeben:            
  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 | 
                       
| 
  
 |  | 
 | cadffm Ehrenmitglied V.I.P. h.c.
 良い精神
 
 
  
 
      Beiträge: 22689Registriert: 03.06.2002
 System: F1und Google
 |    erstellt am: 10. Jul. 2014 10:37  <-- editieren / zitieren -->    Unities abgeben:           Nur für Theo37   
  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 |