Пример копирования вырезанного элемента

Автор rak_so_stagem, 15.12.16, 13:22:30

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

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

rak_so_stagem

Добрый день!
У меня есть следующий метод для создания эскиза и вырезания элемента выдавливанием:

   
var doc = (ksDocument3D)kompas.ActiveDocument3D();
var part = (ksPart)doc.GetPart((short)Part_Type.pTop_Part);
if (part != null)
{
    // Создаем новый эскиз
    ksEntity entitySketch = (ksEntity)part.NewEntity((short)Obj3dType.o3d_sketch);
    if (entitySketch != null)
    {
        // интерфейс свойств эскиза
        ksSketchDefinition sketchDef = (ksSketchDefinition)entitySketch.GetDefinition();
        if (sketchDef != null)
        {
            // получим интерфейс базовой плоскости
            ksEntity basePlane;

            basePlane = (ksEntity)part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);

            sketchDef.SetPlane(basePlane); // установим плоскость базовой для эскиза
            entitySketch.Create(); // создадим эскиз1

            // интерфейс редактора эскиза
            ksDocument2D sketchEdit = (ksDocument2D)sketchDef.BeginEdit();
            //круглое отверстие
            sketchEdit.ksCircle(40, 0, 5, 1); //(x, y, radius, 1)
            sketchDef.EndEdit(); // завершение редактирования эскиза
            // вырежим выдавливанием

            ksEntity entityCutExtr = (ksEntity)part.NewEntity((short)Obj3dType.o3d_cutExtrusion);

            if (entityCutExtr != null)
            {
                ksCutExtrusionDefinition cutExtrDef = (ksCutExtrusionDefinition)entityCutExtr.GetDefinition();
                if (cutExtrDef != null)
                {
                    cutExtrDef.cut = true;
                    cutExtrDef.directionType = (short)Direction_Type.dtReverse;

                    cutExtrDef.SetSideParam(false, (short)End_Type.etBlind, depth);

                    cutExtrDef.SetSketch(entitySketch);
                    entityCutExtr.Create(); // создадим операцию вырезание выдавливанием
                    sketchDef.EndEdit(); // завершение редактирования эскиза

                 }
             }
         }
     }
}


Подскажите, пожалуйста, как можно в этом методе применить интерфейс ksCircularPartArrayDefinition, чтобы создать несколько экземпляров по концентрической сетке?


rak_so_stagem

@Sabahs , спасибо. Переделал под C#, может быть кому пригодится.


ksEntity CircCopyEntity = (ksEntity)part.NewEntity((short)Obj3dType.o3d_circularCopy);
if (CircCopyEntity != null)
{
    ksCircularCopyDefinition CircCopyDef = (ksCircularCopyDefinition)CircCopyEntity.GetDefinition();
    if (CircCopyDef != null)
    {
        CircCopyDef.SetAxis(false);
        CircCopyDef.SetCopyParamAlongDir(4, 360.0, true, false);
        ksEntity baseAxisOZ = (ksEntity)part.GetDefaultEntity((short)Obj3dType.o3d_axisOZ);
        CircCopyDef.SetAxis(baseAxisOZ);//Устанавливаем ось OZ
        ksEntityCollection entCol = (ksEntityCollection)CircCopyDef.GetOperationArray();
        if (entCol != null)
            entCol.Add(<объект, который необходимо скопировать>);
        CircCopyEntity.Create();
     }
}