• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Компас API 2D Чертежи

Автор АлександрСел, 21.03.21, 17:09:29

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

АлександрСел

Как с помощью API в C# получить с ранее созданного 2D чертежа габаритный размер, если на чертеже всегда только 1 чертёж (размеры на нем не проставлены)?

Дмитрий22

Не много не понятен вопрос. Вам нужен габаритный размер детали, которая находится на одном из видов чертежа? Ваша фраза "на чертеже всегда только 1 чертёж" немного сбивает с толку. Масло-масляное.

АлександрСел

Цитата: Дмитрий22 от 21.03.21, 19:53:26Не много не понятен вопрос. Вам нужен габаритный размер детали, которая находится на одном из видов чертежа?
Да. Только у меня видов нет - у меня развёртка.

Дмитрий22

22.03.21, 05:47:53 #3 Последнее редактирование: 22.03.21, 06:25:36 от Дмитрий22
Если у Вас есть 3D модель детали, то лучше через нее:
IKompasDocument3D detal3D = (IKompasDocument3D)appl.Documents.Open(file, false, false);
IFeature7 f7 = detal3D.TopPart as IFeature7;
double x1 = 0, y1 = 0, z1 = 0, x2 = 0, y2 = 0, z2 = 0;
double maxgabarit = 0.0;
if (f7.ResultBodies is IBody7)
  {
    IBody7 bb = f7.ResultBodies as IBody7;
    bb.GetGabarit(out x1, out y1, out z1, out x2, out y2, out z2);
    XGabaritSize = Math.Round(x2 - x1, 1, MidpointRounding.ToEven) ; //'габаритный размер по оси X
    YGabaritSize = Math.Round(y2 - y1, 1, MidpointRounding.ToEven) ; //'габаритный размер по оси Y
    ZGabaritSize = Math.Round(z2 - z1, 1, MidpointRounding.ToEven) ; //'габаритный размер по оси Z
    XGabaritSize = Math.Round(XGabaritSize, 1, MidpointRounding.ToEven);
    maxgabarit = XGabaritSize;
     if (YGabaritSize > maxgabarit) maxgabarit = YGabaritSize;
     if (ZGabaritSize > maxgabarit) maxgabarit = ZGabaritSize;
    }
Если 3D детали нет, то можно через функцию определения габарита вида ksGetObjGabaritRect
IKompasDocument2D doc2DT = (IKompasDocument2D)appl.ActiveDocument;
IViews ivs = doc2DT.ViewsAndLayersManager.Views;
IView v1 = ivs.ActiveView;
ksRectParam pRect = (ksRectParam)kompas.GetParamStruct((short)StructType2DEnum.ko_RectParam);
  if (pRect == null)  {kompas.ksMessage("Ошибка получения интерфейса"); return;}
ksMathPointParam pBot = (ksMathPointParam)kompas.GetParamStruct((short)StructType2DEnum.ko_MathPointParam);
ksMathPointParam pTop = (ksMathPointParam)kompas.GetParamStruct((short)StructType2DEnum.ko_MathPointParam);

ksDocument2D docks1 = (ksDocument2D)kompas.TransferInterface(doc2D, int)Kompas6Constants.ksAPITypeEnum.ksAPI5Auto, 0);           
docks1.ksGetObjGabaritRect(v1.Reference, pRect);

 pBot = pRect.GetpBot();
 pTop = pRect.GetpTop();


///*искомые габариты*//
//pTop.x - pBop.x

//pTop.y - pBot.y
+ Благодарностей: 2

АлександрСел

Дмитрий22, очень вам благодарен. Очень мне помогли!