Обучение программированию

Автор Alal, 26.03.16, 09:13:20

« предыдущая - следующая »

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

pr0100

Цитата: IgorT от 17.05.17, 13:14:59
О! Похоже фрагменты позволят привязаться только  к началу координат фрагмента. Я правильно понял?

Да верно, от сюда и плясать со всей параметризацией.

IgorT

 :(
А в К-17 случайно не добавили возможность цепляться за любую геометрию макроэлементов/фрагментов в целях параметризации?

ТрындецЪ

Как на Python получить интерфейс IKompasDocument3D1?

lua

Коллеги, прошу сильно не пинать, если написал не туда. Не могу понять, как программно нарисовать отрезок в 3D с координатами относительно текущей ЛСК. Хоть и выставлена ЛСК текущей, но в результате отрезок создается относительно Начала координат      

Segment_3D->BuildingType = ksLineSegment3DTypeEnum::ksLSTTwoPoints;
Segment_3D->SetPoint (TRUE, X1, Y1, Z1);
Segment_3D->SetPoint (FALSE, X2, Y2, Z2);

Sabahs

Необходимо установить свойство IKompasDocument3D.CreateObjectsInCurrentLocalCS.
Doc3D.CreateObjectsInCurrentLocalCS:=True;

ТрындецЪ

Пробовал поэкспериментировать с ЛСК. ЛСК создаётся, назначается текущей.
Но, при создании отрезка, координаты его концов, которые я забиваю соответствуют координатам глобальной СК.
Хотя, в переменных для отрезка прописываются локальные координаты.
Отсюда вопрос: что дописать в код, чтобы при создании отрезка можно было вводить координаты соответствующие ЛСК?

# -*- coding: cp1251 -*-

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
from win32com.client import Dispatch
import LDefin3D
import ksConstants3D as CONST3D7

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

iApplication = Dispatch('KOMPAS.Application.7')
iApplication = KAPI7.IApplication(iApplication)

##iSystemSettings = iApplication.SystemSettings
##iSystemSettings.ModelLocalCSSetActive = True
##iSystemSettings.ModelLocalCSCreateInAbsoluteCS = True

iDocument3D = iKompasObject.ActiveDocument3D()
iDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iDocument)
iPart7 = iKompasDocument3D.TopPart
iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)

# Создаём ЛСК
iAuxiliaryGeomContainer = KAPI7.IAuxiliaryGeomContainer(iAuxiliaryGeomContainer)
iLocalCoordinateSystems = iAuxiliaryGeomContainer.LocalCoordinateSystems
iLocalCoordinateSystem = iLocalCoordinateSystems.Add()
iLocalCoordinateSystem.OrientationType = CONST3D7.constants.ksAxisOrientation
iLocalCSParameters = iLocalCoordinateSystem.LocalCSParameters
iLocalCSAxesDirectionParam = KAPI7.ILocalCSAxesDirectionParam(iLocalCSAxesDirectionParam)
matrix = [0.146447, 0.853553, 0.5, 0, -0.853553, -0.146447, 0.5, 0, 0.5, -0.5, 0.707107, 0, 10, 10, 10, 1]
iLocalCoordinateSystem.InitByMatrix3D(matrix)
iLocalCoordinateSystem.Update()

# Создавать новые объекты в ЛСК
iKompasDocument3D.CreateObjectsInCurrentLocalCS=True

# Создаём отрезок по двум точкам
iLineSegments3D = iAuxiliaryGeomContainer.LineSegments3D
iLineSegment3D = iLineSegments3D.Add()
iLineSegment3D.BuildingType = CONST3D7.constants.ksLSTTwoPoints
# Координаты начала в глобальной СК
iLineSegment3D.SetPoint(True, 0, 0, 0)
# Координаты конца в глобальной СК
iLineSegment3D.SetPoint(False, 50, 0, 0)
iLineSegment3D.Update()

lua

Цитата: ТрындецЪ от 04.07.17, 16:17:11
Пробовал поэкспериментировать с ЛСК. ЛСК создаётся, назначается текущей.
Но, при создании отрезка, координаты его концов, которые я забиваю соответствуют координатам глобальной СК.

Да, точно. Подтверждаю. Координаты при создании пересчитываются относительно глобальной СК.
Цитата: ТрындецЪ от 04.07.17, 16:17:11
Хотя, в переменных для отрезка прописываются локальные координаты.

А в переменных у меня тоже пересчитанные относительно глобальной...

Sabahs


pr0100

Цитата: Slaviation от 03.12.15, 13:16:11
Если процесс размещения компонента предполагалось дать пользователю, то:
Правильнее было бы дать пользователю соответствующую компасовую панель, со всеми возможностями размещения.
Сделать это можно запустив процесс KompasObject::ksExecuteKompasCommand(prAddPartFromFile, True).
После запуска этому процессу понадобится файл для вставки и процесс создаст событие BeginRequestFiles (на него надо будет предварительно подписаться).
В обработчике этого события подсовываем свой файл.
Имеем интерактивный процесс размещения компонента со всеми "наворотами".



Как на питоне подписаться на событие "BeginRequestFiles" и запустить процесс "ksExecuteKompasCommand"?

ALEXEY ZATEEV

Помогите пожалуйста: как получить в Питоне значения размерных переменных? Я инженер, что касается черчения - справляюсь, но вынужден пробовать писать скрипт на Питоне (Компас-Макро), а в программировании дуб дубом, даже азы :`(
И вообще не пойму (SDK уже до дыр прочел) как можно получить идентификаторы всех объектов чертежа?
Например, в виде множества, словаря и т. п. ... Пока с трудом представляю себе объектную модель документа Компас.
Цель -- считать значения свойств отрезка (длины, координат концов и т. д.), который уже есть на плоском чертеже (.frw), и присвоить их значения переменным Питона для дальнейшего использования. Может пример готовый есть? 8-)