Построение детали в сборке.

Автор attract777, 18.07.19, 17:22:14

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

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

attract777

Здравствуйте!

Не могу построить деталь (объект) непосредственно в сборке. Объект представляет собой параллелепипед. Строится эскиз, далее выдавливается, получается 3D-модель. Ниже представлен код создания сборки и построения объекта в сборке.
Сборка создается в классе "X", метод реализующий построение объекта - в классе "Y".
Как правильно через ksPart и ksPartCollection реализовать создание объекта (тела, детали) в сборке?


//класс X
doc = (ksDocument3D)kompas.Document3D();                           
doc.Create(false, false);
//recGeo2 - Объект класса Y. В данном классе содержится метод (Draw2()) построения детали в сборке
RectangleGeo2 recGeo2 = new RectangleGeo2(x, y, ang, height, width, style, kompas, doc, doc1, param, attr, type, col, numbType, nameFile/*, arr, parts*/);

recGeo2.Draw2();

//Метод построения детали в сборке
public void Draw2()
{
    //переменные для теста....

    string nd = null; //имя детали
    nd = kompas.ksReadString("Имя детали", "Введите имя");
    Width = Convert.ToDouble(kompas.ksReadString("Ширина", "5"));
    Height = Convert.ToDouble(kompas.ksReadString("Длина", "6"));
    Ang = Convert.ToDouble(kompas.ksReadString("Угол поворота", "0"));
    double eXt = Convert.ToDouble(kompas.ksReadString("Глубина выдавливания", "2"));
    double coordX = 0; double coordY = 0; //временно 0
                                         
    ksPart ksPartmain = (ksPart)doc3D.GetPart((short)Part_Type.pTop_Part);  //Для Сборки
   
    ksPartCollection parts = (ksPartCollection)doc3D.PartCollection(true); // Массив компонентов
    if (parts != null)
    {
        ksPart part = (ksPart)doc3D.GetPart((short)Part_Type.pNew_Part); //Построение детали. Объект создается, если указано *.pTop_part вместо pNewPart
        if (part != null)
        {

            ksEntity entitySketch = (ksEntity)part.NewEntity((short)Obj3dType.o3d_sketch);                   


            if (entitySketch != null)
            {
                // интерфейс свойств эскиза площадок
                ksSketchDefinition sketchDef = (ksSketchDefinition)entitySketch.GetDefinition();
                if (sketchDef != null)
                {
                    // получим интерфейс базовой плоскости XOY
                    ksEntity basePlane = (ksEntity)part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
                    sketchDef.SetPlane(basePlane); // установим плоскость XOY базовой для эскиза

                    entitySketch.Create(); //создадим эскиз
                                           // интерфейс редактора эскиза
                    ksDocument2D sketchEdit = (ksDocument2D)sketchDef.BeginEdit();
                    if (sketchEdit != null)
                    {
                        //Построение прямоугольника
                        ksRectangleParam param = (ksRectangleParam)kompas.GetParamStruct((short)StructType2DEnum.ko_RectangleParam);
                        if (param != null)
                        {
                            X = coordX;
                            Y = coordY;
                            param.x = X - (Width / 2);  //сделать координаты по центру +
                            param.y = Y - (Height / 2);  //сделать координаты по центру// +
                            param.ang = Ang;
                            param.height = Height;
                            param.width = Width;
                            param.style = 1;
                            sketchEdit.ksRectangle(param, 0); //Exception!  System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
                        }
                    }                   
                    sketchDef.EndEdit();  //завершение редактирования эскиза
                    ksEntity entityExtr = (ksEntity)part.NewEntity((short)Obj3dType.o3d_bossExtrusion);
                    if (entityExtr != null)
                    {
                        // интерфейс свойств базовой операции выдавливания
                        ksBossExtrusionDefinition extrusionDef = (ksBossExtrusionDefinition)entityExtr.GetDefinition(); // интерфейс базовой операции выдавливания
                        if (extrusionDef != null)
                        {
                            extrusionDef.directionType = (short)Direction_Type.dtNormal;  // направление выдавливания
                            extrusionDef.SetSideParam(true, //прямое направление
                            (short)End_Type.etBlind,  // строго на глубину ()
                            eXt, 0, false);
                            // тонкая стенка в два направления//
                            extrusionDef.SetSketch(entitySketch); // эскиз операции выдавливания
                            entityExtr.Create();

                        }
                    }
                }

            }
        }   
    }
}