| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Durchsuche Blocktable mit Filter (1189 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 09. Okt. 2015 17:39 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 09. Okt. 2015 17:52 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
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
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 09. Okt. 2015 18:15 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 09. Okt. 2015 18:26 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 10. Okt. 2015 14:30 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 1833 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 / zitieren --> Unities abgeben:
|
Ingenieur Studio HOLLAUS Mitglied CAD / CAFM / GIS Beratung-Programmierung-Schulung
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 / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 10. Okt. 2015 19:36 <-- editieren / zitieren --> Unities abgeben:
|
Ingenieur Studio HOLLAUS Mitglied CAD / CAFM / GIS Beratung-Programmierung-Schulung
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 / zitieren --> Unities abgeben: Nur für cadplayer
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
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 10. Okt. 2015 20:23 <-- editieren / zitieren --> Unities abgeben:
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 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 / zitieren --> Unities abgeben:
|