| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Autocad Entities in Blöcken bearbeiten (1695 mal gelesen)
|
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 26. Jan. 2010 11:34 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich hatte mal Probleme, dass wenn in einer Zeichnung Elemente in einem Block sind und andere nicht, diese nicht gleich verarbeitet wurden. Z.B Die Layerfarbe umstellen, da wurden dann die Elemente im Block übergangen. Kann da jemand den Grund dafür erklären? Bzw passiert das auch wenn man über .NET (transaction, getobject,..) das Element ändert oder noch mit dem AutoCad Objekt (VBA Stil) mfg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 26. Jan. 2010 12:40 <-- editieren / zitieren -->
Hi, da sind ein paar Rückfragen notwendig: Wenn Du die Farbe eines Layers änderst, dann hängt es an der Definition des Blocks (der Elemente in der Blockdefinition), wie sich diese Farbe denn auswirkt (auswirken soll). In Blockdefinitionen sind Elemente oft auf Layer 0, oft mit Farbe 'byBlock' definiert u.v.a. Variationen. Da kanns schon passieren, das wegen dieser Definition eine Änderung der Layerfarbe nicht die Auswirkung hat, dass die gesamte Blockreferenz die Farbe annimmt. Deine Beschreibung hier lässt eben vieles an Zeichnungsstruktur offen, sagen kann ich nur, dass per dotNET-Applikationen die Farbmodifikationen von Layern bei mir immer die richtigen Ergebnisse gebracht haben. Wenn Du ein reproduzierbares Beispiel hast, wo Du meinst, dass es mit diesem falsch läuft, dann lass uns Zeichnung und Code hier sehen und probieren. - alfred - ------------------ www.hollaus.at |
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 26. Jan. 2010 12:42 <-- editieren / zitieren --> Unities abgeben:
ich werde bald was zur Verfügung haben, wenn es damit nicht klappt werde ich es posten. Wollte mich vorher schon erkundigen, nicht dass es dann dort nicht klappt, aber ich werde auf deine Hinweise mal acht geben, danke. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 10. Feb. 2010 09:44 <-- editieren / zitieren --> Unities abgeben:
So, hier ist der Code für das Umlegen der Layer. Blöcke werden richtig umgelegt, Elemente in den Blöcken aber nicht. Ist hier das SelectionSet falsch, oder muss ich da sowieso die Blöcke nochmal durchlaufen? Code:
Public Function ChangeEntitiesLayer(ByVal SourceLayer As String, ByVal TargetLayer As String) Dim tDocLock As ApplicationServices.DocumentLock = Nothing Dim targetlayerobjectid As ObjectId = Nothing Try Dim doc As Document = Application.DocumentManager.MdiActiveDocument Dim db As Database = doc.Database tDocLock = doc.LockDocument Dim tr As Transaction = db.TransactionManager.StartTransaction() Dim ed As EditorInput.Editor = doc.Editor Dim lt As LayerTable = Nothing Dim ent As Entity = Nothing Using (tr) lt = CType(tr.GetObject(db.LayerTableId, OpenMode.ForWrite, True, True), LayerTable) If lt.Has(SourceLayer) Then If lt.Has(TargetLayer) Then targetlayerobjectid = lt.Item(TargetLayer) Dim Filter As TypedValue() = New TypedValue(0) {} Filter(0) = New TypedValue(CInt(DxfCode.LayerName), SourceLayer) Dim tAcadSelectFilter As New EditorInput.SelectionFilter(Filter) Dim tSelSetRes As EditorInput.PromptSelectionResult = ed.SelectAll(tAcadSelectFilter) 'tAcadDocED.GetSelection(tPrompt) If (tSelSetRes.Value IsNot Nothing) AndAlso (tSelSetRes.Value.Count > 0) Then TOOLS.WriteProtokoll("Lege " & tSelSetRes.Value.Count & " elemente von layer " & SourceLayer & " auf layer " & TargetLayer, Me.Logfile) For Each id As ObjectId In tSelSetRes.Value.GetObjectIds ent = CType(tr.GetObject(id, OpenMode.ForWrite, True, True), Entity) ent.LayerId = targetlayerobjectid Next ent.Dispose() ent = Nothing Else 'MsgBox("keine Elemente auf dem Layer " & SourceLayer & " gefunden") End If tAcadSelectFilter = Nothing Else ' MsgBox("Ziellayer:" & SourceLayer & " nicht gefunden") End If Else ' MsgBox("Ausgangslayer:" & SourceLayer & " nicht gefunden") End If tr.Commit() End Using tr.Dispose() tr = Nothing If tDocLock IsNot Nothing Then tDocLock.Dispose() : tDocLock = Nothing Catch ex As Exception MsgBox(ex.Message & vbNewLine & ex.StackTrace) Finally End Try Return 0 End Function
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 10. Feb. 2010 09:54 <-- editieren / zitieren -->
Hi, >> ...Elemente in den Blöcken aber nicht. >> Ist hier das SelectionSet falsch... Auf die Elemente der Blockdefinition kannst Du nicht mit SelectionSet hingreifen. SelectionSet ist eine Editor-Funktion und gilt daher nur für die im Editor aktuelle Datenbank. Die Elemente der BlockDEFINITION werden hier nicht gewählt, nur die BlockREFERENZEN, die im Modellbereich/Papierbereich zu finden sind. Willst Du die Layer der Elemente in den Blockdefinitionen ändern, dann musst Du den BlockTableRecord öffnen und Element für Element durchscannen und modifizieren. - alfred - ------------------ www.hollaus.at |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 10. Feb. 2010 09:58 <-- editieren / zitieren --> Unities abgeben: Nur für veydan
Ein VORSCHLAG wie man die Dinge beim Namen nennen kann, auch würde der exakte Objektname Sinn machen etc. BLOCK BLOCKELEMENTE ATTRIBUTDEFINITIONEN BLOCKREFERENZEN ATTRIBUTE (wobei der Block-Record garkeinen Layer hat) "Blöcke gehen, Objekte im Block aber nicht" Man kann sich zwar denken was du meinst, aber wer so Tief in der Datenstruktur wuselt von dem kann man doch erwarten einigermaßen geordnete Vokabeln zu nutzen oder ? (evtl. kommst du gerade deswegen oft selbst durcheinander )
------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
veydan Mitglied
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 10. Feb. 2010 14:04 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|