Развертка 3D модели с помощью C#

Автор Semargl1990, 28.07.21, 17:40:03

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

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

Semargl1990

Добрый день!
Создал листовой модель лотка.

kompas = new Kompas6API5.Application();
            kompas.Visible = true;

            //Создание эскиза
            var Doc3D = (ksDocument3D)kompas.Document3D();
            Doc3D.Create (false, true);
            part iPart = (part)Doc3D.GetPart(-1);   //Верхний компонент
                                                       
            entity iplaneXOY = (entity)iPart.GetDefaultEntity(1);  // 1-интерфейс на плоскость XOY
            entity ientity = (entity)iPart.NewEntity(5);
         
            SketchDefinition iSketch = (SketchDefinition)ientity.GetDefinition();
           
            iSketch.SetPlane(iplaneXOY);

            ientity.Create();

            Document2D isketchDoc = iSketch.BeginEdit();

            isketchDoc.ksLineSeg(0, 0, H, 0, 1);

            isketchDoc.ksLineSeg(0, 0, 0, B, 1);

            isketchDoc.ksLineSeg(0, B, H, B, 1);

            iSketch.EndEdit();

            //листовое выдавливание эскиза
            IApplication kompas7 = (IApplication)kompas.ksGetApplication7();

             IKompasDocument3D kompasDoc7 = (IKompasDocument3D) kompas7.ActiveDocument;

            ISheetMetalContainer doc3D = (ISheetMetalContainer) kompasDoc7.TopPart;

            SheetMetalBodies sheetbodies = doc3D.SheetMetalBodies;

            ksEntityCollection iCollection = iPart.EntityCollection(7);
            iCollection.SelectByPoint(0, 1, 0);
            ksEntity tochka1 = iCollection.Last();
            dynamic edgepar = tochka1.GetDefinition();
            ksEntity isheetsketch = edgepar.GetOwnerEntity;
            Sketch isketch7 = kompas.TransferInterface(isheetsketch, 2, 0);

            SheetMetalBody sheetbody = sheetbodies.Add();
                     
            sheetbody.Sketch = isketch7;
            sheetbody.ThicknessDirection = true;
            sheetbody.Thickness = S;
            sheetbody.UnfoldType = 0;
            sheetbody.Straighten = true;

            sheetbody.BendCoefficient = 0.4;
            sheetbody.Depth[true] = L;
            sheetbody.Depth[false] = 0;
            sheetbody.Direction = 0;
            sheetbody.ExtrusionType[true] = 0;
            sheetbody.ExtrusionType[false] = 0;
            sheetbody.Radius = R;

            ksEntity obj;

            obj = kompas.TransferInterface(sheetbody, 1, 105);
            obj.name = "Листовое тело:1";
            ksColorParam colorpar = obj.ColorParam();
            colorpar.ambient = 0.5;
            colorpar.color = 9474192;
            colorpar.diffuse = 0.6;
            colorpar.emission = 0.5;
            colorpar.shininess = 0.8;
            colorpar.specularity = 0.8;
            colorpar.transparency = 1;
            obj.Create();

 
Как можно развернуть 3D модель программно?:
korob razv.PNG
korob razv1.PNG
Вроде методы:
sheetbody.UnfoldType = 0;
sheetbody.Straighten = true;
должны отвечать за это, но развертка не появляется.
Или есть другой путь получения листовой детали с разверткой?

Slaviation

Добрый день.
Вариант с операцией "Разогнуть" (во вложении) не подойдет?

Slaviation

Сделал вариант с операцией "Развернуть"

Semargl1990

Slaviation Скажите это на какой Компас? Предполагаю это Компас 18 или выше? Т.к. у меня в справочнике API Компас 17 нет интерфейса SheetMetalBendUnfoldParameters. Мне бы решение на Компас 17, по все равно спасибо за Ваш ответ.

Интерфейс, есть только с v18 и то кривой.

Semargl1990

Насчет кривости и отсутсвия интерфейса не удивлен, как тогда сделать так, чтобы дать возможность  пользователью выбрать оперцию "развернуть" и указать грань и после того, как он нажал на галочку, дальше продолжать обработку кода?

IApplication.ExecuteKompasCommand - Выполнить команду системы КОМПАС.
prShMtBendParamUnfold - 20093 - Настроить параметры развер­тки листового тела.
https://forum.ascon.ru/index.php/topic,25253.msg184401.html#msg184401

Semargl1990

Что-то не получается, после строки
kompas7.ExecuteKompasCommand(20093,false) вижу что компас "нажимает" на кнопку "развернуть" и быстро, не предоставляя пользователю выбрать грань, дальше обрабатывает код.
В чем может быть загвоздка?

KrissKross

Предложение

Попробовать взять API файлы (dll) из 18 Версии Компаса
скомпилировать Ваше приложение
и попробовать работать с 17 версией

Semargl1990

Как API файлы (dll) из 18 версии подрубить к VisualStudio 2017, чтобы интерфейс SheetMetalBendUnfoldParameters заработал в 17 версии Компас?
Поделитесь с dll из 18 версии, пожалуйста.
Помогите со строкой kompas7.ExecuteKompasCommand(20093,false), Компас не "останавливается", чтобы указать грань операции "развернуть", а отрабатывает код дальше, может есть еще какие функции?

Semargl1990

Алоха товарищи! Подскажите, допустим открыты два окна, активным является первое окно, как сделать так, чтобы активным стал второе окно вместо первого?


Semargl1990

После кода:
//Передать операцию развернуть
            if(kompas7.IsKompasCommandCheck(20093) == 0)

                {

                kompas7.ExecuteKompasCommand(20093, false);

                }
Компас не дает выбрать грань для операции развернуть. Может надо еще какие-то процедуры написать, чтобы компас передал пользователю выбрать грань? Или надо программно указать этот грань? Подскажите в чем может быть проблема?   

Semargl1990

Как передать управление с библиотеки обратно компасу, а потом обратно к библиотеке?

Semargl1990

Удалось через метод SystemControlStart.