// Создать вид private void DrawView() { ksViewParam par = (ksViewParam)kompas.GetParamStruct((short)StructType2DEnum.ko_ViewParam); if (par != null) { int number = 5; par.Init(); par.x = 10; par.y = 20; par.scale_ = 0.5; par.angle = 45; par.color = Color.FromArgb(10, 20, 10).ToArgb(); par.state = ldefin2d.stACTIVE; par.name = "User view"; reference v = doc.ksCreateSheetView(par, ref number); number = doc.ksGetViewNumber(v); string buf = string.Format("Создали вид: ref = {0}, number = {1}", v, number); kompas.ksMessage(buf); reference gr = doc.ksNewGroup(0); doc.ksLineSeg(20, 10, 20, 30, 1); doc.ksLineSeg(20, 30, 40, 30, 1); doc.ksLineSeg(40, 30, 40, 10, 1); doc.ksLineSeg(40, 10, 20, 10, 1); int res = doc.ksEndGroup(); doc.ksAddObjGroup(gr, v); kompas.ksMessage("Добавили вид в группу"); kompas.ksMessageBoxResult(); reference p = doc.ksLineSeg(10, 10, 30, 30, 0); doc.ksAddObjGroup(gr, p); kompas.ksMessage("Добавили элемент в группу"); kompas.ksMessageBoxResult(); doc.ksRotateObj(gr, 0, 0, -45); // Взять параметры вида par.Init(); doc.ksGetObjParam(v, par, ldefin2d.ALLPARAM); buf = string.Format("x = {0:.##}, y = {1:.##}, angl = {2:.##}, name = {3}, st = {4}", par.x, par.y, par.angle, par.name, par.state); kompas.ksMessage(buf); // Сделаем текущим системный вид (номер 0) doc.ksOpenView(0); // Состояние вида: только чтение ksLtVariant vart = (ksLtVariant)kompas.GetParamStruct((short)StructType2DEnum.ko_LtVariant); if (vart != null) { vart.Init(); vart.intVal = ldefin2d.stREADONLY; doc.ksSetObjParam(v, vart, ldefin2d.VIEW_LAYER_STATE); } } }
/// <summary> /// Нарисовать эскиз двух зеркальных блоков для фоторамки. /// </summary> /// <param name="photoFrame">Шаблон фоторамки.</param> /// <param name="draw">Документ эскиза.</param> /// <param name="offsetX">Смещение по OX для начальной точки.</param> /// <param name="offsetY">Смещение по OY для начальной точки.</param> /// <param name="dx">Расстояние между начальными точками по OX /// отрисовки брусков.</param> private void DrawSketchBlock(IPhotoFrame photoFrame, ksDocument2D draw, double offsetX, double offsetY, double dx) { var h1 = photoFrame.OuterHeight; var h2 = photoFrame.InnerHeight; var h = photoFrame.Interval; /* Блок для фоторамки представляет собой трапецию, * либо в частном случае квадрат. * B * |\h * | \ C * h1 | | h2 * | | * | / D * |/h * A */ //координаты для точки А var Ax = _startX - offsetX; var Ay = _startY - offsetY; //координаты для точки B var Bx = Ax; var By = Ay + h1; // var h3 = (h1 - h2) / 2; //координаты для точки D var Dx = Ax + h; var Dy = Ay + h3; //координаты для точки C var Cx = Dx; var Cy = Dy + h2; var groupRightId = draw.ksNewGroup(0); draw.ksLineSeg(Ax, Ay, Bx, By, 1); draw.ksLineSeg(Bx, By, Cx, Cy, 1); draw.ksLineSeg(Cx, Cy, Dx, Dy, 1); draw.ksLineSeg(Dx, Dy, Ax, Ay, 1); draw.ksEndObj(); //координаты для зеркального отображения блока Ax += dx / 2; Bx = Ax; //симметричное отображение трапеции (блока) draw.ksSymmetryObj(groupRightId, Ax, Ay, Bx, By, "1"); }