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

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

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

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

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

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

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

Создание ограничения "Выравнивание"

Автор Lemieux, 09.12.24, 10:36:42

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

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

Lemieux

Всех приветствую.
Как создать ограничение "Выравнивание" по ребру модели в эскизе модели?

Lemieux

Всё понятно. API КОМПАС настолько корявый и непонятный, что никто за это не брался.

Михаил88

Цитата: Lemieux от 09.12.24, 15:38:32Всё понятно. API КОМПАС настолько корявый и непонятный, что никто за это не брался.

Типа так?



UU

Цитата: Lemieux от 09.12.24, 10:36:42Всех приветствую.
Как создать ограничение "Выравнивание" по ребру модели в эскизе модели?
Вы ничего не попутали?

feron

Цитата: Lemieux от 09.12.24, 10:36:42Как создать ограничение "Выравнивание" по ребру модели в эскизе модели?
Приведите свой пример кода.

Lemieux


Lemieux

Цитата: feron от 09.12.24, 17:22:44Приведите свой пример кода.
            KompasObject application5 = Marshal.GetActiveObject("KOMPAS.Application.5") as KompasObject;
            IApplication application = Marshal.GetActiveObject("KOMPAS.Application.7") as IApplication;
            ksDocument3D document3D = application5.ActiveDocument3D();

            ksEntity faceEntity = (ksEntity)document3D.UserSelectEntity(null, null, "Укажите грань эскиза", 0, null);
            IFace face = application5.TransferInterface(faceEntity, (int)ksAPITypeEnum.ksAPI7Dual, 0) as IFace;
            ksEntity horizontalEdgeEntity = (ksEntity)document3D.UserSelectEntity(null, null, "Укажите горизонтальное ребро", 0, null);
            IEdge horizontalEdge = application5.TransferInterface(horizontalEdgeEntity, (int)ksAPITypeEnum.ksAPI7Dual, 0) as IEdge;
            ksEntity verticalEdgeEntity = (ksEntity)document3D.UserSelectEntity(null, null, "Укажите горизонтальное ребро", 0, null);
            IEdge verticalEdge = application5.TransferInterface(verticalEdgeEntity, (int)ksAPITypeEnum.ksAPI7Dual, 0) as IEdge;

            IKompasDocument3D activeDocument = application.ActiveDocument as IKompasDocument3D;
            IPart7 topPart = activeDocument.TopPart;
            IModelContainer modelContainer = topPart as IModelContainer;
            activeDocument.CreateObjectsInCurrentLocalCS = true;
            ISketch sketch = modelContainer.Sketchs.Add();
            sketch.Plane = face;
            IFragmentDocument fragmentDocument = sketch.BeginEdit();
            try
            {
                IView view = fragmentDocument.ViewsAndLayersManager.Views.ActiveView;
                IDrawingContainer drawingContainer = view as IDrawingContainer;
                ICircle circle = drawingContainer.Circles.Add();
                circle.Radius = 1;
                circle.Xc = 0;
                circle.Yc = 0;
                circle.Update();
                IDrawingObject1 drawingObject1 = circle as IDrawingObject1;

                IParametriticConstraint assciationConstraint1 = drawingObject1.NewConstraint();
                assciationConstraint1.ConstraintType = ksConstraintTypeEnum.ksCAssociation;
                assciationConstraint1.Partner = horizontalEdge;
                bool b = assciationConstraint1.Create();

                IParametriticConstraint horizontalConstraint = drawingObject1.NewConstraint();
                horizontalConstraint.ConstraintType = ksConstraintTypeEnum.ksCVAlignPoints;
                horizontalConstraint.Partner = horizontalEdge;
                horizontalConstraint.PartnerIndex = 1;
                bool hcCreated = horizontalConstraint.Create();

                IParametriticConstraint verticalConstraint = drawingObject1.NewConstraint();
                verticalConstraint.ConstraintType = ksConstraintTypeEnum.ksCHAlignPoints;
                verticalConstraint.Partner = verticalEdge;
                verticalConstraint.PartnerIndex = 1;
                bool vcCreated = verticalConstraint.Create();
            }
            finally
            {
                sketch.EndEdit();
                sketch.Update();
                activeDocument.CreateObjectsInCurrentLocalCS = false;
            }

Lemieux

Цитата: Михаил88 от 09.12.24, 15:47:19Типа так?



Ну да. Я когда ревёрсил наложенные ограничения из КОМПАС, то не мог понять откуда берётся ILineSegment в Partner. Я какие варианты только не пробовал.

UU

Цитата: Lemieux от 09.12.24, 17:49:50Нет
Screenshot 2024-12-09 174741.png
Что, относительно, чего выравниваем?
Точку- центра окружности?
Файл модели.

feron

Какая то непонятка в коде, по сути вопроса Вам надо -

CONSTRAINT_HOR_ALIGN_POINTS  9  - выравнивание двух точек по горизонтали
CONSTRAINT_VER_ALIGN_POINTS  10  - выравнивание двух точек по вертикали


ksCVAlignPoints
ksCHAlignPoints

Цитата: UU от 09.12.24, 18:15:56Что, относительно, чего выравниваем?
центр окружности относительно центра ребер соответственно по горизонтали и вертикали.

в блоке Try - прочтите ошибку по ней будет понятней.

Проверить не могу так как не настроил мост в системе тк работаю через кубическую систему.

UU

Цитата: feron от 09.12.24, 18:16:27центр окружности относительно центра ребер соответственно по горизонтали и вертикали.
Точку?
Вы уверены?

feron

Цитата: UU от 09.12.24, 18:19:46Точку?
Вы уверены?

Он передает окружность и грань а как Компас поймет что выравнивать центр окружности не понятно.

UU

Цитата: feron от 09.12.24, 18:25:24Он передает окружность и грань а как Компас поймет что выравнивать центр окружности не понятно.
Это - расстояние, по чём выравнивать, чему точка должна быть параллельна?

feron

Цитата: UU от 09.12.24, 18:29:46Это - расстояние, по чём выравнивать, чему точка должна быть параллельна?
Ему надо выравнивание точек центра ребра и созданной окружности по вертикали или горизонтали

Lemieux поговаривают люди тут что Ваш код - Филькина грамота  :um: 1 степени!

Lemieux

Цитата: feron от 09.12.24, 18:33:19Lemieux поговаривают люди тут что Ваш код - Филькина грамота  :um: 1 степени!
Просто никто не знает как это сделать с помощью API. И не разберёшься в кривой документации КОМПАС.

UU

Цитата: Lemieux от 09.12.24, 18:53:32Просто никто не знает как это сделать с помощью API. И не разберёшься в кривой документации КОМПАС.
Сделайте, как юзер и киньте нам.

Михаил88

Цитата: Lemieux от 09.12.24, 18:53:32Просто никто не знает как это сделать с помощью API. И не разберёшься в кривой документации КОМПАС.

Почему не знает? Можно сделать через проекцию.
Я недавно писал программу там делал подобную вещь.

Lemieux

Цитата: Михаил88 от 09.12.24, 19:09:23Почему не знает? Можно сделать через проекцию.
Я недавно писал программу там делал подобную вещь.
Как Вы накладывали ограничения?

Lemieux

Цитата: UU от 09.12.24, 19:05:27Сделайте, как юзер и киньте нам.
Что сделать и что кинуть?

feron

Там нужно получить точки от графических объектов.

Цитата: Михаил88 от 09.12.24, 19:09:23Можно сделать через проекцию.
коней на переправе не меняют.

Цитата: UU от 09.12.24, 19:05:27Сделайте, как юзер
какой лузер ? лунки? чего сажать собрались?