Добрый день, вопрос по использованию brep api для получения внешних граней 3д-тела, полученного из объекта трубопроводной сети Civil3D. Вопрос не в ветке civil3d, так как операции только с телами, которые зачастую имеют выпуклые поверхности, и с ними не проходит обработка средствами brep api (вернее проходит, но получается какая-то
![В замешательстве :-\](https://adn-cis.org/forum/Smileys/default/undecided.gif)
).
В качестве примера к посту будет приложен файл с двумя простыми телами, при обработке которых они не получаются. Конечная цель, вообще, получить коллекцию граней тела для экспорта в ifc (и там как я вижу по файлу выходит "лажа"). На примере ниже при анализе "трубы" - вытянутого тела возвращаются вообще 2 точки ....
using (DocumentLock acDocLock = ac_doc.LockDocument())
{
using (Transaction acTrans = ac_db.TransactionManager.StartTransaction())
{
Solid3d input_solid = acTrans.GetObject(input_solid_id, OpenMode.ForRead) as Solid3d;
//Temporal containers for external surface definition (faces indexes and Point3d list)
List<List<int>> faces_indexed = new List<List<int>>();
List<Point3d> points_temp = new List<Point3d>();
using (Brep brp = new Brep(input_solid))
{
foreach (Autodesk.AutoCAD.BoundaryRepresentation.Face fce in brp.Faces)
{
List<int> coord_indexes = new List<int>(); // КУДА ЭТО????
foreach (BoundaryLoop lp in fce.Loops)
{
foreach (Edge edg in lp.Edges)
{
vertex_opeations(edg.Vertex1);
vertex_opeations(edg.Vertex2);
void vertex_opeations(Autodesk.AutoCAD.BoundaryRepresentation.Vertex v)
{
if (!points_temp.Contains(v.Point))
{
points_temp.Add(v.Point);
coord_indexes.Add(points_temp.Count() - 1);
}
else
{
int point_last = points_temp.FindIndex(a => a == v.Point);
coord_indexes.Add(point_last);
}
}
}
}
faces_indexed.Add(coord_indexes);
}
}
this.surf_row = new ifc.BaseStructures(points_temp, faces_indexed).finish_surface;
acTrans.Commit();
}
}
Я был бы безмерно счастлив существуй возможность
корректной передачи тела в dxf/stl но не вышло. stl через раз косячный (какие-то ошибки выбиваемые по коду со стороны ObjectARX), а dxf не читается (даже будучи экспортированный в AC1021 (2004)) в netdxf/freecad. В Autocad конечно же читается
![Обеспокоенный :-[](https://adn-cis.org/forum/Smileys/default/embarrassed.gif)
. В родной step/ifc нет экспорта программного
В многогранную сеть вообще нельзя экспортировать - размер файла будет гигантский, да и не факт что поможет .. с этим тоже не выходило.
P.S. полный код можно глянуть тут
https://github.com/GeorgGrebenyuk/civil3d_2_ifc, не жалко (как раз отладить...).