29/05/2013
Получение информации о гранях PolyFaceMesh в .NET
Это .NET версия этой статьи
Обычно достаточно просто мигрировать из кода ObjectARX в код AutoCAD .NET API, так как это просто обертки над ARX API. Вам нужно убрать префикс AcDb из имён классов базы данных, использовать foreach вместо функции создающей итератор, использовать транзакции, и большая часть следующего кода будет готова :)
Код - C#: [Выделить]
- [CommandMethod("PolyTest_PolyFace")]
- public void PolyTest_PolyFace()
- {
- Editor ed = acApp.DocumentManager.MdiActiveDocument.Editor;
- PromptEntityResult per = ed.GetEntity("\nВыберите многогранную сеть: ");
- if (per.Status != PromptStatus.OK)
- return;
- int color = 0;
- Database db = ed.Document.Database;
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- BlockTable bt =
- (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
- BlockTableRecord ms =
- (BlockTableRecord)tr.GetObject(
- bt[BlockTableRecord.ModelSpace],
- OpenMode.ForWrite);
- PolyFaceMesh pfm =
- (PolyFaceMesh)tr.GetObject(per.ObjectId, OpenMode.ForRead);
- Point3dCollection vertices = new Point3dCollection();
- foreach (ObjectId id in pfm)
- {
- DBObject obj = tr.GetObject(id, OpenMode.ForRead);
- if (obj is PolyFaceMeshVertex)
- {
- PolyFaceMeshVertex vertex = (PolyFaceMeshVertex)obj;
- vertices.Add(vertex.Position);
- }
- else if (obj is FaceRecord)
- {
- FaceRecord face = (FaceRecord)obj;
- Point3dCollection pts = new Point3dCollection();
- for (short i = 0; i < 4; i++)
- {
- short index = face.GetVertexAt(i);
- if (index != 0)
- pts.Add(vertices[Math.Abs(index) - 1]);
- }
- // Если точек 4 то рисуем пересечение
- // (может быть и 3 точки)
- if (pts.Count == 4)
- {
- for (int j = 0; j < 2; j++)
- {
- Line line = new Line(pts[j], pts[j + 2]);
- line.ColorIndex = color;
- ms.AppendEntity(line);
- tr.AddNewlyCreatedDBObject(line, true);
- }
- }
- color = (color + 1) % 7;
- }
- }
- tr.Commit();
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2012/07/get-facet-information-from-polyfacemesh.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=68.0
Опубликовано 29.05.2013
Отредактировано 08.06.2013 в 00:55:20
Отредактировано 08.06.2013 в 00:55:20