public static BCOM.Point3d getMiddlePoint(BCOM.Point3d first, BCOM.Point3d second) { BCOM.Vector3d vec = App.Vector3dSubtractPoint3dPoint3d(second, first); return(App.Point3dAddScaledVector3d(first, vec, 0.5)); }
public static BCOM.LineElement getElementRangeBox(BCOM.Element el) { BCOM.View view = ViewHelper.getActiveView(); BCOM.Point3d[] verts = new BCOM.Point3d[16]; verts[0] = el.Range.Low; verts[1] = verts[0]; verts[1].X = el.Range.High.X; verts[2] = verts[1]; verts[2].Y = el.Range.High.Y; verts[3] = verts[2]; verts[3].X = el.Range.Low.X; verts[4] = verts[5] = verts[0]; verts[5].Z = el.Range.High.Z; verts[6] = verts[5]; verts[6].Y = el.Range.High.Y; verts[7] = verts[6]; verts[7].X = el.Range.High.X; verts[8] = verts[7]; verts[8].Y = el.Range.Low.Y; verts[9] = verts[5]; verts[10] = verts[6]; verts[11] = verts[3]; verts[12] = verts[2]; verts[13] = verts[7]; verts[14] = verts[8]; verts[15] = verts[1]; return(App.CreateLineElement1(null, verts)); }
private void init(BCOM.Element element, Sp3dTask_Old task) { elemRef = element.MdlElementRef(); modelRef = element.ModelReference.MdlModelRefP(); elemId = element.ID; Oid = task.pipe.Oid; if (task.pipe == null || task.component == null) { ErrorText = "Не удалось прочитать данные задания"; return; } Code = task.pipe.Name; BCOM.Point3d pt = new BCOM.Point3d(); pt.X = task.pipe.LocationX; pt.Y = task.pipe.LocationY; pt.Z = task.pipe.LocationZ; Location = pt; // разбор типоразмера: try { string[] parameters = task.pipe.Description.TrimStart('T').Split('-'); Diametr = int.Parse(parameters[1]); } catch (Exception) { ErrorText = string.Format("Не удалость разобрать типоразмер \"{0}\"", task.pipe.Description); } }
public static bool IsPlanesAreParallel(BCOM.Plane3d first, BCOM.Plane3d second) { BCOM.Point3d secondNegateNormal = App.Point3dNegate(ref second.Normal); return(App.Point3dAreVectorsParallel(first.Normal, second.Normal) || App.Point3dAreVectorsParallel(first.Normal, secondNegateNormal)); }
public void Test() { //try //{ // Stopwatch sw = new Stopwatch(); // sw.Start(); // StringBuilder sb = new StringBuilder(); // foreach (var pile in Piles) // { // PileLengthCalculation pilecalculation = new PileLengthCalculation(pile, 2000); // sb.Append(pile.PileCode + "," + Utilities.CellingWithInterval(pilecalculation.GetPileLengthByBearingCapacity(),0.5) + "\n"); // } // sw.Stop(); // File.WriteAllText(@"D:\Result.csv", sb.ToString()); // MessageBox.Show(sw.Elapsed.TotalSeconds.ToString()); // //MessageBox.Show(sb.ToString()); //} //catch (Exception e) //{ // MessageBox.Show(e.ToString()); //} BCOM.Application app = Program.COM_App; BCOM.Point3d o = app.Point3dZero(); BCOM.Matrix3d m = app.Matrix3dIdentity(); var text = app.CreateTextElement1(null, "text", ref o, ref m); BCOM.TextStyle ts = app.ActiveSettings.TextStyle; ts.Color = 2; text.let_TextStyle(ts); app.ActiveModelReference.AddElement(text); }
private PenetrVueTask(BCOM.Point3d location, long flangeType, int lengthCm) { initialize_(); rawLocation_ = location; this.FlangesType = flangeType; this.LengthCm = lengthCm; }
public override TFPerforatorList GetPerfoList() { double pipeOutsideDiam = PenInfo.pipeDiameterOutside / taskUOR.activeSubPerMaster; double length = Task.LengthCm * 10 / taskUOR.activeSubPerMaster; var angles = Task.CorrectiveAngles; BCOM.Transform3d taskTran = App.Transform3dFromMatrix3d(Task.Rotation); // ПЕРФОРАТОР BCOM.EllipseElement perfoEl = App.CreateEllipseElement2(null, App.Point3dZero(), pipeOutsideDiam / 2, pipeOutsideDiam / 2, App.Matrix3dIdentity(), BCOM.MsdFillMode.Filled); { BCOM.Point3d offset = App.Point3dAddScaled( App.Point3dZero(), App.Point3dFromXYZ(0, 0, 1), length / 2); perfoEl.Move(offset); perfoEl.Rotate(App.Point3dZero(), angles.X, angles.Y, angles.Z); } perfoEl.Level = ElementHelper.GetOrCreateLevel(PenConfigVariables.PerfoLevel); ElementHelper.setSymbologyByLevel(perfoEl); perfoEl.Transform(taskTran); perfoEl.Move(Task.Location); BCOM.Point3d perfoVec = perfoEl.Normal; TFCOM.TFPerforatorList perfoList = AppTF.CreateTFPerforator(); var tranIdentity = App.Transform3dIdentity(); perfoList.InitFromElement(perfoEl, perfoVec, length / 2 * 1.01, tranIdentity); return(perfoList); }
private BCOM.Point3d getLocation_(XDocument xdoc) { BCOM.Point3d pt = App.Point3dZero(); foreach (XElement tag in xdoc.Root.Elements()) { string tagName = tag.Name.LocalName; if (!tagName.IsMatch("(P3DEquipment)|(P3DHangerPipeSupport)")) { continue; } foreach (XElement node in tag.Elements()) { string name = node.Name.LocalName; if (name.IsMatch("Location")) { if (name.IsMatch("X$")) { pt.X = node.Value.ToDouble(); } else if (name.IsMatch("Y$")) { pt.Y = node.Value.ToDouble(); } else if (name.IsMatch("Z$")) { pt.Z = node.Value.ToDouble(); } } } } return(pt); }
BCOM.Element CreatePileCrossSectionElement(IPileProperty pileprop) { //double uorpermaster = app.ActiveModelReference.UORsPerMasterUnit; BCOM.Matrix3d m = app.Matrix3dIdentity(); BCOM.Point3d centroidp = pileprop.PileTopPoint.Point3dToBCOMPoint3d(1e4 / uorpermaster); centroidp.Z = 0; // xy平面 double pilediameter = pileprop.PileDiameter * 1e4 / uorpermaster; int colorindex = 3; if ((pileprop is SquarePileGeometry) || (pileprop is SquarePileGeometry)) { BCOM.Point3d[] squarvertexs = { app.Point3dFromXY(pilediameter / 2, pilediameter / 2), app.Point3dFromXY(-pilediameter / 2, pilediameter / 2), app.Point3dFromXY(-pilediameter / 2, -pilediameter / 2), app.Point3dFromXY(pilediameter / 2, -pilediameter / 2) }; BCOM.ShapeElement shape = app.CreateShapeElement1(null, ref squarvertexs, BCOM.MsdFillMode.NotFilled); shape.Move(ref centroidp); shape.Color = colorindex; return(shape); } else { var c = app.CreateEllipseElement2(null, ref centroidp, pilediameter / 2, pilediameter / 2, ref m, BCOM.MsdFillMode.NotFilled); c.Color = colorindex; return(c); } }
//posistion unit:m BCOM.LineElement[] CreateArrowElement(Point3d position, IPileProperty pileprop) { //double uorpermaster = app.ActiveModelReference.UORsPerMasterUnit; BCOM.Point3d centroidp = position.Point3dToBCOMPoint3d(1e4 / uorpermaster); centroidp.Z = 0; // 平面 BG.DVector3d linevector = new BG.DVector3d(pileprop.PileTopPoint.Point3dToDPoint3d(), pileprop.PileBottomPoint.Point3dToDPoint3d()); double xyrotationRad = linevector.AngleXY.Radians; double arrowbarlength = 5 * pileprop.PileDiameter * 1e4 / uorpermaster; BCOM.Point3d startp = app.Point3dZero(), endp = app.Point3dFromXY(arrowbarlength, 0); BCOM.LineElement bar = app.CreateLineElement2(null, ref startp, ref endp); BCOM.Point3d wingendp = app.Point3dFromXY(-arrowbarlength / 3, 0); var wing1 = app.CreateLineElement2(null, ref startp, ref wingendp); var wing2 = wing1.Clone().AsLineElement(); wing1.RotateAboutZ(ref startp, app.Radians(25)); wing2.RotateAboutZ(ref startp, app.Radians(-25)); wing1.Move(ref endp); wing2.Move(ref endp); var lineArray = new BCOM.LineElement[] { bar, wing1, wing2 }; foreach (var line in lineArray) { line.RotateAboutZ(ref startp, xyrotationRad); line.Move(ref centroidp); line.Color = 2; //line.LineWeight = 3; } return(lineArray); }
//position unit:m BCOM.TextElement CreatePilePositionText(Point3d p, string text) { BCOM.Point3d centroidp = p.Point3dToBCOMPoint3d(1e4 / uorpermaster); centroidp.Z = 0; // xy plane BCOM.Matrix3d m = app.Matrix3dIdentity(); BCOM.TextElement textele = app.CreateTextElement1(null, text, ref centroidp, ref m); return(textele); }
public static BCOM.Point3d roundExt(BCOM.Point3d pt, double snap) { BCOM.Point3d res; res.X = roundEx_(pt.X, snap); res.Y = roundEx_(pt.Y, snap); res.Z = roundEx_(pt.Z, snap); return(res); }
public static BCOM.Point3d shift(this BCOM.Point3d p3d, double dX = 0.0, double dY = 0.0, double dZ = 0.0) { BCOM.Point3d pt = App.Point3dZero(); pt.X = p3d.X + dX; pt.Y = p3d.Y + dY; pt.Z = p3d.Z + dZ; return(pt); }
public void LocateFilter(BCOM.Element element, ref BCOM.Point3d point, ref bool accepted) { accepted = false; if (element != null && element.IsPenetrationCell()) { accepted = true; startLeaderPrimitive(element); } }
private PenetrVueTask(Element element, Sp3dPenTask task) { if (task == null) { return; } initialize_(element); Oid = task.Oid; UID = task.UID; rawLocation_ = (!App.Point3dEqual(task.Location, App.Point3dZero())) ? task.Location : Cell.Origin; long activeModelRef = App.ActiveModelReference.MdlModelRefP(); if (ModelRef.IsAttachmentOf(App.ActiveModelReference)) { rawLocation_ = App.Point3dScale(rawLocation_, UOR.subPerMaster); } Rotation = task.Rotation; Code = task.Code; // разбор типоразмера: parseTypeSize(task.Name); if (task.XAttrDoc.Root.GetChild("P3DEquipment") != null) { TaskType = TaskTypeEnum.PipeEquipment; } else if (task.XAttrDoc.Root.GetChild("P3DHangerPipeSupport") != null && task.XAttrDoc.Root.GetChild("P3DHangerStdComponent") != null) { TaskType = TaskTypeEnum.PipeOld; } else { TaskType = TaskTypeEnum.Pipe; } if (TaskType == TaskTypeEnum.Pipe) { findFlanges(); } else { findFlangesOld(); } scanInfo(); // важно в конце - после определения пересечений RefPoints[0] = Location; }
public MstnNodeData(long parID, long ID, BCOM.Point3d rmCoordinates, BCOM.Element nodeElement, BCOM.LineElement lineElement, string nodeName, string nodeDescr) { //ParentNodeID = 0;// ; this.ID = nodeElement.ID; this.nodeElement = nodeElement; //if (sourceElement.IsCellElement()) // //this in as LV transfomer //else // //it is a source shape, ellipse }
private void transformToBase(BCOM.Element element, BCOM.Point3d origin) { // инвертируем трансформацию: if (App.Matrix3dHasInverse(Rotation)) { BCOM.Transform3d tran = App.Transform3dFromMatrix3d(Rotation); element.Transform(App.Transform3dInverse(tran)); } var angles = CorrectiveAngles; element.Rotate(App.Point3dZero(), -angles.X, -angles.Y, -angles.Z); }
public void LocateFilter(BCOM.Element Element, ref BCOM.Point3d Point, ref bool Accepted) { if (Element.IsCellElement()) { if (Element.AsCellElement().Name == "Embankment" || Element.AsCellElement().Name == "RetainWall" || Element.AsCellElement().Name == "Pond" || Element.AsCellElement().Name == "Road" || Element.AsCellElement().Name == "OpenChannel" || Element.AsCellElement().Name == "Dike") { AddInMain.ComApp.ShowPrompt("GeoTag element selected, data point to accept."); Accepted = true; } } }
private void ensureLocateEnabled(ref BCOM.Point3d Point, BCOM.View View) { if (ensureLocateEnabledRequired_) { // ! unblock Locate ensureLocateEnabledRequired_ = false; app_.CommandState.StopDynamics(); app_.CommandState.LocateElement(ref Point, View, true); app_.CommandState.GetHitPath(); app_.CommandState.StartDynamics(); } }
public static DPoint3d closestPointOnSurf(DPoint3d point, ISurface surf, double tol) { Bentley.Interop.MicroStationDGN.Point3d cpRef = new Bentley.Interop.MicroStationDGN.Point3d(); cpRef.X = point.X; cpRef.Y = point.Y; cpRef.Z = point.Z; Bentley.Interop.MicroStationDGN.Point3d cp = new Bentley.Interop.MicroStationDGN.Point3d(); Bentley.Interop.MicroStationDGN.Point2d cp2d = new Bentley.Interop.MicroStationDGN.Point2d(); GeometryTools.BSplineSurfaceComputeMinimumDistance(ref cp, ref cp2d, ref cpRef, tol, surf.com_bsplineSurface); return new DPoint3d(cp.X, cp.Y, cp.Z); }
public static BCOM.ArcElement createCircle( double diameter, BCOM.Point3d?origin = null) { BCOM.Point3d center = origin.HasValue ? origin.Value : App.Point3dZero(); var rot = App.Matrix3dIdentity(); //return App.CreateEllipseElement2(null, origin, // diameter/2, diameter/2, rot, BCOM.MsdFillMode.NotFilled); return(App.CreateArcElement2(null, center, diameter / 2, diameter / 2, rot, 0, Math.PI * 2)); }
//WS: note: the drop command is uing MS built UI command, so always make sure element got selected first. private void btnDrop_Click(object sender, EventArgs e) { BCOM.CellElement oCel = null; BCOM.ElementEnumerator oEnum = AddInMain.ComApp.ActiveModelReference.GetSelectedElements(); BCOM.Element[] oEleSet = oEnum.BuildArrayFromContents(); if (oEleSet.Length != 1) { AddInMain.ComApp.CadInputQueue.SendCommand("CHOOSE NONE"); AddInMain.ComApp.CommandState.StartLocate(new DropTagCell()); } if (oEleSet.Length == 1) { if (oEleSet[0].IsCellElement()) { if (oEleSet[0].AsCellElement().Name == "Embankment" || oEleSet[0].AsCellElement().Name == "Dike" || oEleSet[0].AsCellElement().Name == "Pond" || oEleSet[0].AsCellElement().Name == "Road" || oEleSet[0].AsCellElement().Name == "OpenChannel" || oEleSet[0].AsCellElement().Name == "RetainWall") { oCel = oEleSet[0].AsCellElement(); oECAdaptor.DeleteInstancesOnElement(oCel, oCel.Name); //WS: delete the ECInstance first. //oECAdaptor.DeleteInstancesOnElement(oCel, "Tag"); BCOM.Point3d oPt = oCel.Origin; //WS: window pops up here AddInMain.ComApp.CadInputQueue.SendCommand("DROP ELEMENT"); AddInMain.ComApp.SetCExpressionValue("dropOptions.complex", -1, "DROP"); int iActiveViewNum = Commons.GetActiveViewIndex(); AddInMain.ComApp.CadInputQueue.SendDataPoint(ref oPt, iActiveViewNum); MessageBox.Show("Please re-select elements for old tag, and start Step 3."); btnSelect.Enabled = false; btnDrop.Enabled = false; btnEdit.Enabled = true; } else { AddInMain.ComApp.CadInputQueue.SendCommand("CHOOSE NONE"); AddInMain.ComApp.CommandState.StartLocate(new DropTagCell()); } } } }
private GroupByTaskModel() { penData_ = PenetrDataSource.Instance; TaskTable = new DataTable(); TaskTable.Columns.Add(FieldName.STATUS, typeof(string)); TaskTable.Columns.Add(PropKey.CODE, typeof(string)); TaskTable.Columns.Add(PropKey.NAME, typeof(string)); TaskTable.Columns.Add(FieldName.FLANGES, typeof(long)); TaskTable.Columns.Add(FieldName.DIAMETER, typeof(string)); TaskTable.Columns.Add(FieldName.LENGTH, typeof(int)); TaskTable.Columns.Add(FieldName.REF_POINT1, typeof(string)); TaskTable.Columns.Add(FieldName.REF_POINT2, typeof(string)); TaskTable.Columns.Add(FieldName.REF_POINT3, typeof(string)); foreach (Sp3dToDataGroupMapProperty item in Sp3dToDGMapping.Instance.Items) { if (item.Key == PropKey.CODE || item.Key == PropKey.NAME) { continue; } if (!string.IsNullOrEmpty(item.TargetXPath)) { TaskTable.Columns.Add(item.TargetName, typeof(string)); } } TaskTable.RowChanged += TaskTable_RowChanged; signOnNotify(NP.SelectionCount, NP.TaskSelection); BCOM.Point3d zero = App.Point3dZero(); BCOM.LineElement line = App.CreateLineElement2(null, zero, zero); line.Color = 255; selectionTranCon_ = App.CreateTransientElementContainer1( line, BCOM.MsdTransientFlags.DisplayFirst | BCOM.MsdTransientFlags.Overlay, BCOM.MsdViewMask.AllViews, BCOM.MsdDrawingMode.Temporary); previewTranCon_ = App.CreateTransientElementContainer1( line, BCOM.MsdTransientFlags.DisplayFirst | BCOM.MsdTransientFlags.Overlay | BCOM.MsdTransientFlags.Snappable | BCOM.MsdTransientFlags.IncludeInPlot, BCOM.MsdViewMask.AllViews, BCOM.MsdDrawingMode.Temporary); }
public void SetRefPoint(int index, string coords) { BCOM.Point3d?pointInfo = ElementHelper.GetPoint3d(coords); if (!pointInfo.HasValue) { RefPoints[index] = null; } else if (index < RefPoints.Length) { BCOM.Point3d pt = RoundTool.roundExt( pointInfo.Value, /* 5 мм */ 5 / UOR.activeSubPerMaster); RefPoints[index] = pt; } }
public static bool CreateDefpointsLevel(BCOM.Point3d startpoint) { //bool createDefpointsLevel_ = false; // ActiveSettings.Level = ActiveDesignFile.Levels("Defpoints") if (!(LevelExists("Defpoints"))) { BCOM.Point3d point; // Dim startpoint As BCOM.Point3d BCOM.Point3d point2; // Dim lngTemp As Long // Start a command Program.MSApp.CadInputQueue.SendCommand("LEVELMANAGER DIALOG TOGGLE"); Program.MSApp.CadInputQueue.SendCommand("LEVELMANAGER LEVEL NEWFROMGUI"); // Send a keyin that can be a command string Program.MSApp.CadInputQueue.SendKeyin("LEVEL SET NAME \"New Level (0)\" \"Defpoints\""); // Set a variable associated with a dialog box Program.MSApp.SetCExpressionValue("lvlmangrGlobals.wLevelName", "Defpoints", "LVLMANGR"); Program.MSApp.CadInputQueue.SendKeyin("LEVEL SET PLOT OFF \"Defpoints\""); point = startpoint; point2 = point; Program.MSApp.CadInputQueue.SendDragPoints(ref point, ref point2, 1); Program.MSApp.CadInputQueue.SendDataPoint(ref point, 1); Program.MSApp.CadInputQueue.SendDragPoints(ref point, ref point2, 1); Program.MSApp.CommandState.StartDefaultCommand(); } if (LevelExists("Defpoints")) { if (Program.MSApp.ActiveDesignFile.Levels["Defpoints"].Plot == true) { Program.MSApp.ActiveDesignFile.Levels["Defpoints"].Plot = false; } return(true); } return(false); }
BCOM.TextElement CreatePileSkewnessText(IPileProperty pileprop) { //double uorpermaster = app.ActiveModelReference.UORsPerMasterUnit; BCOM.Point3d centroidp = pileprop.PileTopPoint.Point3dToBCOMPoint3d(1e4 / uorpermaster); centroidp.Z = 0; // xy plane BCOM.Point3d zerop = app.Point3dZero(); BCOM.Point3d textelefirstpoisition = app.Point3dFromXY(pileprop.PileDiameter * 1e4 / uorpermaster, 0); BCOM.Matrix3d identitym = app.Matrix3dIdentity(); BCOM.TextElement textele = app.CreateTextElement1(null, Utilities.GetPileSkewnessString(pileprop.GetCosAlpha()), ref textelefirstpoisition, ref identitym); BG.DVector3d linevector = new BG.DVector3d(pileprop.PileTopPoint.Point3dToDPoint3d(), pileprop.PileBottomPoint.Point3dToDPoint3d()); double xyrotationRad = linevector.AngleXY.Radians; textele.RotateAboutZ(ref zerop, xyrotationRad); textele.Move(ref centroidp); return(textele); }
public MstnNodeData(long ID, BCOM.Point3d rmCoordinates, BCOM.Element nodeElement, BCOM.LineElement lineElement, string nodeName, string nodeDescr) { this.ParentNodeID = -1; this.ID = nodeElement.ID; this.nodeElement = nodeElement; this.nodeName = nodeName; this.nodeDescription = nodeDescr; this._reticMasterPt3D = rmCoordinates; this.conductor = lineElement; //if (nodeElement.IsCellElement()) // this in as LV transfomer // get MVLV cell in that position // assign the parent node ID to the mvlv cell id //else // it is a source shape, ellipse // ParentNodeID = 0; }
public void DataPoint(ref BCOM.Point3d Point, BCOM.View View) { PenetrUserTask userTask; if (!processInput(out userTask, ref Point, View)) { return; } PenetrInfo penInfo = PenetrDataSource.Instance.getPenInfo( userTask.FlangesType, userTask.DiameterType.Number); ElementHelper.RunByRecovertingSettings(() => { PenetrHelper.addToModel(userTask, penInfo); }); }
public static BCOM.LineElement createCrossInContour( BCOM.VertexList contour) { BCOM.Point3d[] shapeVerts = contour.GetVertices(); var shape = App.CreateShapeElement1(null, shapeVerts); BCOM.Point3d centroid = shape.Centroid(); var points = new List <BCOM.Point3d>(); foreach (BCOM.Point3d vert in shapeVerts) { points.Add(vert); points.Add(centroid); } return(App.CreateLineElement1(null, points.ToArray())); }
public BCOM.Point3d ReticMCoordinates(BCOM.Point3d flashOrigin) { BCOM.Point3d finalPoint3D;/// ;// xCoord, yCoord; if (this.nodeElement.IsCellElement()) { finalPoint3D.X = this.nodeElement.AsCellElement().Origin.X + flashOrigin.X; finalPoint3D.Y = this.nodeElement.AsCellElement().Origin.Y + flashOrigin.Y; finalPoint3D.Z = this.nodeElement.AsCellElement().Origin.Z;// ; } else { finalPoint3D.X = this.nodeElement.AsEllipseElement().CenterPoint.X + flashOrigin.X; finalPoint3D.Y = this.nodeElement.AsEllipseElement().CenterPoint.Y + flashOrigin.Y; finalPoint3D.Z = this.nodeElement.AsEllipseElement().CenterPoint.Z;// ; } return(finalPoint3D); }
public static DPoint3d closestPointOnSurf(DPoint3d point, ISurface surf, double tol, out double Dist, out Point2d UV, out DVector3d normal) { Bentley.Interop.MicroStationDGN.Point3d cpRef = new Bentley.Interop.MicroStationDGN.Point3d(); cpRef.X = point.X; cpRef.Y = point.Y; cpRef.Z = point.Z; Bentley.Interop.MicroStationDGN.Point3d cp = new Bentley.Interop.MicroStationDGN.Point3d(); Bentley.Interop.MicroStationDGN.Point2d cp2d = new Bentley.Interop.MicroStationDGN.Point2d(); Dist = GeometryTools.BSplineSurfaceComputeMinimumDistance(ref cp, ref cp2d, ref cpRef, tol, surf.com_bsplineSurface); UV = new Point2d(); UV.X = cp2d.X; UV.Y = cp2d.Y; normal = NormalAtUVParameterOnSurface(surf.com_bsplineSurface, UV.X, UV.Y); return new DPoint3d(cp.X, cp.Y, cp.Z); }
public static T transformByTask <T>(this T element, IPenetrTask task, double shiftX = 0.0, double shiftY = 0.0, double shiftZ = 0.0) where T : BCOM.Element { BCOM.Point3d shiftPoint = App.Point3dFromXYZ(shiftX, shiftY, shiftZ); element.Move(ref shiftPoint); BCOM.Point3d zero = App.Point3dZero(); var angles = task.CorrectiveAngles; element.Rotate(ref zero, angles.X, angles.Y, angles.Z); BCOM.Matrix3d rotation = task.Rotation; BCOM.Transform3d transform3d = App.Transform3dFromMatrix3d(ref rotation); element.Transform(ref transform3d); BCOM.Point3d location = task.Location; element.Move(ref location); return(element); }