как создать сгиб листового тела по ребру

Автор HellFox, 06.09.16, 11:34:52

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

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

HellFox

Доброго времени суток, уважаемые форумчане. Пытаюсь средствами API7 создать произвольную деталь из листового тела с некоторым количеством сгибов по рёбрам. Собственно листовое тело создал и упёрся в создание сгиба.  на интерфейс сгиба я вышел, но вот как выбрать ребро, на котором необходимо сделать сгиб, никак не могу разобраться. Подскажите пожалуйста.

Vitalij Lysanov

Сгиб задается точкой на ребре листового тела.

Ниже пример на Python и комплексных числах.

Задание: 4 точки.

sdv=20+120*1j
t1=1+27*1j+sdv
t2=1-22*1j+sdv
t4=-1+22*1j+sdv
t3=-11-32*1j+sdv

Задание на сгиб, где сгибать, и направление сгиба.

sg(0.5*(t4+t3),True)
sg(0.5*(t2+t3),False)
sg(0.5*(t4+t1),False)
sg(0.5*(t2+t1),False)


Сдвигая, получим новые тела, если не пересекутся.
Эскизы можно еще и вращать (не реализовано).

Сейчас в функции 2 параметра, точка привязки сгиба и направление сгиба.
Т.к. параметров может быть очень много, можно перейти на циклы, и изменять параметры в каждом цикле.






Есть еще дополнение, на которое библиотека дает ошибку, но строит.

На изогнутом теле, можно взять точки посередине ребра, и можно еще сгибать.
Точки нужно считать в пространстве до 7 знака, при всех возможных параметрах сгиба.

Для примера, первый сгиб на 90 градусов, чтобы точки легче считались
В программе точка не считается, координаты взяты с модели..
Дополнительный изгиб построен на одном из изгибов.

Если край сгиба косо обрезать, то по заданной точке, тоже может согнуть с изменением направления. 


В ручном режиме можно сгибать по линиям на эскизе,  программой это сложнее.



HellFox

так и не могу разобраться, попробовал записать макрос в Компас-МАКРО и на его основе переложить это в делфи. с учётом того, что листовое тело создано, получил следующее
   .......
   part := ksPart( Document3D.GetPart(pTop_Part) );
   entityCollection := ksEntityCollection( part.EntityCollection( o3d_edge ) );
   entityCollection.SelectByPoint(300,0,0);
   count:=entityCollection.GetCount;
   showmessage(inttostr(count));
   edge:=ksEntity(entityCollection.Last);
   pEdge:=Kompas.TransferInterface(Edge, 2, o3d_edge) as ImodelObject;
   //создаём сгиб
   pSheetMetalBends:=pSheetMetalContainer.SheetMetalBends;
   pSheetMetalBend:=pSheetMetalBends.Add;
   // устанавливаем параметры сгиба
   .....
   pSheetMetalBend.Update;

но ничего не происходит. знатоки Делфи, помогите, всю голову уже сломал.


HellFox

после  исключения 2 ребра до исключения 19

HellFox

кстати вопрос, почему у прямоугольного листового тела 19 рёбер ?

Посмотрите, как пользоваться функцией TransferInterface http://forum.ascon.ru/index.php/topic,25251.msg183201.html#msg183201
По поводу рёбер - оно должно быть одно - всегда, как его найти - Ваши проблемы, только Вы знаете его характеристики.

HellFox

ещё один вопрос, синтаксис для EXE и для DLL одинаков? просто я пробую писать EXE

Это для DLL, EXE - вносит ограничения в используемые модули.

HellFox

сгиб удалось получить следующим способом
part := ksPart( Document3D.GetPart(pTop_Part) );
   entityCollection := ksEntityCollection( part.EntityCollection( o3d_edge ) );
   entityCollection.SelectByPoint(300,0,0);
   count:=entityCollection.GetCount;
   showmessage(inttostr(count));
   edge:=ksEntity(entityCollection.first);
   pEdge:=Kompas.TransferInterface(Edge, 2, o3d_edge) as ImodelObject;
   //создаём сгиб
   pSheetMetalBends:=pSheetMetalContainer.SheetMetalBends;
   pSheetMetalBend:=pSheetMetalBends.Add;
   // устанавливаем параметры сгиба
   .....
   pSheetMetalBend.Update;
остался вопрос, почему после удаления из коллекции рёбер, не содержащих заданную точку, в ней остаётся 2 элемента. деталь представляет собой прямоугольное листовое тело. Самое интересное, что до удаления элементов из коллекции их там 19 штук

Потому, что нужно думать, а не перебирать, Вы получили перебором.
Я люблю, конкретику, т.е. нахожу объект в пространстве, если объекты не одинаковы, то их можно отличить.