Выносной элемент

Автор Vashnaemnik, 05.06.25, 13:25:06

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

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

Vashnaemnik

Уважаемые форумчане, добрый день.
Пытаюсь сделать на чертеже выносной элемент. Но он мне категорически не хочет ставить буквенное обозначение выносного вида.
import pythoncom
from win32com.client import Dispatch, gencache, VARIANT

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Получи API интерфейсов версии 5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))

#  Получи API интерфейсов версии 7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application

#  Получи интерфейс активного документа
kompas_document = application.ActiveDocument

#  Создай графический объект "Выносной элемент"
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.ActiveView
symbols_2d_container = kompas_api7_module.ISymbols2DContainer(view)
remote_elements = symbols_2d_container.RemoteElements
remote_element = remote_elements.Add()
remote_element.Xc = 71.6102345
remote_element.Yc = 186.6581863
remote_element.Radius = 13.0
remote_element.Height = 10.0
remote_element.Width = 10.0
remote_element.ShelfDirection = 1
remote_element.ShelfX = 92.6333747
remote_element.ShelfY = 218.3652174
remote_element.Form = 0
remote_element.FilletRadius = 0.0
remote_element.AutoSorted = True
remote_element.AutoSheet = False
remote_element.AutoZone = False
remote_element.Update()

#  Создай графический объект "Вид"
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.Add(kompas6_constants.vt_Remote)
view.Number = 1
view.Name = "Выносной элемент А"
view.Background = False
view.Visible = True
view.Current = True
view.Color = 0
view.Comment = ""
view.X = -146.2470167
view.Y = -625.8011127
view.Scale = 4.0
view.Angle = 0.0
view_designation = kompas_api7_module.IViewDesignation(view)
view_designation.ShowName = True
view_designation.ShowUnfold = False
view_designation.ShowScale = True
view_designation.ShowTurn = False
view_designation.ShowAngle = False
view_designation.ShowPage = False
view_designation.ShowZone = False
association_view = kompas_api7_module.IAssociationView(view)
association_view.BaseObject = remote_element
view.Update()
Подскажите, авто сортировка включена, ShowName тоже включен. Но не хочет ставить обозначение и все.

lavgirb

Как вариант я бы просто попробовал

remote_element.AutoSorted = True
remote_element.Update()

После

association_view.BaseObject = remote_element
Может повезет.


Vashnaemnik

Цитата: lavgirb от 05.06.25, 14:45:27Как вариант я бы просто попробовал

remote_element.AutoSorted = True
remote_element.Update()

После

association_view.BaseObject = remote_element
Может повезет.


:) не повезло

Vashnaemnik

Добрый день.
Весь чертеж сделал. Осталось только что бы на выносном виде появилась буква.  >:(
Ничего не получается.
Даже Михаил 88 похоже в этот раз не выступит моим спасителем  :angel:
В интернете толь ко один пример. Видео, там ставится нужная буква. Но запуская тот код ,у меня ставится значок развертки, а не буква.
Мозг кипит  :%:
import pythoncom
from win32com.client import Dispatch, gencache

# Подключим константы API Компас
const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
const_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

# Подключим описание интерфейсов API5
KAPI = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = KAPI.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(KAPI.KompasObject.CLSID, pythoncom.IID_IDispatch))

# Подключим описание интерфейсов API7
KAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
iApplication = KAPI7.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(KAPI7.IApplication.CLSID, pythoncom.IID_IDispatch))
module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)

#Базовый класс документов КОМПАС
iKompasDocument = iApplication.ActiveDocument
#Базовый класс графических документов КОМПАС
iKompasDocument2D = KAPI7.IKompasDocument2D(iKompasDocument)
#Интерфейс активного документа через API5
iDocument2D = iKompasObject.ActiveDocument2D()
#Возвращает менеджер видов и слоев документа
iViewsAndLayersManager = iKompasDocument2D.ViewsAndLayersManager
#Возвращает коллекцию видов
iViews = iViewsAndLayersManager.Views
#Активный вид
iView = iViews.ActiveView

#Интерфейс контейнера условных обозначений
iSymbols2DContainer = KAPI7.ISymbols2DContainer(iView)
#Интерфейс коллекции выносных элементов на чертеже
iRemoteElements = iSymbols2DContainer.RemoteElements
#Найдём габаритный прямоугольник вида через API5
iRectParam = KAPI.ksRectParam(iKompasObject.GetParamStruct(const.ko_RectParam))
iDocument2D.ksGetObjGabaritRect (iView.Reference, iRectParam)
#Нижняя левая точка
iMathPointParam = iRectParam.GetpBot()
x1 = iMathPointParam.x
y1 = iMathPointParam.y
#Верхняя правая точка
iMathPointParam = iRectParam.GetpTop()
x2 = iMathPointParam.x
y2 = iMathPointParam.y
#Добавим выносной элемент
iRemoteElement = iRemoteElements.Add()
#Зададим центр выносного элемента (в данном случае - верхний край вида)
iRemoteElement.Xc = (x2 - iView.X)/iView.Scale
iRemoteElement.Yc = (y2 - iView.Y)/iView.Scale
#Радиус выносного элемента
iRemoteElement.Radius = 15
#Координаты полки линии выноски
iRemoteElement.ShelfX = iRemoteElement.Xc + iRemoteElement.Radius + 20
iRemoteElement.ShelfY = iRemoteElement.Yc + iRemoteElement.Radius + 20
#Обновим параметры выносного элемента
iRemoteElement.Update()
#Создадим выносной вид
iView_remote = iViews.Add(const.vt_Remote)
#Дополнительный интерфейс для вида
iView1 = KAPI7.IView1(iView_remote)
#Опорный объект для вида - выносной элемент
iView1.BaseObject = iRemoteElement
#Координаты выносного вида
iView_remote.X = iView.X + 50
iView_remote.Y = iView.Y - 50
#Обновим параметры выносного вида
iView_remote.Update()
Может все таки есть решение, ведь наверняка есть.

Vashnaemnik

Цитата: Vashnaemnik от 19.06.25, 14:37:44Добрый день.
Весь чертеж сделал. Осталось только что бы на выносном виде появилась буква.  >:(
Ничего не получается.
Даже Михаил 88 похоже в этот раз не выступит моим спасителем  :angel:
В интернете толь ко один пример. Видео, там ставится нужная буква. Но запуская тот код ,у меня ставится значок развертки, а не буква.
Мозг кипит  :%:
import pythoncom
from win32com.client import Dispatch, gencache

# Подключим константы API Компас
const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
const_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

# Подключим описание интерфейсов API5
KAPI = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = KAPI.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(KAPI.KompasObject.CLSID, pythoncom.IID_IDispatch))

# Подключим описание интерфейсов API7
KAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
iApplication = KAPI7.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(KAPI7.IApplication.CLSID, pythoncom.IID_IDispatch))
module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)

#Базовый класс документов КОМПАС
iKompasDocument = iApplication.ActiveDocument
#Базовый класс графических документов КОМПАС
iKompasDocument2D = KAPI7.IKompasDocument2D(iKompasDocument)
#Интерфейс активного документа через API5
iDocument2D = iKompasObject.ActiveDocument2D()
#Возвращает менеджер видов и слоев документа
iViewsAndLayersManager = iKompasDocument2D.ViewsAndLayersManager
#Возвращает коллекцию видов
iViews = iViewsAndLayersManager.Views
#Активный вид
iView = iViews.ActiveView

#Интерфейс контейнера условных обозначений
iSymbols2DContainer = KAPI7.ISymbols2DContainer(iView)
#Интерфейс коллекции выносных элементов на чертеже
iRemoteElements = iSymbols2DContainer.RemoteElements
#Найдём габаритный прямоугольник вида через API5
iRectParam = KAPI.ksRectParam(iKompasObject.GetParamStruct(const.ko_RectParam))
iDocument2D.ksGetObjGabaritRect (iView.Reference, iRectParam)
#Нижняя левая точка
iMathPointParam = iRectParam.GetpBot()
x1 = iMathPointParam.x
y1 = iMathPointParam.y
#Верхняя правая точка
iMathPointParam = iRectParam.GetpTop()
x2 = iMathPointParam.x
y2 = iMathPointParam.y
#Добавим выносной элемент
iRemoteElement = iRemoteElements.Add()
#Зададим центр выносного элемента (в данном случае - верхний край вида)
iRemoteElement.Xc = (x2 - iView.X)/iView.Scale
iRemoteElement.Yc = (y2 - iView.Y)/iView.Scale
#Радиус выносного элемента
iRemoteElement.Radius = 15
#Координаты полки линии выноски
iRemoteElement.ShelfX = iRemoteElement.Xc + iRemoteElement.Radius + 20
iRemoteElement.ShelfY = iRemoteElement.Yc + iRemoteElement.Radius + 20
#Обновим параметры выносного элемента
iRemoteElement.Update()
#Создадим выносной вид
iView_remote = iViews.Add(const.vt_Remote)
#Дополнительный интерфейс для вида
iView1 = KAPI7.IView1(iView_remote)
#Опорный объект для вида - выносной элемент
iView1.BaseObject = iRemoteElement
#Координаты выносного вида
iView_remote.X = iView.X + 50
iView_remote.Y = iView.Y - 50
#Обновим параметры выносного вида
iView_remote.Update()
Может все таки есть решение, ведь наверняка есть.
Забыл дописать.
Создайте чертеж и сделайте любой прямоугольник.

p3452

Макрорекордер Компаса нормально пишет обе операции...

Vashnaemnik

Цитата: p3452 от 19.06.25, 19:25:31Макрорекордер Компаса нормально пишет обе операции...
Добрый день.
Тогда у меня вопрос, в какой версии компаса вы это делали?
Я в 22 и в 21.
Если я что то не знаю, то я сначала записываю макрос с помощью компаса на API5
После у меня есть PyKompasMacro, записываю свои действия на API7
Но после запуска его повторно, он не ставит мне букву  :bebebe: а только масштаб
По коду ShowName включен.
Можете прислать как у вас Макрорекордер записывает?

Kaimen

Для Компас 18.1.55 обходной вариантimport pythoncom
from win32com.client import Dispatch, gencache, VARIANT

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Получи API интерфейсов версии 5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))

#  Получи API интерфейсов версии 7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application

#  Получи интерфейс активного документа
kompas_document = application.ActiveDocument

#  Создай графический объект "Выносной элемент"
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.ActiveView
symbols_2d_container = kompas_api7_module.ISymbols2DContainer(view)
remote_elements = symbols_2d_container.RemoteElements
remote_element = remote_elements.Add()
remote_element.Xc = 71.6102345
remote_element.Yc = 186.6581863
remote_element.Radius = 13.0
remote_element.Height = 10.0
remote_element.Width = 10.0
remote_element.ShelfDirection = 1
remote_element.ShelfX = 92.6333747
remote_element.ShelfY = 218.3652174
remote_element.Form = 0
remote_element.FilletRadius = 0.0
remote_element.AutoSorted = True
remote_element.AutoSheet = False
remote_element.AutoZone = False
remote_element.Update()

view_remote = views.Add(kompas6_constants.vt_Remote)
view_remote.Number = 1
view_remote.Name = "Выносной элемент А"
view_remote.Background = False
view_remote.Visible = True
view_remote.Current = True
view_remote.Color = 0
view_remote.Comment = ""
view_remote.X = -146.2470167
view_remote.Y = -625.8011127
view_remote.Scale = 4.0
view_remote.Angle = 0.0

association_view = kompas_api7_module.IAssociationView(view_remote)
association_view.BaseObject = remote_element
view_remote.Update()
# Очистим обозначение вида
view_designation = kompas_api7_module.IViewDesignation(view_remote)
drawing_text = kompas_api7_module.IDrawingText(view_designation.DrawingText)
text = kompas_api7_module.IText(drawing_text)
text_line = text.TextLine(0)
text_line.Clear()
# Сформируем свое обозначение вида
# Обозначение
text_item = text_line.Add()
text_item.ItemType = kompas6_constants.ksTItHyperText
hypertext_reference_param = kompas_api7_module.IHypertextReferenceParam(text_item)
hypertext_reference_param.LinkObject = kompas_api7_module.IKompasAPIObject(remote_element)
hypertext_reference_param.HypertextType = kompas6_constants.ksHTObjectText
text_item.Update()
# Масштаб
text_item = text_line.Add()
text_item.ItemType = kompas6_constants.ksTItHyperText
hypertext_reference_param = kompas_api7_module.IHypertextReferenceParam(text_item)
hypertext_reference_param.LinkObject = kompas_api7_module.IKompasAPIObject(view_remote)
hypertext_reference_param.HypertextType = kompas6_constants.ksHTViewScale
hypertext_reference_param.Brackets = True
text_item.Update()

drawing_text.Update()

text.Style = kompas6_constants.ksTSDirectionArrow
drawing_text.Update()
+ Благодарностей: 1

p3452

Вот этот код был вчера ззаписан и ОДИН раз сработал (!?), дальше и смотреть не стал...
import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application


Documents = application.Documents
#  Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iDocument2D = kompas_object.ActiveDocument2D()

iRemoteElementParam = kompas6_api5_module.ksRemoteElementParam(kompas_object.GetParamStruct(kompas6_constants.ko_RemoteElementParam))
iRemoteElementParam.Init(65535)
iRemoteElementParam.height = 31
iRemoteElementParam.radius = 10
iRemoteElementParam.shelfDir = 1
iRemoteElementParam.shelfX = 110.539707800713
iRemoteElementParam.shelfY = 393.308165945052
iRemoteElementParam.signType = 2
iRemoteElementParam.smooth = 0
iRemoteElementParam.style = 65535
iRemoteElementParam.width = 33
iRemoteElementParam.x = 80.391239183868
iRemoteElementParam.y = 358.297041099684
iTextLineArray = kompas6_api5_module.ksDynamicArray(iRemoteElementParam.GetpText())

iTextLineParam = kompas6_api5_module.ksTextLineParam(kompas_object.GetParamStruct(kompas6_constants.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 12
iTextItemArray = kompas_object.GetDynamicArray(LDefin2D.TEXT_ITEM_ARR)
iTextItemParam = kompas6_api5_module.ksTextItemParam(kompas_object.GetParamStruct(kompas6_constants.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = "А"
iTextItemParam.type = 0
iTextItemFont = kompas6_api5_module.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFont.Init()
iTextItemFont.bitVector = 4096
iTextItemFont.color = 0
iTextItemFont.fontName = "GOST type B"
iTextItemFont.height = 7
iTextItemFont.ksu = 1
iTextItemArray.ksAddArrayItem(-1, iTextItemParam)
iTextLineParam.SetTextItemArr(iTextItemArray)

iTextLineArray.ksAddArrayItem(-1, iTextLineParam)
iRemoteElementParam.SetpText(iTextLineArray)
iRemoteElement = iDocument2D.ksRemoteElement(iRemoteElementParam)
refObject = iRemoteElement
iViewParam = kompas6_api5_module.ksViewParam(kompas_object.GetParamStruct(kompas6_constants.ko_ViewParam))
iViewParam.Init()
iViewParam.angle = 0
iViewParam.color = 0
iViewParam.name = "Выносной элемент 2"
iViewParam.scale_ = 1
iViewParam.state = 3
iViewParam.x = 209.094217826505
iViewParam.y = 0
iDocument2D.ksCreateSheetView(iViewParam, 0)
iViewsAndLayersManager = kompas_document_2d.ViewsAndLayersManager
iViews = iViewsAndLayersManager.Views
iView = iViews.ActiveView
iViewDesignation = iView._oleobj_.QueryInterface(kompas_api7_module.IViewDesignation.CLSID, pythoncom.IID_IDispatch)
iViewDesignation = kompas_api7_module.IViewDesignation(iViewDesignation)
iViewDesignation.RefObject = refObject.Reference
iView.Update()
Сегдня, понятное дело (если на код глянуть повнимательнее), повторить "результат" не удалось - возможно вчера был невнимателен, или "срабатывание" кода следствие "наложение" шаррпоских экспериментов и Python кода, так что - прошу прощение за "дезинформацию"!

А на API7 вот что имеем:
Выносной вид2.png
Обратите внимание что флаг "Обозначение" выставляется, но ссылка на само Обозначение, судя по всему, не добавляется!?

Vashnaemnik

Цитата: p3452 от 20.06.25, 15:56:57Вот этот код был вчера ззаписан и ОДИН раз сработал (!?), дальше и смотреть не стал...
import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application


Documents = application.Documents
#  Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iDocument2D = kompas_object.ActiveDocument2D()

iRemoteElementParam = kompas6_api5_module.ksRemoteElementParam(kompas_object.GetParamStruct(kompas6_constants.ko_RemoteElementParam))
iRemoteElementParam.Init(65535)
iRemoteElementParam.height = 31
iRemoteElementParam.radius = 10
iRemoteElementParam.shelfDir = 1
iRemoteElementParam.shelfX = 110.539707800713
iRemoteElementParam.shelfY = 393.308165945052
iRemoteElementParam.signType = 2
iRemoteElementParam.smooth = 0
iRemoteElementParam.style = 65535
iRemoteElementParam.width = 33
iRemoteElementParam.x = 80.391239183868
iRemoteElementParam.y = 358.297041099684
iTextLineArray = kompas6_api5_module.ksDynamicArray(iRemoteElementParam.GetpText())

iTextLineParam = kompas6_api5_module.ksTextLineParam(kompas_object.GetParamStruct(kompas6_constants.ko_TextLineParam))
iTextLineParam.Init()
iTextLineParam.style = 12
iTextItemArray = kompas_object.GetDynamicArray(LDefin2D.TEXT_ITEM_ARR)
iTextItemParam = kompas6_api5_module.ksTextItemParam(kompas_object.GetParamStruct(kompas6_constants.ko_TextItemParam))
iTextItemParam.Init()
iTextItemParam.iSNumb = 0
iTextItemParam.s = "А"
iTextItemParam.type = 0
iTextItemFont = kompas6_api5_module.ksTextItemFont(iTextItemParam.GetItemFont())
iTextItemFont.Init()
iTextItemFont.bitVector = 4096
iTextItemFont.color = 0
iTextItemFont.fontName = "GOST type B"
iTextItemFont.height = 7
iTextItemFont.ksu = 1
iTextItemArray.ksAddArrayItem(-1, iTextItemParam)
iTextLineParam.SetTextItemArr(iTextItemArray)

iTextLineArray.ksAddArrayItem(-1, iTextLineParam)
iRemoteElementParam.SetpText(iTextLineArray)
iRemoteElement = iDocument2D.ksRemoteElement(iRemoteElementParam)
refObject = iRemoteElement
iViewParam = kompas6_api5_module.ksViewParam(kompas_object.GetParamStruct(kompas6_constants.ko_ViewParam))
iViewParam.Init()
iViewParam.angle = 0
iViewParam.color = 0
iViewParam.name = "Выносной элемент 2"
iViewParam.scale_ = 1
iViewParam.state = 3
iViewParam.x = 209.094217826505
iViewParam.y = 0
iDocument2D.ksCreateSheetView(iViewParam, 0)
iViewsAndLayersManager = kompas_document_2d.ViewsAndLayersManager
iViews = iViewsAndLayersManager.Views
iView = iViews.ActiveView
iViewDesignation = iView._oleobj_.QueryInterface(kompas_api7_module.IViewDesignation.CLSID, pythoncom.IID_IDispatch)
iViewDesignation = kompas_api7_module.IViewDesignation(iViewDesignation)
iViewDesignation.RefObject = refObject.Reference
iView.Update()
Сегдня, понятное дело (если на код глянуть повнимательнее), повторить "результат" не удалось - возможно вчера был невнимателен, или "срабатывание" кода следствие "наложение" шаррпоских экспериментов и Python кода, так что - прошу прощение за "дезинформацию"!

А на API7 вот что имеем:
Выносной вид2.png
Обратите внимание что флаг "Обозначение" выставляется, но ссылка на само Обозначение, судя по всему, не добавляется!?
:angel: Вот именно эта заморочка и не понятна. Ладно, выше прислали обходной вариант, может он сработает.

Vashnaemnik

Цитата: Kaimen от 20.06.25, 15:37:59Для Компас 18.1.55 обходной вариантimport pythoncom
from win32com.client import Dispatch, gencache, VARIANT

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Получи API интерфейсов версии 5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))

#  Получи API интерфейсов версии 7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application

#  Получи интерфейс активного документа
kompas_document = application.ActiveDocument

#  Создай графический объект "Выносной элемент"
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.ActiveView
symbols_2d_container = kompas_api7_module.ISymbols2DContainer(view)
remote_elements = symbols_2d_container.RemoteElements
remote_element = remote_elements.Add()
remote_element.Xc = 71.6102345
remote_element.Yc = 186.6581863
remote_element.Radius = 13.0
remote_element.Height = 10.0
remote_element.Width = 10.0
remote_element.ShelfDirection = 1
remote_element.ShelfX = 92.6333747
remote_element.ShelfY = 218.3652174
remote_element.Form = 0
remote_element.FilletRadius = 0.0
remote_element.AutoSorted = True
remote_element.AutoSheet = False
remote_element.AutoZone = False
remote_element.Update()

view_remote = views.Add(kompas6_constants.vt_Remote)
view_remote.Number = 1
view_remote.Name = "Выносной элемент А"
view_remote.Background = False
view_remote.Visible = True
view_remote.Current = True
view_remote.Color = 0
view_remote.Comment = ""
view_remote.X = -146.2470167
view_remote.Y = -625.8011127
view_remote.Scale = 4.0
view_remote.Angle = 0.0

association_view = kompas_api7_module.IAssociationView(view_remote)
association_view.BaseObject = remote_element
view_remote.Update()
# Очистим обозначение вида
view_designation = kompas_api7_module.IViewDesignation(view_remote)
drawing_text = kompas_api7_module.IDrawingText(view_designation.DrawingText)
text = kompas_api7_module.IText(drawing_text)
text_line = text.TextLine(0)
text_line.Clear()
# Сформируем свое обозначение вида
# Обозначение
text_item = text_line.Add()
text_item.ItemType = kompas6_constants.ksTItHyperText
hypertext_reference_param = kompas_api7_module.IHypertextReferenceParam(text_item)
hypertext_reference_param.LinkObject = kompas_api7_module.IKompasAPIObject(remote_element)
hypertext_reference_param.HypertextType = kompas6_constants.ksHTObjectText
text_item.Update()
# Масштаб
text_item = text_line.Add()
text_item.ItemType = kompas6_constants.ksTItHyperText
hypertext_reference_param = kompas_api7_module.IHypertextReferenceParam(text_item)
hypertext_reference_param.LinkObject = kompas_api7_module.IKompasAPIObject(view_remote)
hypertext_reference_param.HypertextType = kompas6_constants.ksHTViewScale
hypertext_reference_param.Brackets = True
text_item.Update()

drawing_text.Update()

text.Style = kompas6_constants.ksTSDirectionArrow
drawing_text.Update()
Спасибо. Приеду в воскресенье изучу, опробую. Надеюсь поможет.

p3452

#11
Элементы API связанные с "Выносным элементом" имеют, как минимум, два БАГа:
- не обрабатывается "флаг" Обозначение, т.е. ссылка не добавляется;
- позиционирование самого выносного вида завязанно на масштаб, т.е. если указываем масшаб больше 1, вид - УЛЕТАЕТ из чертежа далеко, далеко.