Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: shss от 26-04-2017, 13:41:46

Название: Длина и ширина пола
Отправлено: shss от 26-04-2017, 13:41:46
Добрый день!
Как получить длину и ширину пола?
Пытаюсь получить через Curve:
Код - C# [Выбрать]
  1. ICollection<ElementId> floorIds;
  2. using (Transaction tr = new Transaction(doc, "Temporary delete")) {
  3.     tr.Start();
  4.     floorIds = doc.Delete(el.Id);
  5.     tr.RollBack();
  6. }
  7. List<ModelLine> mLines = new List<ModelLine>();
  8. foreach (ElementId id in floorIds) {
  9.     Element mLine = doc.GetElement(id) as ModelLine;
  10.     if (null != mLine) {
  11.         LocationCurve lCurve = mLine.Location as LocationCurve;
  12.         double len = lCurve.Curve.Length;
  13.     }
  14. }
  15.  

Но получаю неверные значения.
Есть ли альтернативный вариант?

Спасибо.
Название: Re: Длина и ширина пола
Отправлено: shss от 26-04-2017, 15:29:17
Реализовал, через поиск поверхностей:
Код - C# [Выбрать]
  1. Options opt = new Options();
  2. opt.ComputeReferences = true;
  3. GeometryElement geoElement = (el as Floor).get_Geometry(opt);
  4. foreach (GeometryObject obj in geoElement) {
  5.     Solid solid = obj as Solid;
  6.     if (null != solid) {
  7.         foreach (Face face in solid.Faces) {
  8.             PlanarFace pf = face as PlanarFace;
  9.             if (null != pf) {
  10.                 if (IsVertical(pf.FaceNormal, _tolerance) && pf.FaceNormal.Z < 0) {
  11.                      foreach (Edge edge in pf.EdgeLoops) {
  12.                          foreach (EdgeArray edgeArray in pf.EdgeLoops) {
  13.                              foreach (Edge edge in edgeArray) {
  14.                                 //edge.ApproximateLength; - необходимая длина поверхности
  15.                              }
  16.                          }
  17.                      }
  18.                 }
  19.            }
  20.       }
  21. }
  22.