Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Revit API / Не ровный DirectShape
« Последний ответ от bronx 27-01-2022, 07:43:09 »
Приветствую. Всё ещё пытаюсь побороть DirectShape :D
Проблема возникает, когда я пытаюсь создать DirectShape из перегруженного TessellatedFace( в который передаётся IList<IList<XYZ>>) для получения поверхности с отверстиями. Но в итоге получается кривой DirectShape (см. вложение). Ниже прикладываю код, который я использую. Просьба помочь разобраться, как построить ровный DirectShape.

Код - C# [Выбрать]
  1. public static ElementId CreateDirectShapeWithHoles(
  2.             Document doc,
  3.             string shapeName,
  4.             string appGuid,
  5.             IList<IList<XYZ>> pointsList)
  6.         {
  7.             var materialId = GetMaterial(doc);
  8.  
  9.             var tessellatedFace = new TessellatedFace(pointsList, materialId);
  10.  
  11.             return CreateDirectShapeFromTessellatedFace(doc, shapeName, appGuid, tessellatedFace);
  12.         }
  13.  
  14.         private static ElementId CreateDirectShapeFromTessellatedFace(
  15.             Document doc, string shapeName, string appGuid, TessellatedFace tessellatedFace)
  16.         {
  17.             var builder = new TessellatedShapeBuilder
  18.             {
  19.                 LogString = shapeName
  20.             };
  21.  
  22.             builder.OpenConnectedFaceSet(true);
  23.  
  24.  
  25.             if (builder.DoesFaceHaveEnoughLoopsAndVertices(tessellatedFace))
  26.             {
  27.                 builder.AddFace(tessellatedFace);
  28.             }
  29.  
  30.             builder.CloseConnectedFaceSet();
  31.  
  32.             builder.Build();
  33.             var cat = GetBuiltInCategoryForShape();
  34.             var ds = DirectShape.CreateElement(doc, new ElementId(cat));
  35.  
  36.             ds.ApplicationId = appGuid;
  37.             ds.ApplicationDataId = shapeName;
  38.  
  39.             ds.Name = shapeName.Replace(':', '_');
  40.             ds.SetShape(builder);
  41.  
  42.             return ds.Id;
  43.         }


2
Попробуйте с опцией
AcadVersion=R12
3
это примитив автокада? Любой получается? Полилиния, круг, сплайн и т.д. , а что вы подразумеваете под его наследниками?
Да. AcadEntity - это абстрактный класс примитива. Полилиния, круг, и т.д. - это уже примитивы классов, унаследованных от AcadEntity (у них есть общие свойства - слой, цвет, вес линии, видимость и т.д. и т.п)
4
AutoCAD .NET API / Re: Как получить границы объекта (COM/ActiveX)
« Последний ответ от marsh_one 26-01-2022, 11:20:23 »
Код - C# [Выбрать]
  1. AcadEntity
это примитив автокада? Любой получается? Полилиния, круг, сплайн и т.д. , а что вы подразумеваете под его наследниками?
На основании полученных координат создаю функцию по созданию текста.
В таком виде нормально или ещё что-то учесть посоветуете? Может что-то лучше не так делать...
Код - C# [Выбрать]
  1.         static public void CrText(dynamic app, dynamic acDoc, dynamic modelSpace, double xMax, double Ymax,  double Zmax)
  2.         {
  3.             AcadText newText = default(AcadText);
  4.                         double[] insertPoint = new double[]
  5.                                              {  xMax,
  6.                                                 Ymax,
  7.                                                 Zmax
  8.                                              };
  9.             string NWText = "sk;dfsdfns;akf;jsanfnsa;kjfg;sadnfgkndsafg";
  10.            double Hei_Text = 100;
  11.           //  newText = CallFunc((object)app, () => acDoc.ModelSpace.AddText(NWText, Hei_Text, insertPoint));
  12.             newText =acDoc.ModelSpace.AddText(NWText, insertPoint, Hei_Text);
  13.             newText.color = ACAD_COLOR.acWhite;
  14.         }
5
Так вот сразу и не скажешь, а какой функцией экспорт делается?
Обычно выгружаю так:

Код - Visual Basic [Выбрать]
  1. fname = ThisDoc.Document.FullFileName.Remove(ThisDoc.Document.FullFileName.LastIndexOf("\")) & "\" & iProperties.Value("Project", "Part Number")  & " " & iProperties.Value("Project","Description") & ".dxf"
  2. oDataIO = ThisDoc.Document.ComponentDefinition.DataIO
  3. sOut = "FLAT PATTERN DWG?AcadVersion=2000&INTERIORPROFILESLayer=0&OUTERPROFILELayer=0&FEATUREPROFILESLayer=0&InvisibleLayers=IV_UNCONSUMEND_SKETCHES­;IV_ALTREP​_BACK;IV_ALTREP_FRONT;IV_ARC_CENTERS;IV_TOOL_CENTE​R_DOWN;IV_TOOL_CENTER;IV_ARC_CENTERS;IV_TANGENT;IV_BEND;IV_BEND_DOWN&SplineTolerance Double 0.01"
  4. oDataIO.WriteDataToFile(sOut, fname)
  5. ThisDoc.Save
6
Хм...я думал значения сразу можно присвоить переменной типа
Код - C# [Выбрать]

    double
Ну как минимум не double, а double [], так как это массив.
Ничего не нашёл по
Код - C# [Выбрать]

    GetBoundingBox

касательно C#
Плохо искал. Вот пример: https://forums.autodesk.com/t5/net/how-to-use-getboundingbox/m-p/5911961#M46675
А почему объект
Код - C# [Выбрать]

    en

к которому применяем свойство
Код - C# [Выбрать]

    GetBoundingBox

приводим к типу
Код - C# [Выбрать]

    AcadEntity
Я не знаю какого типа у тебя en, а метод GetBoundingBox применим только к AcadEntity и его "наследникам".
7
AutoCAD .NET API / Re: Как получить границы объекта (COM/ActiveX)
« Последний ответ от marsh_one 25-01-2022, 15:25:41 »
Хм...я думал значения сразу можно присвоить переменной типа
Код - C# [Выбрать]
  1. double
.
Ничего не нашёл по
Код - C# [Выбрать]
  1. GetBoundingBox
касательно C# и решил по аналогии с Vba. Только в vba эти значения типа
Код - C# [Выбрать]
  1. Variant
.
А почему объект
Код - C# [Выбрать]
  1. en
к которому применяем свойство
Код - C# [Выбрать]
  1. GetBoundingBox
приводим к типу
Код - C# [Выбрать]
  1. AcadEntity
?
8
А вот такой момент, если не затруднит,  можете прокомментировать:
Код - C# [Выбрать]

    (en as AcadEntity)
Приведение к типу AcadEntity
И почему этим переменным
Код - C# [Выбрать]

    object MinimizeBox, MaximizeBox;

присвоили тип
Код - C# [Выбрать]

    object
Это базовый тип для всех типов в .NET.
9
AutoCAD .NET API / Re: Как получить границы объекта (COM/ActiveX)
« Последний ответ от marsh_one 25-01-2022, 14:28:00 »
Спасибо огромное!
А вот такой момент, если не затруднит,  можете прокомментировать:
Код - C# [Выбрать]
  1. (en as AcadEntity)
И почему этим переменным
Код - C# [Выбрать]
  1. object MinimizeBox, MaximizeBox;
присвоили тип
Код - C# [Выбрать]
  1. object
Страницы: [1] 2 3 ... 10