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

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

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

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

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

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

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

Как создать эскиз в локальной системе координат с помощью Python

Автор Valid, 18.08.14, 13:18:22

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

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

Valid

Как создать эскиз в локальной системе координат с помощью Python

Valid

На просторах форума найдено 2 решения этой мегазадачи. Оба они как мне кажется написаны на Delphi.

1 Способ. Находит плоскость xoy  в локальной системе координат наделяет её именем. При создании эскиза идет ссылка на имя плоскости.

// Найдем "нужную" плоскость ЛСК и переименуем
IModelObject MyPlane = iLocalCoordinateSystem.DefaultObject[ksObj3dTypeEnum.o3d_planeXOY];
MyPlane.Name = "MyPlane";
MyPlane.Update();

// Создадим эскиз на "нужной" плоскости
ksPart Part = (ksPart)Document3D.GetPart((short)Part_Type.pTop_Part);
ksEntityCollection PartCollection = (ksEntityCollection)Part.EntityCollection((int)Obj3dType.o3d_unknown);         
ksEntity Plane = (ksEntity)PartCollection.GetByName("MyPlane", true, false); // Нашел "нужную" плоскость
// Рисуем круг отверстия         
ksEntity EntityDraw = (ksEntity)Part.NewEntity((short)ksObj3dTypeEnum.o3d_sketch);
ksSketchDefinition SketchDefinition = (ksSketchDefinition)EntityDraw.GetDefinition();
SketchDefinition.SetPlane(Plane); // Указал "нужную" плоскость
EntityDraw.Create();
ksDocument2D Document2D = (ksDocument2D)SketchDefinition.BeginEdit();
Document2D.ksCircle(0, 0, 5, 1);
SketchDefinition.EndEdit();

2 Способ. Получить указатель на плоскость xoy.

IModelObject iPlaneXOY = iLCS.DefaultObject[ksObj3dTypeEnum.o3d_planeXOY];
ksEntity PlaneXOY = (ksEntity)Kompas.TransferInterface(iPlaneXOY, (int)ksAPITypeEnum.ksAPI5Auto (int)Obj3dType.o3d_entity);

Slaviation

ЦитироватьКак создать эскиз в локальной системе координат с помощью Python
Создание локальной системы координат можно смотреть тут
http://forum.ascon.ru/index.php/topic,26543.msg195266.html#msg195266
+
полный тест в прицепе
+ Благодарностей: 1

Valid

Slaviation огромное спасибо за пример.

В Компас V15 появилась возможность записывать в макрос локальную систему координат. Но нарисованные эскизы в локальной системе координат в макросе примапливаются к глобальной.

Можно ли используя пример от Slaviation доработать код.

Пример кода

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import Dispatch
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

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

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

iDocument3D = iKompasObject.ActiveDocument3D()

iDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iDocument)

iPart7 = iKompasDocument3D.TopPart
iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
iAuxiliaryGeomContainer = iPart7._oleobj_.QueryInterface(KAPI7.NamesToIIDMap['IAuxiliaryGeomContainer'], pythoncom.IID_IDispatch)
iAuxiliaryGeomContainer = KAPI7.IAuxiliaryGeomContainer(iAuxiliaryGeomContainer)
iLocalCoordinateSystems = iAuxiliaryGeomContainer.LocalCoordinateSystems
iLocalCoordinateSystem = iLocalCoordinateSystems.Add()
iPoint3D = iLocalCoordinateSystem._oleobj_.QueryInterface(KAPI7.NamesToIIDMap['IPoint3D'], pythoncom.IID_IDispatch)
iPoint3D = KAPI7.IPoint3D(iPoint3D)
iPoint3D.ParameterType = CONST3D7.constants.ksPParamCoord
iPoint3D.X = 10.00000000000
iPoint3D.Y = -25.00000000000
iPoint3D.Z = 14.00000000000
iLocalCoordinateSystem.OrientationType = CONST3D7.constants.ksAxisOrientation
iLocalCoordinateSystem.Update()
iLocalCSParameters = iLocalCoordinateSystem.LocalCSParameters
iLocalCSAxesDirectionParam = iLocalCSParameters._oleobj_.QueryInterface(KAPI7.NamesToIIDMap['ILocalCSAxesDirectionParam'], pythoncom.IID_IDispatch)
iLocalCSAxesDirectionParam = KAPI7.ILocalCSAxesDirectionParam(iLocalCSAxesDirectionParam)
matrix = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10, -25, 14, 1]
iLocalCoordinateSystem.InitByMatrix3D(matrix)
iLocalCoordinateSystem.Update()


iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)
iSketch = iPart.NewEntity(LDefin3D.o3d_sketch)
iDefinition = iSketch.GetDefinition()

#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#iPlane = iPart.GetDefaultEntity(LDefin3D.o3d_planeXOY)


iPlane  =  ilocalCoordinateSystem.DefaultObject(const.o3d_planeXOY)
#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


iPlane = iPart.GetDefaultEntity(LDefin3D.o3d_planeXOY)
iDefinition.SetPlane(iPlane)
iSketch.Create()

iDocument2D = iDefinition.BeginEdit()
obj = iDocument2D.ksCircle(0.0, 0.0, 7.0, 1)
iDefinition.EndEdit()


Попробывал сделать таким способом не получилось. Подскажите что не так делаю.