Создать ассоциативный вид на текущее исполнение 3d детали, а не на главное.

Автор Крайслер78, 29.08.16, 15:21:29

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

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

Крайслер78

Здравствуйте.
Суть проблемы в том, что есть 3d модель детали, а у нее несколько исполнений. Необходимо получить чертежи для каждого исполнения. Но в API  я не нашел где при создании ассоциативных видов указать исполнение. 
Подскажите, как программно создать ассоциативный вид на текущее исполнение 3d детали, а не на главное.


Крайслер78

Так мы получим текущее исполнение, для 3d модели,  но при создании ассоциативного вида будет взято главное исполнение.
Вопрос в том, куда подставить текущее исполнение , чтобы получить для него ассоциативный вид?


Крайслер78

По идее должна была бы создавать из текущего исполнения, но компас 15.2  почему-то создает из главного.  (Причем при работе в самом Компасе, при помощи визуальных закладок , подставляется текущее представление, а вот через API –главное)
Что с этим делать?

Вот какой у меня код:

        private void EditModel2(string Patch_)
        {
            //используем API  - 7-ой версии
            Kompas6API7._Application My7Komp = (_Application)kompas.ksGetApplication7();
            IKompasDocument pDocument = (KompasDocument)(My7Komp.Documents).Add(DocumentTypeEnum.ksDocumentDrawing, true);
            IKompasDocument2D pKompasDocument2D = (IKompasDocument2D)pDocument;
            IViewsAndLayersManager pViewsAndLayersManager = pKompasDocument2D.ViewsAndLayersManager;
            IViews pViews = pViewsAndLayersManager.Views;
            IView pView = pViews.Add(LtViewType.vt_Arbitrary);
            if (pView != null)
            {
                IAssociationView assView = (IAssociationView)pView;
                if (assView != null)
                {
                    assView.SourceFileName = Patch_;
                    assView.Angle = 0;
                    assView.X = 0;
                    assView.Y = 0;
                    assView.BendLinesVisible = false;
                    assView.BreakLinesVisible = false;
                    assView.HiddenLinesVisible = false;
                    assView.VisibleLinesStyle = (int)ksCurveStyleEnum.ksCSNormal;
                    assView.Scale = 1;
                    assView.Name = "User view";
                    assView.ProjectionName = "#Сверху";
                    assView.Update();
                    pView.Update();
                }
                ((IKompasDocument2D1)pKompasDocument2D).RebuildDocument();
            }
        }

Вам виднее, что с этим делать, код у Вас.
PS. Хотя может быть и косяком Компаса, проверять специально у меня желания нет.

Как вариант, загрузите источник, установите исполнение, от исполнения возьмите компонент IEmbodiment.Part и имя IPart7.FileName, хотя может не подействовать, а загрузка и установка исполнения перед созданием вида может сработать.

Крайслер78

Не помогло.
А можно ли с помощью API сохранить отдельное исполнение в отдельный файл?

333

У IAssociationView есть дополнительный интерфейс IEmbodymentManager
Через него можно любое исполнение задать
Нужное исполнение нужно сделать текущим
+ Благодарностей: 3

Да действительно работает, плохо, что в справке это написано в интерфейсе IEmbodimentsManager, а в видах ничего не написано.

ТрындецЪ

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

Как уже говорилось тут выше, при создании произвольного ассоциативного вида командой
iDocument2D.ksCreateSheetArbitraryView(ksAssociationViewParam, 0)
создаётся вид основного исполнения, т.к.  у объекта ksAssociationViewParam просто нет свойства номер исполнения (или что-то подобное, что явно бы указывало на нужное исполнение модели). И только потом, получив от созданного вида интерфейс IAssociationView, а от него IEmbodimentsManager, можно установить нужное исполнение через SetCurrentEmbodiment.

Но! Есть ситуация, когда этого костыля недостаточно. Поясняю.
Есть листовое тело с исполнениями. У основного исполнения НЕ НАСТРОЕНА развертка. Нужно получить чертёж исполнения -01, где развертка настроена.
Когда мы создаём чертёж с основного исполнения в настройках просто отсутствует чекбокс "Развертка", куда можно ставить галку и деталь в виде развернется. Казалось бы логично: не настроена развертка-нет и чекбокса. Но! Если мы в этом виде меняем исполнение на -01, то чекбокс так и не появляется, т.е. развертку мы получить не можем.
Понятно, что это всё пахнет недопилом со стороны АСКОНа, но нужно решение не в перспективе, а здесь и сейчас, как говорится.

Отсюда вопрос: может быть я не в курсе и всё таки есть возможность создавать сразу ассоциативный вид от нужного исполнения???
Пока решение видится только в проверке настроена ли развертка в основном исполнении и принудительной ее настройке если нет.

lavgirb

Как вариант "чего-бы-еще-попробовать".
А исполнения зависимые-не зависимые?
С этим не может быть связано?

ТрындецЪ

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

KrissKross

а если попробовать
установить в 3Д модели - нужное исполнение
и затем в чертеже создавать виды

проверил в ручную
- при активации исполнения в 3Д модели и при последующей команде - Создать Чертеж по модели
в настройках вида - предлагается 3Д модель с текущим исполнением

и таким образом можно создать вид во временном чертеже
а потом скопировать вид в нужный чертеж
+ Благодарностей: 1

ТрындецЪ

Цитата: KrissKross от 21.06.23, 21:15:31а если попробовать
установить в 3Д модели - нужное исполнение
и затем в чертеже создавать виды

проверил в ручную
- при активации исполнения в 3Д модели и при последующей команде - Создать Чертеж по модели
в настройках вида - предлагается 3Д модель с текущим исполнением

и таким образом можно создать вид во временном чертеже
а потом скопировать вид в нужный чертеж
Спасибо за совет, попробую.

lavgirb

Цитата: KrissKross от 21.06.23, 21:15:31а потом скопировать вид в нужный чертеж
При копировании вида открываю чертеж с видом, выделяю вид, копирую в буфер обмена, активирую целевой чертеж, вставляю вид в целевой чертеж, закрываю чертеж с исходным видом.
А можно ли скопировать вид так, чтобы исходный вид, который надо скопировать, не показывать в окне КОМПАС?

lavgirb

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

исп.jpg

lavgirb

Подумал, если напрямую нельзя, попробую узнать обозначение исполнения через таблицу исполнений.

FR347

так вроде же в виде пишут исполнение... И на скрине есть. открыл модель, сразу переключил на исполнение.
Редко бывает такое, но по хорошему сделали бы сразу, вч чертеже такое то исполнение, сразу модель с тем же исп.
Другое дело что бы сразу открыть, как понимаю вид в чертеже  с исполнением, в модели с таким же.
Нет времени увы... Пошукал бы.

lavgirb

Цитата: FR347 от 02.02.24, 11:22:24так вроде же в виде пишут исполнение... И на скрине есть. открыл модель, сразу переключил на исполнение.
Хотелось бы программно определить исполнение, чтоб потом программно открыть и переключить на исполнение соответствующее виду.