Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Durchsuche Blocktable mit Filter

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:  Durchsuche Blocktable mit Filter (1185 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 09. Okt. 2015 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

Hallo!
Ein kurze Frage, wie ich die acad.db nach einem bestimmten Layer (string name) und bestimmten entities (string dxfname) - "LWPOLYLINE"
Ich bin ein wenig auf dem Holzweg und mache prizipiell etwas falsch. Vielleicht fällt es dem Fortgeschrittenen sofort auf ?!
Code:

public void DumpEntitiesFromBlocktableByFilter(string layName, string dxfName)
        {
            Document acadDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database acadDb = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

            ObjectId m_EntId = ObjectId.Null;

            using (Transaction tr = acadDb.TransactionManager.StartTransaction())
            {
                BlockTable acadBlkTbl = tr.GetObject(acadDb.BlockTableId, OpenMode.ForRead) as BlockTable;
                BlockTableRecord acadBlkTblRec = acadBlkTbl[BlockTableRecord.ModelSpace].Open(OpenMode.ForRead) as BlockTableRecord;

                LayerTable acadLyrTbl = tr.GetObject(acadDb.LayerTableId, OpenMode.ForRead) as LayerTable;
                LayerTableRecord acLyrTblRec = new LayerTableRecord();

                foreach (ObjectId ObjId in acadBlkTblRec)
                {
                    if (acadLyrTbl.Has(layName) && ObjId.ObjectClass.DxfName == dxfName)
                    {
                        ed.WriteMessage("\nDXF name: " + ObjId.ObjectClass.DxfName);
                        ed.WriteMessage("\nObjectID: " + ObjId.ToString());
                        ed.WriteMessage("\nHandle: " + ObjId.Handle.ToString());
                        ed.WriteMessage("\n");
                    }
                }
            }
        }


------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 09. Okt. 2015 17:52    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 cadplayer 10 Unities + Antwort hilfreich

keine Zeit, darum nur der Code, ungetestet!
Code:

public static ObjectIdCollection  BlahBlah(Database _db, Type _ObjectType, String _LayerName)
        {
            ObjectIdCollection _ObjectsOnLayer = new ObjectIdCollection();
            using (Transaction _tr = _db.TransactionManager.StartTransaction())
            {
                ObjectId _searchLayerId = ObjectId.Null;
                using (LayerTable _lt = (LayerTable)_tr.GetObject(_db.LayerTableId, OpenMode.ForRead))
                {
                    foreach (ObjectId _oid in _lt)
                    {
                        using (LayerTableRecord _ltr = (LayerTableRecord)_tr.GetObject(_oid, OpenMode.ForRead))
                        {
                            if (_ltr.Name.ToUpper() == _LayerName.ToUpper())
                            { _searchLayerId = _oid; }
                        }
                    }
                }

                using (BlockTable _bt = (BlockTable)_tr.GetObject(_db.BlockTableId, OpenMode.ForRead))
                {
                    foreach (ObjectId _oid in _bt)
                    {
                        using (BlockTableRecord _btr = (BlockTableRecord)_tr.GetObject(_oid, OpenMode.ForRead))
                        {
                            foreach (ObjectId _eid in _btr)
                            {
                                using (Entity _ent = (Entity)_tr.GetObject(_eid, OpenMode.ForRead))
                                {
                                    if (_ent.GetType() == _ObjectType && _ent.LayerId == _searchLayerId)
                                        _ObjectsOnLayer.Add(_oid);
                                }
                            }
                        }
                    }
                }
            }
            return _ObjectsOnLayer;
        }


Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 09. Okt. 2015 18:15    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

Ui das ging schnell, danke Holger. Wird sicherlich 1a funktionieren, hab nur grad kein acad griffbereit.

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 09. Okt. 2015 18:26    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 cadplayer 10 Unities + Antwort hilfreich

... du musst die Objektstruktur vom AutoCAD 'inhalieren'. Dann wird's dir sicher auch klarer.

Grüße!
holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 10. Okt. 2015 14:30    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

Jep Holger leuchtet mir ein.
Was mir in .net gegenüber com ein wenig fremd klingt, dass es plötzlich keine LwPolyline und Polyline (die 2d und 3d zusammenfasst) gibt. Alles läuft in seperaten Klassendefinitionen
Gefunden:
Autodesk.AutoCAD.DatabaseServices.Polyline
Autodesk.AutoCAD.DatabaseServices.Polyline2d
Autodesk.AutoCAD.DatabaseServices.Polyline3d

Was mir noch ein Rätsel aufgibt, was genau hinter "Type _ObjectType" steht. Mir ist klar, dass hier das Polyline-objekt übergeben wird, was ist Type aber für ein objekt (konnte ich nicht herausfinden)


------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 10. Okt. 2015 17:47    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

Kann man eigentlich verhindern, dass die acadDb auch nach gefundenen Elementen in Blöcken und Layouts durchsucht wird ?
Mich interessiert nur der Modellbereich mit allen befindligen Polylinien beispielsweise!

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


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

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 10. Okt. 2015 19:03    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 cadplayer 10 Unities + Antwort hilfreich

Ich würde nicht durchiterieren, wenn die database im Editor geladen ist, ich würde hier SelectionSet verwenden.
Und um auf Modellbereich zu begrenzen kann man in den SelectionFilter mittels Code=410 und Wert="Model" filtern.

------------------


www.cars4fun.at

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 10. Okt. 2015 19:36    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

Den selectionfilter. habe ich mir angeschaut. Da müsste man jedoch mit dem promptselection arbeiten. und das bedarf der auswahl im modellbereich. das wollte ich vermeiden

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


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

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 10. Okt. 2015 20:03    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 cadplayer 10 Unities + Antwort hilfreich

Zitat:
...und das bedarf der auswahl im modellbereich
Nee, wieso?

Code:
Dim tAcadDoc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim tAcadDocLock As ApplicationServices.DocumentLock = Nothing
Dim tTrAct As DatabaseServices.Transaction = Nothing
Try
  Dim tFilterVals(0 To 1) As DatabaseServices.TypedValue
  tFilterVals(0) = New DatabaseServices.TypedValue(DatabaseServices.DxfCode.Start, "Polyline")
  tFilterVals(1) = New DatabaseServices.TypedValue(DatabaseServices.DxfCode.LayoutName, "Model")

  Dim tFilter As EditorInput.SelectionFilter = New EditorInput.SelectionFilter(tFilterVals)

  Dim tSelRes As EditorInput.PromptSelectionResult = tAcadDoc.Editor.SelectAll(tFilter)
  If (tSelRes IsNot Nothing) AndAlso (tSelRes.Value IsNot Nothing) AndAlso (tSelRes.Value.Count > 0) Then
      'hier die selektierten Polylinien aus dem Modellbereich
  End If

  Catch ex As Exception
      Call MsgBox("Fehler aufgetreten: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
  End Try


------------------


www.cars4fun.at

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 10. Okt. 2015 20:23    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

super danke dir, die methode habe ich übersehen. Werd es demnächst mal testen

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 12. Okt. 2015 07:55    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

Perfekt, das war genau das was ich erreichen wollte - danke nochmal für die schnelle Hilfe !

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

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