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

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

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

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

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

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

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

Объект спецификации, позиционная выноска, Редактирование состава объекта

Автор TicTonik, 02.12.22, 10:26:01

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

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

TicTonik

Доброго дня.
Столкнулся с проблемой, которую не могу решить вот уже несколько дней. Помогите пожалуйста разобраться или дополнить код.
Ранее я уже находил пример решения подобной задачи вот тут
https://forum.ascon.ru/index.php?topic=35877.0
изменил под себя код, но он не работает - связь с объекта спецификации с позиционной выноской не образуется(Спецификация и сборка связаны). Метод ksSpcIncludeReference возвращает 0. Решаю свою задачу средствами "KOMPAS.Application.5", не знаю верно ли это.
# -*- coding: cp1251 -*-
#|Dependonobject

import

Kompas6API5 as KAPI
from win32com.client import Dispatch
import LDefin2D

def PosLeader(posit):

#метод открывает файл, проходит по позициям на СБ чертеже, если есть совпадение с отправленной в фун-цию переменной, возвращает объект позиционная выноска

    PicKompasObject = Dispatch('KOMPAS.Application.5')
    PicKompasObject = KAPI.KompasObject(PicKompasObject)
    iPicDocumen2D = PicKompasObject.Document2D()
    iPicDocumen2D.ksOpenDocument("C:/ForScripts/Files/AnotherValve.cdw", 1)
    iIterator = PicKompasObject.GetIterator()
    iIterator.ksCreateIterator(21, 0)
    obj = iIterator.ksMoveIterator( "F" )
    if iPicDocumen2D.ksExistObj(obj):
        while iPicDocumen2D.ksExistObj(obj) != 0:
            iPosLeaderParam = KAPI.ksPosLeaderParam(PicKompasObject.GetParamStruct(LDefin2D.ko_PosLeaderParam))
            iTextLineParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextLineParam))
            my_TextItemParam = KAPI.ksTextItemParam(iKompasObject.GetParamStruct(LDefin2D.ko_TextItemParam))
            iPosLeaderParam.Init()
            iPosLeader = iPicDocumen2D.ksGetObjParam(obj, iPosLeaderParam, LDefin2D.ALLPARAM)
            iPosTextline = KAPI.ksDynamicArray(iPosLeaderParam.GetpTextline())
            iPosTextline.ksGetArrayItem(0, iTextLineParam)
            iPosition = iTextLineParam.s
            iPosition.ksGetArrayItem(0, my_TextItemParam)
            position = my_TextItemParam.s
            if position == posit:
                return iPicDocumen2D.ksPositionLeader(iPosLeaderParam)
##                return iPicDocumen2D.ksPositionLeader(iPosLeaderParam)
            else:
                obj = iIterator.ksMoveIterator( "N" )
               


iKompasObject = Dispatch('KOMPAS.Application.5')
iKompasObject = KAPI.KompasObject(iKompasObject)

iDocumentSpc = iKompasObject.SpcActiveDocument()
##iDocumentSpc.ksOpenDocument("C:/ForScripts/Files/rrr01.spw", 1)

iSpc = iDocumentSpc.GetSpecification()

spcIterator = iKompasObject.GetIterator()
spcIterator.ksCreateSpcIterator('graphic.lyt', 1, 3)
obj_sp = spcIterator.ksMoveIterator( "F" )

list_sp = []

while obj_sp:
    name_pos = iSpc.ksGetSpcObjectColumnText(obj_sp, 3, 1, 0)#номер позиции
    print(name_pos.encode("cp1251"), "Check")
    if name_pos not in list_sp and name_pos != "": #если номер позиции ранее не встречался
        list_sp.append(obj_sp)
        iSpc.ksSpcObjectEdit(obj_sp)
        try:
            print(iSpc.ksSpcIncludeReference(PosLeader((name_pos.encode("cp1251"))), 1))
        except TypeError:
            pass
        iSpc.ksSpcObjectEnd()
        iSpc = iDocumentSpc.GetSpecification()
    obj_sp = spcIterator.ksMoveIterator( "N" )

Вират Лакх

Сдался Вам этот API5. Через 7 код проще и обычно быстрее работает. Зачем ещё раз цепляетесь к компасу в функции, которая вызывается в цикле?
Пятый приходится использовать, когда глючит или не работает седьмой. Или нет нужной функции в седьмой.