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

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

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

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

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

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

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

Почему итератор не проходится по всем объектам?

Автор feron, 25.10.23, 22:49:15

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

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

feron

Приветствую,

В чертеже например создал слои а итератор не проходится по ним, почему ?

# -*- coding: utf-8 -*-

from win32com.client import Dispatch, gencache

from ksConstV16 import constants as const_2d_
from ksConst3DV16 import constants as const_3d_

import KompasApi5V16 as KAPI5
import KompasApi7V16 as KAPI7

api5_ = Dispatch('Kompas.Application.5', None, KAPI5.KompasObject.CLSID)
api7_ = Dispatch('Kompas.Application.7')

iDoc = api7_.ActiveDocument
iDoc2D = KAPI7.IKompasDocument2D(iDoc)

Doc2D = api5_.ActiveDocument2D()

iIterator = api5_.GetIterator()
iIterator.ksCreateIterator(const_2d_.ksAllObj, 0) # нужно пройтись от "корки" до "корки".

_object = iIterator.ksMoveIterator("F")

filtr = []

while Doc2D.ksExistObj(_object) == 1:
       
    next_object = api5_.TransferReference(_object, Doc2D.reference)

    result = str(next_object).split(' instance')[0].split('<KompasApi7V16.')[1]

    if not result in filtr:

        print('Интерфейс', result)
        filtr.append(result)

    _object = iIterator.ksMoveIterator("N")
   
iIterator.ksDeleteIterator()

если явно указать iIterator.ksCreateIterator(const_2d_.ksLayer, 0) то находит их, а почему в первом случае не находит?

feron

filtr = []
flag = -10000

iDoc = api7_.ActiveDocument
iDoc2D = KAPI7.IKompasDocument2D(iDoc)

Doc2D = api5_.ActiveDocument2D()

while flag < 10001:

    try:
        iIterator = api5_.GetIterator()
        iIterator.ksCreateIterator(flag, 0)

        _obj = iIterator.ksMoveIterator("F")

        while Doc2D.ksExistObj(_obj) != 0:

            TypeObj = Doc2D.ksGetObjParam(_obj, None, const_2d_.ksAllObj)

            if TypeObj not in filtr:
                print(TypeObj)
                filtr.append(TypeObj)

            _obj = iIterator.ksMoveIterator("N")

        iIterator.ksDeleteIterator()
    except:
        pass

    flag += 1