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

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

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

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

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

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

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

Получить координаты всех отрезков в чертеже

Автор evgs, 17.11.22, 16:39:57

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

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

evgs

Сделан вид с модели. Как программно получить координаты конечных точек всех отрезков на чертеже?

p3452


dimak222

#2
Цитата: evgs от 17.11.22, 16:39:57Сделан вид с модели. Как программно получить координаты конечных точек всех отрезков на чертеже?
Для работы нужно выделить объект/объекты. Навёл красоту, избавился от ошибок выделения других объектов.
from win32com.client import Dispatch, gencache # библиотека API Windows

def X_Y(Object): # обработка и получение координат

    if iSelectedObject.DrawingObjectType == 1: # тип графических объектов (1 - отрезок, см. DrawingObjectTypeEnum)
        X1 = iSelectedObject.X1 # координаты "абсолютные" (относительно системного вида)
        X2 = iSelectedObject.X2 # координаты "абсолютные" (относительно системного вида)
        Y1 = iSelectedObject.Y1 # координаты "абсолютные" (относительно системного вида)
        Y2 = iSelectedObject.Y2 # координаты "абсолютные" (относительно системного вида)

        print(X1, X2, Y1, Y2) # печатаем значения

KompasAPI7 = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0) # API7 КОМПАСа
iApplication = Dispatch('Kompas.Application.7') # интерфейс приложения КОМПАС-3D.

iKompasDocument = iApplication.ActiveDocument # базовый класс документов КОМПАС
iKompasDocument2D1 = KompasAPI7.IKompasDocument2D1(iKompasDocument) # дополнительный интерфейс IKompasDocument2D
iSelectionManager = iKompasDocument2D1.SelectionManager # менеджер выделенных объектов
iSelectedObjects = iSelectionManager.SelectedObjects # массив выделенных объектов в виде SAFEARRAY | VT_DISPATCH

if isinstance(iSelectedObjects, tuple): # если выбрано несколько объектов (кортеж объектов)
    for iSelectedObject in iSelectedObjects: # перебор всех выделеных объектов
        X_Y(iSelectedObject) # обработка и получение координат

else:
    X_Y(iSelectedObject) # обработка и получение координат

Цитата: p3452 от 17.11.22, 16:55:44На форуме есть "Поиск"!
Не серчайте, я добрый, помогу так и быть=)
+ Благодарностей: 1

Михаил88

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

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
# API7
kompas_api7_module = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
application = Dispatch('Kompas.Application.7')

kompas_document = application.ActiveDocument
if kompas_document is not None:
    # ksDocumentDrawing - 1 - Чертеж
    # ksDocumentFragment - 2 - Фрагмент
    document_type = kompas_document.DocumentType
    if document_type == 1 or document_type == 2:
        kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
        # Менеджер слоев и видов графического документа.
        views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
        # Интерфейс коллекции видов графического документа.
        views = views_and_layers_manager.Views
        active_view = views.ActiveView
        # Интерфейс контейнера объектов вида графического документа
        drawing_container = kompas_api7_module.IDrawingContainer(active_view)
        # ksDrLineSeg 1 Отрезок
        objects = drawing_container.Objects(kompas6_constants.ksDrLineSeg)
        print(objects)
        for obj in objects:
            x1 = obj.X1
            x2 = obj.X2
            y1 = obj.Y1
            y2 = obj.Y2
            print(x1, x2, y1, y2)

Для активного вида. Если для всех видов то нужно просто их перебрать.
+ Благодарностей: 2

p3452

Цитата: dimak222 от 17.11.22, 16:57:50Не серчайте, я добрый, помогу так и быть=)
"О времена! О нравы!..."
- Еще совсем недавно, на Форумах (в том числе и на нашем) существовало ПРАВИЛО (для всех разделов связанных с программирование) - не отвечать на вопросы ТС в ПОДОБНОЙ формулировке - для блага самого ТС!!!
Тем более, без предоставления ПРОБЛЕМНОГО кода...

msvteh

+ Благодарностей: 1

evgs

Всё получилось! Спасибо всем откликнувшимся.