Проблема с записью сплайна в чертеже

Автор KronX, 29.04.23, 14:10:06

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

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

KronX

Доброго дня всем!

С Компас-макро знаком несколько дней (макросы на Python), но так и не смог решить следующую проблему:
Нужно на чертеже (2D документ) построить сплайн.
У меня на входе есть, например, 4 точки: (0;0), (10;10), (20;0), (30; 15).
Нужно провести через них сплайн. Синтаксиса для задания сплайна на форумах не нашел, единственное понял, что это что-то связанное с Nurbs.
При попытке определить синтаксис через "запись", где я строю сплайн обычном способом (просто кликая по экрану, задавая узлы сплайна), на выходе получаю пустой макрос (ну начало макроса как и всегда, с подключением активного документа-чертежа).

Помогите разобраться(

p3452

- Компас-макро умеет "записывать" работу только с простейшими элементами (примитивными-примитивами :angel: )...
- На Форуме есть "Поиск".
- Наберите в окне поиска Форума - "PyKompasMacro" и ознакомьтесь с темами.

SergNLMK

Приветствую!
Пример кода для создания сплайна типа кривой Безье:
# -*- coding: utf-8 -*-
#|Macro

import pythoncom
from win32com.client import Dispatch, gencache

#  Подключим константы API Компас
const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
const_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
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))

#  Подключим описание интерфейсов API7
KAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = KAPI7.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(KAPI7.IApplication.CLSID, pythoncom.IID_IDispatch))

#  Получим активный документ
iDocument = application.ActiveDocument
iKompasDocument2D = KAPI7.IKompasDocument2D(iDocument)
iDocument2D = iKompasObject.ActiveDocument2D()

# Создадим кривую Безье
iDocument2D.ksBezier(0, 1)
# Добавим точки для кривой Безье (координата x, координата y, стиль отрисовки точки)
iDocument2D.ksPoint(0.0, 0.0, 0)
iDocument2D.ksPoint(10.0, 10.0, 0)
iDocument2D.ksPoint(20.0, 20.0, 0)
iDocument2D.ksPoint(30.0, 15.0, 0)
# Завершим создание объекта
obj = iDocument2D.ksEndObj()
+ Благодарностей: 2

Doom

+ способ образования + еще пару способов
ksNurbsByPointsBuildingTypeEnum

ksNByPBTUndefined  0   Неопределенный
ksNByPBLinear      1   Линейный
ksNByPBChordLength 2   По длине хорды
ksNByPBCentripetal 3   Центростремительный

пс. видел альтернативное управление - касательные вектора - при смене угла и длины - сплайн меняет траекторию.
 

KronX

Спасибо большое, SergNLMK!    :sun:

Самое забавное, что когда я получал код кривой Безье записью, точки были записаны через obj = iDocument2D.ksPoint, и после запуска не строило кривую. Магический Компас-Макро.  8-)

Цитата: SergNLMK от 29.04.23, 20:27:19Приветствую!
Пример кода для создания сплайна типа кривой Безье:

# Создадим кривую Безье
iDocument2D.ksBezier(0, 1)
# Добавим точки для кривой Безье (координата x, координата y, стиль отрисовки точки)
iDocument2D.ksPoint(0.0, 0.0, 0)
iDocument2D.ksPoint(10.0, 10.0, 0)
iDocument2D.ksPoint(20.0, 20.0, 0)
iDocument2D.ksPoint(30.0, 15.0, 0)
# Завершим создание объекта
obj = iDocument2D.ksEndObj()