Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Autocad Entities in Blöcken bearbeiten

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:  Autocad Entities in Blöcken bearbeiten (1693 mal gelesen)
veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 26. Jan. 2010 11:34    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 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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 26. Jan. 2010 12: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

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



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 10. Feb. 2010 09:44    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

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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.
良い精神



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. Feb. 2010 09:58    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 veydan 10 Unities + Antwort hilfreich

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



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 10. Feb. 2010 14: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

Okay ich werde mich bemühen alles sorgfältiger und richtig zu benennen.

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