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

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

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

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

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

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

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

Позиционная выноска и объект спецификации

Автор kernel.3a, 21.07.21, 13:44:14

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

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

kernel.3a

Народ, подскажите как связать позиционную выноску с объектом спецификации в чертеже, задумка в том чтобы перебрать все объекты спецификации и создать по ним выноски с привязками к этим объектам, объекты перебрать знаю как, выноску создать тоже понятно, а вот как связать их между собой...

Starik

Что Вы имеете ввиду под выноской? ГОСтовское обозначение позиций или какие то другие выноски?

kernel.3a

Цитата: Starik от 21.07.21, 13:50:34Что Вы имеете ввиду под выноской? ГОСтовское обозначение позиций или какие то другие выноски?
Имею в виду обозначение позиции

Ушкуй

 Найдите а справке Подключение и редактирование состава геометрии объекта спецификации!

kernel.3a

Цитата: Ушкуй от 21.07.21, 14:02:55Найдите а справке Подключение и редактирование состава геометрии объекта спецификации!
Меня интересует как это сделать посредством Python или Компас-Макро. В справке SDK ответ не нашел.

IgorT


kernel.3a

Цитата: IgorT от 21.07.21, 14:17:59Возможно здесь есть полезная Вам информация https://forum.ascon.ru/index.php?topic=31120.0
Спасибо Вам и пользователю ТрындецЪ, ответ найден, возможно кому пригодиться получилось вот что:

import pythoncom
from win32com.client import Dispatch, gencache

def PosLeader():
    global KAPI, iDocumentSpc, x0, y0, x, y
    iPosLeaderParam = KAPI.ksPosLeaderParam(iKompasObject.GetParamStruct(61)) # ko_PosLeaderParam
    iPosLeaderParam.Init()
    iPosLeaderParam.arrowType = 1   
    if x < x0:
        iPosLeaderParam.dirX = -1
    else:
        iPosLeaderParam.dirX = 1
    #iPosLeaderParam.dirY = -1
    iPosLeaderParam.style = 65535
    iPosLeaderParam.x = x
    iPosLeaderParam.y = y
    iPolylineArray = KAPI.ksDynamicArray(iPosLeaderParam.GetpPolyline())
    iMathPointArray = KAPI.ksDynamicArray(iKompasObject.GetDynamicArray(2))
    iMathPointParam = KAPI.ksMathPointParam(iKompasObject.GetParamStruct(14)) # ko_MathPointParam
    iMathPointParam.Init()
    iMathPointParam.x = x0
    iMathPointParam.y = y0
    iMathPointArray.ksAddArrayItem(-1, iMathPointParam)
    iPolylineArray.ksAddArrayItem(-1, iMathPointArray)
    iPosLeaderParam.SetpPolyline(iPolylineArray)
    return ksDocument2D.ksPositionLeader(iPosLeaderParam)

#НАЧАЛО
x, y = -150, 300
x0, y0 = x-10, y-10

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))

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))

iDocument = iApplication.ActiveDocument
ksDocument2D = iKompasObject.ActiveDocument2D()
iDocument2D = KAPI7.IKompasDocument2D(iDocument)
iDocument2D1 = KAPI7.IKompasDocument2D1(iDocument2D)
iViewsAndLayersManager = iDocument2D.ViewsAndLayersManager
iViews = iViewsAndLayersManager.Views

iSpecificationDescriptions = iDocument.SpecificationDescriptions
iSpecificationDescription = iSpecificationDescriptions.Active
LayoutName = iSpecificationDescription.LayoutName
StyleID = iSpecificationDescription.StyleID
ksSpecification = ksDocument2D.GetSpecification()

ksIterator = iKompasObject.GetIterator()
ksIterator.ksCreateSpcIterator('graphic.lyt', 1, 3)#создание итератора (тип объектов: 0 - базовые,1 - вспомогательные,2 - базовые и вспомогательные из сортированного массива,3 - все объекты)
obj_sp = ksIterator.ksMoveIterator( "F" )#позиционирование на первом выделенном объекте
list_sp = []#перечень объектов спецификации
while obj_sp:
    name_3 = ksSpecification.ksGetSpcObjectColumnText(obj_sp, 3, 1, 0)#номер позиции
    name_4 = str(ksSpecification.ksGetSpcObjectColumnText(obj_sp, 4, 1, 0))#обозначение
    name_5 = str(ksSpecification.ksGetSpcObjectColumnText(obj_sp, 5, 1, 0))#наименование
    spc_item = name_5 + " " + name_4
    if name_3 and spc_item not in list_sp: #если существует номер позиции и объект ранее не встречался
        list_sp.append(spc_item)
        print(spc_item)
       
        obj_pos = PosLeader()
        ksSpecification.ksSpcObjectEdit(obj_sp)
        ksSpecification.ksSpcIncludeReference(obj_pos, 0)
        ksSpecification.ksSpcObjectEnd()
       
        x, y = -150, y-16
        x0, y0 = x-10, y-10
    obj_sp = ksIterator.ksMoveIterator( "N" )#позиционирование на следующем выделенном объекте