Спецификация, доп колонки, макрос

Автор Fv_34, 10.05.25, 19:24:33

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

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

Fv_34

КОМПАС 22
здравствуйте. прошу помочь разобраться с темой. у меня есть спецификация, в которую добавлена кастомная колонка, допустим примечание2. есть ли какая-то возможность перебирая объекты спецификации прочесть свойство объекта (из 3д модели) и записать его в спецификацию в соответствующей строке? Как можно определить порядковый номер колонки?

Этим кодом могу добавить данные в примечание (7) , а как найти номер новой колонки - не понимаю.
В программировании не силен, а решить задачу надо,поэтому взываю к коллективному разуму.

# -*- coding: utf-8 -*-
import pythoncom
from win32com.client import Dispatch, gencache

# 1) Подключаем API5 и константы
api5 = gencache.EnsureModule(
    "{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0
)
const5 = gencache.EnsureModule(
    "{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0
).constants

# 2) Получаем COM-объект КОМПАСа и спецификации
kompas = api5.KompasObject(
    Dispatch("Kompas.Application.5")
      ._oleobj_
      .QueryInterface(api5.KompasObject.CLSID, pythoncom.IID_IDispatch)
)
doc_spc = kompas.SpcActiveDocument()
if not doc_spc:
    raise RuntimeError(
        "Откройте спецификацию и запустите скрипт заново."
    )
spc = doc_spc.GetSpecification()

# 3) Собираем все handles через итератор
itr = kompas.GetIterator()
itr.ksCreateSpcIterator(0, 0, 0)
handles = []
h = itr.ksMoveIterator("F")
while h:
    handles.append(h)
    h = itr.ksMoveIterator("N")
print("Найдено объектов:", len(handles))

# 4) Проходим по списку handles и обновляем примечание
for h in handles:
    print("Обрабатываем handle:", h)
    # Начало редактирования
    ok_edit = spc.ksSpcObjectEdit(h)
    print(" ksSpcObjectEdit returned:", ok_edit)
    # Запись нового примечания
    new_note = "привет"
    ok_set = spc.ksSetSpcObjectColumnText(7, 1, 0, new_note)
    print(" ksSetSpcObjectColumnText returned:", ok_set)
    # Фиксация изменений
    ok_end = spc.ksSpcObjectEnd()
    print(" ksSpcObjectEnd returned:", ok_end)

print("Обновление завершено.")

Student2025

#1
Цитата: Fv_34 от 10.05.25, 19:24:33Python

UU, не знает язык Python :<>
+ Благодарностей: 1

Fv_34

Цитата: Student2025 от 10.05.25, 20:24:16UU, этого не оценит :<>
кто что видел? никто ничего не видел

Student2025

Fv_34, а где код где открываете 3D модель и получаете это свойство ?

Цитата: Fv_34 от 10.05.25, 19:24:33Как можно определить порядковый номер колонки?
Просто порядковой номер колонки. Для проверки можно что то туда записать например из цикла присвоить номер прохода и так определить номер колонки.

Fv_34

Цитата: Student2025 от 11.05.25, 15:05:15Fv_34, а где код где открываете 3D модель и получаете это свойство ?
здравствуйте, с открытием модели пока никаких результатов нет - я не понимаю, как это можно сделать.

 
по поводу порядкового номера - я пробовал вот так вставить в новую колонку ( по логике 8 по счету), код вроде как отрабатывает, но ничего нигде не появляется. пробовал так:
ok_set = spc.ksSetSpcObjectColumnText(8, 1, 0, new_note)

Student2025

#5
А если так -
ok_set = spc.ksSetSpcObjectColumnTextEx(8, 1, 0, iTextLineParam) ?

itr.ksCreateSpcIterator('graphic.lyt', 1, 3) хотя то что написали тоже верно должно быть.

В общем не понятно почему не работает - вы все верно написали (и нет возможности проверить).
+ Благодарностей: 1

Student2025

Либо через api 7 - ISpecificationBaseObjects ?
+ Благодарностей: 1

Fv_34

 Student2025 , спасибо, буду пробовать. Пока ничего не выходит, но мне кажется здесь еще есть проблема в моей настройке.
Я добавил колонку в разделе редактирования основных надписей. Однако почему-то моя колонка не отображается в разделе колонок в стиле той же спецификации. Может из-за этого я не могу туда записать макросом, не знаю. буду изучать вопрос

Toptotal

Цитата: Fv_34 от 10.05.25, 19:24:33прочесть свойство объекта (из 3д модели) и записать его в спецификацию в соответствующей строке?
модель пришлите. я так и не понял у вас свойство в модели занесено ? но не туда или что ?

Михаил88

Цитата: Fv_34 от 12.05.25, 19:41:44Я добавил колонку в разделе редактирования основных надписей. Однако почему-то моя колонка не отображается в разделе колонок в стиле той же спецификации.

Похоже вы не до конца доделали создания своего стиля спецификации. Вам ведь нужно создать свой стиль спецификации или отредактировать текущий.
Почитайте справку.