/// <summary> /// Расчет точек прямоугольной конфеты /// </summary> /// <param name="X">Массив x координат точек конфеты</param> /// <param name="Y">Массив y координат точек конфеты</param> /// <param name="formTotalLength">Общая длина конфетной формы</param> /// <param name="formTotalWidth">Общая ширина конфетной формы</param> /// <param name="candySettings">Параметры конфетной формы</param> private void InitRectCandyPoints(ref double[] X, ref double[] Y, double formTotalLength, double formTotalWidth, CandySettings candySettings) { X = new double[] { (-formTotalLength / 2) + candySettings.FormDepthByLength, (-formTotalLength / 2) + candySettings.FormDepthByLength, (-formTotalLength / 2) + candySettings.FormDepthByLength + Width, (-formTotalLength / 2) + candySettings.FormDepthByLength + Width, (-formTotalLength / 2) + candySettings.FormDepthByLength }; Y = new double[] { (-formTotalWidth / 2) + candySettings.FormDepthByWidth, (-formTotalWidth / 2) + candySettings.FormDepthByWidth + Length, (-formTotalWidth / 2) + candySettings.FormDepthByWidth + Length, (-formTotalWidth / 2) + candySettings.FormDepthByWidth, (-formTotalWidth / 2) + candySettings.FormDepthByWidth }; }
/// <summary> /// Построение выреза прямоугольной конфеты /// </summary> /// <param name="part">Компонент сборки</param> /// <param name="planeFormSurface">Плоскость поверхности формы</param> /// <param name="candySettings">Параметры конфетной формы</param> /// <param name="formTotalLength">Общая длина конфетной формы</param> /// <param name="formTotalWidth">Общая ширина конфетной формы</param> public override void Build(ksPart part, ksEntity planeFormSurface, CandySettings candySettings, double formTotalLength, double formTotalWidth) { // Создание и настройка эскиза // на поверхности формы (смещенной плоскости) ksEntity formSurfaceSketch = part.NewEntity((short)Obj3dType.o3d_sketch); ksSketchDefinition formSurfaceSketchDefinition = formSurfaceSketch.GetDefinition(); formSurfaceSketchDefinition.SetPlane(planeFormSurface); formSurfaceSketch.Create(); // Входим в режим редактирования эскиза ksDocument2D formSurfaceDocument2D = formSurfaceSketchDefinition.BeginEdit(); // Расчитаем положение первой конфеты // Положение других конфет расчитаем путем сдвига первой double[] rectCandyXPoints = new double[] { 0, 0, 0, 0, 0 }; double[] rectCandyYPoints = new double[] { 0, 0, 0, 0, 0 }; InitRectCandyPoints(ref rectCandyXPoints, ref rectCandyYPoints, formTotalLength, formTotalWidth, candySettings); // Рисуем прямоугольные конфеты for (int i = 0; i < candySettings.CandyCount / 2; ++i) { for (int j = 0; j < 2; ++j) { DrawRect(rectCandyXPoints, rectCandyYPoints, formSurfaceDocument2D); rectCandyYPoints = GetShiftedArray(rectCandyYPoints, Length + candySettings.FormDepthByWidth); } rectCandyYPoints = GetShiftedArray(rectCandyYPoints, -2 * (Length + candySettings.FormDepthByWidth)); rectCandyXPoints = GetShiftedArray(rectCandyXPoints, Width + candySettings.FormDepthByLength); } // Выходим из режима редактирования эскиза formSurfaceSketchDefinition.EndEdit(); // Вырезаем прямоугольные конфетки ^_^ CutExtrude(part, formSurfaceSketch, Height); }
/// <summary> /// Построение выреза цилиндрической конфеты /// </summary> /// <param name="part">Компонент сборки</param> /// <param name="planeFormSurface">Плоскость поверхности формы</param> /// <param name="candySettings">Параметры конфетной формы</param> /// <param name="formTotalLength">Общая длина конфетной формы</param> /// <param name="formTotalWidth">Общая ширина конфетной формы</param> public override void Build(ksPart part, ksEntity planeFormSurface, CandySettings candySettings, double formTotalLength, double formTotalWidth) { double[] cylinderCandyXPoints = new double[] { 0, 0, 0, 0, 0 }; double[] cylinderCandyYPoints = new double[] { 0, 0, 0, 0, 0 }; InitCylinderCandyPoints(ref cylinderCandyXPoints, ref cylinderCandyYPoints, formTotalLength, formTotalWidth, candySettings); for (int i = 0; i < candySettings.CandyCount / 2; ++i) { for (int j = 0; j < 2; ++j) { // Создание и настройка эскиза на // поверхности формы (смещенной плоскости) ksEntity formSurfaceSketch = part.NewEntity((short)Obj3dType.o3d_sketch); ksSketchDefinition formSurfaceSketchDefinition = formSurfaceSketch.GetDefinition(); formSurfaceSketchDefinition.SetPlane(planeFormSurface); formSurfaceSketch.Create(); // Входим в режим редактирования эскиза ksDocument2D formSurfaceDocument2D = (ksDocument2D)formSurfaceSketchDefinition.BeginEdit(); DrawRect(cylinderCandyXPoints, cylinderCandyYPoints, formSurfaceDocument2D, 0); // Выходим из режима редактирования эскиза formSurfaceSketchDefinition.EndEdit(); CutRotated(part, formSurfaceSketch); cylinderCandyYPoints = GetShiftedArray(cylinderCandyYPoints, Length + candySettings.FormDepthByWidth); } cylinderCandyYPoints = GetShiftedArray(cylinderCandyYPoints, -2 * (Length + candySettings.FormDepthByWidth)); cylinderCandyXPoints = GetShiftedArray(cylinderCandyXPoints, Width + candySettings.FormDepthByLength); } }
/// <summary> /// Построение выреза сферической конфеты /// </summary> /// <param name="part">Компонент сборки</param> /// <param name="planeFormSurface">Плоскость поверхности формы</param> /// <param name="candySettings">Параметры конфетной формы</param> /// <param name="formTotalLength">Общая длина конфетной формы</param> /// <param name="formTotalWidth">Общая ширина конфетной формы</param> public override void Build(ksPart part, ksEntity planeFormSurface, CandySettings candySettings, double formTotalLength, double formTotalWidth) { double x = -formTotalLength / 2 + candySettings.FormDepthByLength + Height; double y = -formTotalWidth / 2 + candySettings.FormDepthByWidth + Height; for (int i = 0; i < candySettings.CandyCount / 2; ++i) { for (int j = 0; j < 2; ++j) { // Создание и настройка эскиза // на поверхности формы (смещенной плоскости) ksEntity formSurfaceSketch = part.NewEntity((short)Obj3dType.o3d_sketch); ksSketchDefinition formSurfaceSketchDefinition = formSurfaceSketch.GetDefinition(); formSurfaceSketchDefinition.SetPlane(planeFormSurface); formSurfaceSketch.Create(); // Входим в режим редактирования эскиза ksDocument2D formSurfaceDocument2D = (ksDocument2D)formSurfaceSketchDefinition.BeginEdit(); formSurfaceDocument2D.ksArcByAngle(x, y, Height, 0, 180, 1, 1); formSurfaceDocument2D.ksLineSeg(-Height + x, 0 + y, Height + x, 0 + y, 3); // Выходим из режима редактирования эскиза formSurfaceSketchDefinition.EndEdit(); CutRotated(part, formSurfaceSketch); y += Length + candySettings.FormDepthByWidth; } y -= 2 * (Length + candySettings.FormDepthByWidth); x += Width + candySettings.FormDepthByLength; } }
/// <summary> /// Построить конфетную форму в KOMPAS /// </summary> /// <param name="candySettings">Параметры конфетной формы</param> /// <param name="candy">Параметры конфеты</param> public void BuildCandySettings(CandySettings candySettings, CandyBase candy) { if (_kompas == null) { throw new Exception( "Невозможно построить деталь. Нет связи с КОМПАС 3D."); } // Рисуем форму double formTotalLength = candySettings.FormDepthByLength + (candySettings.FormDepthByLength * candySettings.CandyCount / 2) + (candy.Width * candySettings.CandyCount / 2); double formTotalWidth = (candySettings.FormDepthByWidth * 3) + (candy.Length * 2); double[] formXPoints = new double[] { 0, 0, 0, 0, 0 }; double[] formYPoints = new double[] { 0, 0, 0, 0, 0 }; InitCandySettingsPoints(ref formXPoints, ref formYPoints, formTotalLength, formTotalWidth); // Создание документа в компасе ksDocument3D document3D = _kompas.Document3D(); document3D.Create(); // Получение компонента сборки и базовой плоскости XOY ksPart part = document3D.GetPart((short)Part_Type.pTop_Part); ksEntity planeXOY = part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); // Создание и настройка эскиза ksEntity formSketch = part.NewEntity((short)Obj3dType.o3d_sketch); ksSketchDefinition sketchDefinition = formSketch.GetDefinition(); sketchDefinition.SetPlane(planeXOY); formSketch.Create(); // Входим в режим редактирования эскиза ksDocument2D document2D = sketchDefinition.BeginEdit(); // Соединение точек формы отрезками CandyBase.DrawRect(formXPoints, formYPoints, document2D); // Выходим из режима редактирования эскиза sketchDefinition.EndEdit(); // Выдавливание формы CandySettingsExtrude(part, formSketch, candy.Height + candySettings.FormDepthByHeight); // Создание смещенной плоскости на поверхности формы ksEntity planeFormSurface = CreateShiftedPlane(part, planeXOY, (candy.Height + candySettings.FormDepthByHeight) / 2); candy.Build(part, planeFormSurface, candySettings, formTotalLength, formTotalWidth); }
/// <summary> /// Построение выреза конфеты /// </summary> /// <param name="part">Компонент сборки</param> /// <param name="planeFormSurface">Плоскость поверхности формы</param> /// <param name="candySettings">Параметры конфетной формы</param> /// <param name="formTotalLength">Общая длина конфетной формы</param> /// <param name="formTotalWidth">Общая ширина конфетной формы</param> public abstract void Build(ksPart part, ksEntity planeFormSurface, CandySettings candySettings, double formTotalLength, double formTotalWidth);