Создание ассоциативных видов с моделей

Автор DMortem, 11.05.26, 10:40:09

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

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

DMortem

Добрый день, создал макрос делающий развертки с моделей по всем исполнениям, я выбираю папку и файлы и макрос проходит по всем деталям и делает ассоциативный вид, сохранение идет в чертеж без оформления.
                    for marking, name in embodiments:
                        view_name = (marking + " - " + name).strip(" -")
                        self.logger.info("  Создание чертежа для исполнения: {}".format(view_name))
                        new_doc = None
                        try:
                            new_doc = application.Documents.AddWithDefaultSettings(1, False)
                            if new_doc is None:
                                raise Exception("Не удалось создать чертёж")
                            self.logger.debug("Чертёж создан")

                            # Получаем интерфейс документа 2D по-новому
                            doc2D = kompas_api7.IKompasDocument2D(new_doc)
                            if doc2D is None:
                                raise Exception("Не удалось получить интерфейс чертежа")
                            self.logger.debug("IKompasDocument2D получен")

                            # Получить менеджер видов и слоёв
                            views_and_layers_mgr = doc2D.ViewsAndLayersManager
                            if views_and_layers_mgr is None:
                                raise Exception("Не удалось получить ViewsAndLayersManager")

                            iViews = views_and_layers_mgr.Views
                            iView = iViews.Add(3)
                            iAssociationView = kompas_api7.IAssociationView(iView)
                            iAssociationView.SourceFileName = model_path
                            iAssociationView.BreakLinesVisible = False
                            if unfold:
                                try:
                                    iAssociationView.ProjectionName = "#Развертка"
                                    iAssociationView.Unfold = True
                                    iAssociationView.BendLinesVisible = True
                                except Exception as ex:
                                    logger.warning("Не удалось установить развёртку: {}".format(str(ex)))
                            else:
                                iAssociationView.ProjectionName = self.projection_var.get()
                            iAssociationView.CenterLinesVisible = False
                            try:
                                iAssociationViewElements = kompas_api7.IAssociationViewElements(iAssociationView)
                                iAssociationViewElements.CreateAxis = False
                                iAssociationViewElements.CreateCentresMarkers = False
                                iAssociationViewElements.CreateCircularCentres = False
                                iAssociationViewElements.CreateLinearCentres = False
                                iAssociationViewElements.ProjectSketches = True
                                iAssociationViewElements.ProjectBodies = True

                            except Exception as ex:
                                self.logger.warning("IAssociationViewElements: {}".format(str(ex)))

                            emb_mgr = kompas_api7.IEmbodimentsManager(iAssociationView)
                            emb_mgr.SetCurrentEmbodiment(marking)
                            self.logger.debug("Установлено исполнение: {}".format(marking))

                            # Работа со слоями
                            try:
                                view_layers = iAssociationView.Layers
                                if view_layers:
                                    base_layer = view_layers.Layer(0)
                                    if base_layer:
                                        base_layer.Name = "Уров.1"
                                        base_layer.Update()
                                    layer_two = view_layers.Layer(1)
                                    if layer_two:
                                        layer_two.Name = "Уров.2"
                                        layer_two.Update()
                                    else:
                                        layer_two = view_layers.Add()
                                        if layer_two:
                                            layer_two.Name = "Уров.2"
                                            layer_two.Update()
                                    self.logger.debug("Слои настроены")
                            except Exception as ex:
                                self.logger.warning("Ошибка при настройке слоёв: {}".format(str(ex)))

                            iView.X = 0.0
                            iView.Y = 0.0
                            iView.Scale = 1.0
                            iView.Name = view_name
                            iView.Update()
Вот часть кода создающая непосредственно вид, но я столкнулся с проблемой, после того как вид создается iView.Name принимает имя не то что задано, и iAssociationView.Unfold так же становится False, если дополнительно после Update присвоить значения и еще раз обновить, все будет отлично, только при открытии файла надо обновить чертеж что бы показало развертку. Если сделать RebuildDocument прямо после создания вида, то половину файлов не обработает, возникают ошибки на сервере, с чем связано не понял. Меня больше интересуем, почему при создании параметры не хотят устанавливаться как заданы.

Student2025

#1
Цитата: DMortem от 11.05.26, 10:40:09Если сделать RebuildDocument прямо после создания вида, то половину файлов не обработает,

Именно это и помогало..

Doc2D = api5_.ActiveDocument2D()
Doc2D.ksRebuildDocument()

По подробней что именно не обрабатывает?

Что делает объект IViewDesignation ?

Не могу воспроизвести ошибку (К24St), попробуйте средствами api5.

Student2025

Вижу что визуально стоит старое значение имени после:
iView.Name = 'test'
iView.Update()

Но как только подвожу курсор мыши в окне Компаса - имя сразу же обновляется..

DMortem

IViewDesignation тут мне надо убрать все лишние обозначения, в коде почему то этого нет, убирает значки масштаба развертки.
Итак по скрипту, я выполняю присвоение имени вида и свойство развертка, обновляю вид и после перестроения в консоль вывел себе имя и свойство развертки, они не соответствуют установленным. Применяются только если повторно их присвоить и обновить. Так вот перестроение у меня вызывает ошибку:
WARNING - Ошибка при перестроении: (-2147417851, 'Ошибка на сервере.', None, None)
Причины не понимаю, я специально даже в начале выполнения скрипта поставил application.HideMessage = 1 что бы автоматически любые сообщения обработать, так как я заметил что если делать развертки с видов, то там идет целая куча сообщений о сохранении и перестроении.

Student2025

Тогда как варианты:

api5_.ksRefreshActiveWindow()
api5_.ksExecuteKompasCommand(const_2d_.ksCMRefresh, True)

Цитата: DMortem от 11.05.26, 14:16:21IViewDesignation тут мне надо убрать все лишние обозначения, в коде почему то этого нет, убирает значки масштаба развертки.
Доступ к имени можно получить несколькими путями.

Цитата: DMortem от 11.05.26, 14:16:21WARNING - Ошибка при перестроении: (-2147417851, 'Ошибка на сервере.', None, None)
Не могу воспроизвести эту ошибку.

DMortem

Скрипт и файл на котором у меня вылетает ошибка. Ну и еще я заметил что если я этим скриптом прогоню файлы, то не все перестраиваются.