public quaternion[] IntersectWithPlane(plane pl) { quaternion[] z = pl.GetThreeBackPoints(); UCS ucs = new UCS(z[0], z[1], z[2]); quaternion q1 = ucs.ToACS(new quaternion()); quaternion q2 = ucs.ToACS(new quaternion(0, 1000, 0, 0)); quaternion q3 = ucs.ToACS(new quaternion(0, 0, 1000, 0)); quaternion q4 = ucs.ToACS(new quaternion(0, 1000, 1000, 0)); return(new quaternion[2] { this.IntersectWithVector(q1, q2), this.IntersectWithVector(q3, q4) }); }
public void CNC_bends(StreamWriter outf, WorkClasses.Node node, double L, double Lp, double Ls, double R, double toolR, double gabaritX, double gabaritY, double gabaritZ) { Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; quaternion tempNodeNormal = node.GetNodesNormalsByNoFictiveBends(ref container); using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable acBlkTbl; acBlkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord acBlkTblRec; acBlkTblRec = tr.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; UCS ucs = node.CreateNodeUCS(L, ref container); UCS Ucs = node.CreateNodeUCS(L + Lp + Ls, ref container); int counter = 0; for (int i = 0; i < node.Bends_Numers_Array.Count; i++) { WorkClasses.Bend b = container.Bends[node.Bends_Numers_Array[i]]; if (b.IsFictive()) { continue; } outf.WriteLine(String.Format("(BAR {0} - PRYT NOMER {1})", counter + 1, b.Numer + 1)); outf.WriteLine(); //--------------------- quaternion bendNormal = b.Normal - b.MidPoint; plane gabaritTOP = new plane(ucs.ToACS(new quaternion(0, 10, 0, gabaritZ / 2.0)), ucs.ToACS(new quaternion(0, 100, 0, gabaritZ / 2.0)), ucs.ToACS(new quaternion(0, 0, 10, gabaritZ / 2.0))); plane gabaritBottom = new plane(ucs.ToACS(new quaternion(0, 10, 0, -gabaritZ / 2.0)), ucs.ToACS(new quaternion(0, 100, 0, -gabaritZ / 2.0)), ucs.ToACS(new quaternion(0, 0, 10, -gabaritZ / 2.0))); quaternion Q1 = gabaritTOP.IntersectWithVector((b.MidPoint + b.Start) / 2.0, (b.MidPoint + b.Start) / 2.0 + bendNormal); quaternion Q2 = gabaritTOP.IntersectWithVector(b.MidPoint, b.Normal); Q1 = ucs.FromACS(Q1); Q2 = ucs.FromACS(Q2); complex cQ1 = new complex(Q1.GetX(), Q1.GetY()); complex cQ2 = new complex(Q2.GetX(), Q2.GetY()); matrix Int_Mat = Common.IntersectCircleAndLine(R, cQ1, cQ2); if (Int_Mat.GetAt(0, 4) < 0) /*ERRROR*/ return { ; } complex iP1 = new complex(Int_Mat.GetAt(0, 0), Int_Mat.GetAt(0, 1)); complex iP2 = new complex(Int_Mat.GetAt(0, 2), Int_Mat.GetAt(0, 3)); complex iP = ((cQ2 - iP1).abs() < (cQ2 - iP2).abs()) ? iP1 : iP2; quaternion iQ = ucs.ToACS(new quaternion(0.0, iP.real(), iP.imag(), gabaritZ / 2.0)); quaternion cenTOP = iQ;// gabaritTOP.IntersectWithVector(iQ, iQ + bendNormal); quaternion cenBottom = gabaritBottom.IntersectWithVector(iQ, iQ + bendNormal); Q2 = ucs.ToACS(Q2); quaternion outTOP = Q2 - iQ; quaternion inTOP = iQ - Q2; outTOP /= outTOP.abs(); inTOP /= inTOP.abs(); outTOP *= toolR; inTOP *= toolR; outTOP = iQ + outTOP; inTOP = iQ + inTOP; // MessageBox.Show(String.Format("{0},{1},{2}\n{3},{4},{5}\n{6},{7},{8}", //iQ.GetX(), iQ.GetY(), iQ.GetZ(), cenTOP.GetX(), cenTOP.GetY(), cenTOP.GetZ(), cenBottom.GetX(), cenBottom.GetY(), cenBottom.GetZ())); //-------------------------- double gabaritR = Math.Sqrt(gabaritX * gabaritX / 4.0 + gabaritY * gabaritY / 4.0); matrix gabaritMat = Common.IntersectCircleAndLine(gabaritR, cQ1, cQ2); complex gabaritP1 = new complex(gabaritMat.GetAt(0, 0), gabaritMat.GetAt(0, 1)); complex gabaritP2 = new complex(gabaritMat.GetAt(0, 2), gabaritMat.GetAt(0, 3)); complex gabaritP = ((cQ2 - gabaritP1).abs() < (cQ2 - gabaritP2).abs()) ? gabaritP1 : gabaritP2; quaternion gabaritQ = ucs.ToACS(new quaternion(0.0, gabaritP.real(), gabaritP.imag(), gabaritZ / 2.0)); //--------------------- bool bp = ((node.Position - b.Start).abs() < (node.Position - b.End).abs()) ? true : false;//kой край на реброто е във възела Pair <quaternion, quaternion> bendAxe = (bp == true) ? new Pair <quaternion, quaternion>(ucs.FromACS(b.Start), ucs.FromACS(b.End)) : new Pair <quaternion, quaternion>(ucs.FromACS(b.End), ucs.FromACS(b.Start)); Pair <quaternion, quaternion> pa = new Pair <quaternion, quaternion>(ucs.FromACS(b.MidPoint), ucs.FromACS(b.Normal)); quaternion ucsOriginDescriptor = new quaternion(); cenTOP = ucs.FromACS(cenTOP); cenBottom = ucs.FromACS(cenBottom); inTOP = ucs.FromACS(inTOP); outTOP = ucs.FromACS(outTOP); gabaritQ = ucs.FromACS(gabaritQ); // double test = Math.Sqrt(cenTOP.GetX() * cenTOP.GetX() + cenTOP.GetY() * cenTOP.GetY()); // MessageBox.Show(test.ToString()); double baseAng = 0.0; if (((b.Normal - b.MidPoint) / (tempNodeNormal - node.Position)).absV() < Constants.zero_dist) { outf.WriteLine(String.Format("#110={0:f4}(ALPHA-OS C)", 0.0)); outf.WriteLine(String.Format("#111 = {0:f4} (BETHA-OS B)", 0.0)); outf.WriteLine(String.Format("#112 = {0:f4} (DELTA X-G52 X)", 0.0)); outf.WriteLine(String.Format("#113 = {0:f4} (DELTA Z-G52 X)", 0.0)); Pair <complex, complex> benAxeXY = new Pair <complex, complex>( new complex(bendAxe.First.GetX(), bendAxe.First.GetY()), new complex(bendAxe.Second.GetX(), bendAxe.Second.GetY())); matrix Int_M = Common.IntersectCircleAndLine(R, benAxeXY.First, benAxeXY.Second); double baseAng2 = (benAxeXY.Second - benAxeXY.First).arg(); if (baseAng2 > Math.PI) { baseAng2 = baseAng2 - 2 * Math.PI; } outf.WriteLine(String.Format("#114 = {0:f4} (GAMMA R-G68)", baseAng2 * 180.0 / Math.PI)); outf.WriteLine(String.Format("#115 = {0:f4} (OBRABOTKA NAD Z=0)", gabaritZ / 2.0 + 5.0)); outf.WriteLine(String.Format("#116 = {0:f4} (OBRABOTKA POD Z=0)", -gabaritZ / 2.0 - 2.0)); } else { quaternion nB1 = ucs.FromACS(b.Normal); quaternion nB2 = ucs.FromACS(b.MidPoint); complex cN1 = new complex(nB1.GetX(), nB1.GetY()); complex cN2 = new complex(nB2.GetX(), nB2.GetY()); line2d projectTo_ucsXY_Line = new line2d(cN1, cN2); complex normalTo_projectTo_ucsXY_Line = new complex(projectTo_ucsXY_Line.A, projectTo_ucsXY_Line.B); normalTo_projectTo_ucsXY_Line /= normalTo_projectTo_ucsXY_Line.abs(); normalTo_projectTo_ucsXY_Line *= -1.0; baseAng = normalTo_projectTo_ucsXY_Line.arg(); if (baseAng > Math.PI) { baseAng = baseAng - 2 * Math.PI; } outf.WriteLine(String.Format("#110={0:f4}(ALPHA-OS C)", -((-baseAng + Math.PI / 2.0) * 180.0 / Math.PI))); pa.First.set_rotateAroundAxe(new quaternion(0, 0, 0, 100.0), -baseAng + Math.PI / 2.0); pa.Second.set_rotateAroundAxe(new quaternion(0, 0, 0, 100.0), -baseAng + Math.PI / 2.0); bendAxe.First.set_rotateAroundAxe(new quaternion(0, 0, 0, 100.0), -baseAng + Math.PI / 2.0); bendAxe.Second.set_rotateAroundAxe(new quaternion(0, 0, 0, 100.0), -baseAng + Math.PI / 2.0); ucsOriginDescriptor.set_rotateAroundAxe(new quaternion(0, 0, 0, 100.0), -baseAng + Math.PI / 2.0); cenTOP.set_rotateAroundAxe(new quaternion(0, 0, 0, 100.0), -baseAng + Math.PI / 2.0); cenBottom.set_rotateAroundAxe(new quaternion(0, 0, 0, 100.0), -baseAng + Math.PI / 2.0); inTOP.set_rotateAroundAxe(new quaternion(0, 0, 0, 100.0), -baseAng + Math.PI / 2.0); outTOP.set_rotateAroundAxe(new quaternion(0, 0, 0, 100.0), -baseAng + Math.PI / 2.0); gabaritQ.set_rotateAroundAxe(new quaternion(0, 0, 0, 100.0), -baseAng + Math.PI / 2.0); pa = new Pair <quaternion, quaternion>(ucs.ToACS(pa.First), ucs.ToACS(pa.Second)); bendAxe = new Pair <quaternion, quaternion>(ucs.ToACS(bendAxe.First), ucs.ToACS(bendAxe.Second)); ucsOriginDescriptor = ucs.ToACS(ucsOriginDescriptor); cenTOP = ucs.ToACS(cenTOP); cenBottom = ucs.ToACS(cenBottom); inTOP = ucs.ToACS(inTOP); outTOP = ucs.ToACS(outTOP); gabaritQ = ucs.ToACS(gabaritQ); pa = new Pair <quaternion, quaternion>(Ucs.FromACS(pa.First), Ucs.FromACS(pa.Second)); bendAxe = new Pair <quaternion, quaternion>(Ucs.FromACS(bendAxe.First), Ucs.FromACS(bendAxe.Second)); ucsOriginDescriptor = Ucs.FromACS(ucsOriginDescriptor); cenTOP = Ucs.FromACS(cenTOP); cenBottom = Ucs.FromACS(cenBottom); inTOP = Ucs.FromACS(inTOP); outTOP = Ucs.FromACS(outTOP); gabaritQ = Ucs.FromACS(gabaritQ); quaternion normal = (pa.Second - pa.First) * 1000.0; pa = new Pair <quaternion, quaternion>(pa.First, pa.First + normal); double k = (pa.Second.GetX() < pa.First.GetX()) ? 1.0 : -1.0; double ang = (pa.Second - pa.First).angTo(new quaternion(0, 0, 0, 100)); ang *= k; outf.WriteLine(String.Format("#111 = {0:f4} (BETHA-OS B)", ang * 180.0 / Math.PI)); pa.First.set_rotateAroundAxe(new quaternion(0, 0, 100.0, 0.0), ang); pa.Second.set_rotateAroundAxe(new quaternion(0, 0, 100.0, 0.0), ang); bendAxe.First.set_rotateAroundAxe(new quaternion(0, 0, 100.0, 0.0), ang); bendAxe.Second.set_rotateAroundAxe(new quaternion(0, 0, 100.0, 0.0), ang); ucsOriginDescriptor.set_rotateAroundAxe(new quaternion(0, 0, 100.0, 0.0), ang); cenTOP.set_rotateAroundAxe(new quaternion(0, 0, 100.0, 0.0), ang); cenBottom.set_rotateAroundAxe(new quaternion(0, 0, 100.0, 0.0), ang); inTOP.set_rotateAroundAxe(new quaternion(0, 0, 100.0, 0.0), ang); outTOP.set_rotateAroundAxe(new quaternion(0, 0, 100.0, 0.0), ang); gabaritQ.set_rotateAroundAxe(new quaternion(0, 0, 100.0, 0.0), ang); pa = new Pair <quaternion, quaternion>(Ucs.ToACS(pa.First), Ucs.ToACS(pa.Second)); bendAxe = new Pair <quaternion, quaternion>(Ucs.ToACS(bendAxe.First), Ucs.ToACS(bendAxe.Second)); ucsOriginDescriptor = Ucs.ToACS(ucsOriginDescriptor); cenTOP = Ucs.ToACS(cenTOP); cenBottom = Ucs.ToACS(cenBottom); inTOP = Ucs.ToACS(inTOP); outTOP = Ucs.ToACS(outTOP); gabaritQ = Ucs.ToACS(gabaritQ); pa = new Pair <quaternion, quaternion>(ucs.FromACS(pa.First), ucs.FromACS(pa.Second)); bendAxe = new Pair <quaternion, quaternion>(ucs.FromACS(bendAxe.First), ucs.FromACS(bendAxe.Second)); ucsOriginDescriptor = ucs.FromACS(ucsOriginDescriptor); cenTOP = ucs.FromACS(cenTOP); cenBottom = ucs.FromACS(cenBottom); inTOP = ucs.FromACS(inTOP); outTOP = ucs.FromACS(outTOP); gabaritQ = ucs.FromACS(gabaritQ); outf.WriteLine(String.Format("#112 = {0:f4} (DELTA X-G52 X)", ucsOriginDescriptor.GetX())); outf.WriteLine(String.Format("#113 = {0:f4} (DELTA Z-G52 X)", ucsOriginDescriptor.GetZ())); double backX = ucsOriginDescriptor.GetX(); double backZ = ucsOriginDescriptor.GetZ(); quaternion moveQ = new quaternion(0, -backX, 0.0, -backZ); pa = new Pair <quaternion, quaternion>(pa.First + moveQ, pa.Second + moveQ); bendAxe = new Pair <quaternion, quaternion>(bendAxe.First + moveQ, bendAxe.Second + moveQ); ucsOriginDescriptor += moveQ; cenTOP += moveQ; cenBottom += moveQ; inTOP += moveQ; outTOP += moveQ; gabaritQ += moveQ; Pair <complex, complex> benAxeXY = new Pair <complex, complex>( new complex(bendAxe.First.GetX(), bendAxe.First.GetY()), new complex(bendAxe.Second.GetX(), bendAxe.Second.GetY())); matrix Int_M = Common.IntersectCircleAndLine(R, benAxeXY.First, benAxeXY.Second); complex Int_P1 = new complex(Int_M.GetAt(0, 0), Int_M.GetAt(0, 1)); complex Int_P2 = new complex(Int_M.GetAt(0, 2), Int_M.GetAt(0, 3)); complex Int_P = ((benAxeXY.Second - Int_P1).abs() < (benAxeXY.Second - Int_P2).abs()) ? Int_P1 : Int_P2; double baseAng2 = (benAxeXY.Second - benAxeXY.First).arg(); if (baseAng2 > Math.PI) { baseAng2 = baseAng2 - 2 * Math.PI; } outf.WriteLine(String.Format("#114 = {0:f4} (GAMMA R-G68)", baseAng2 * 180.0 / Math.PI)); //---------------------- pa = new Pair <quaternion, quaternion>(ucs.ToACS(pa.First), ucs.ToACS(pa.Second)); bendAxe = new Pair <quaternion, quaternion>(ucs.ToACS(bendAxe.First), ucs.ToACS(bendAxe.Second)); ucsOriginDescriptor = ucs.ToACS(ucsOriginDescriptor); cenTOP = ucs.ToACS(cenTOP); cenBottom = ucs.ToACS(cenBottom); inTOP = ucs.ToACS(inTOP); outTOP = ucs.ToACS(outTOP); gabaritQ = ucs.ToACS(gabaritQ); quaternion gabaritB = gabaritQ + cenBottom - cenTOP; quaternion inBottom = inTOP + cenBottom - cenTOP; double positiveZ = (ucs.FromACS(gabaritQ).GetZ() > ucs.FromACS(inTOP).GetZ()) ? ucs.FromACS(gabaritQ).GetZ() + 5.0 : ucs.FromACS(inTOP).GetZ() + 5.0; double negativeZ = (ucs.FromACS(gabaritB).GetZ() < ucs.FromACS(inBottom).GetZ()) ? ucs.FromACS(gabaritB).GetZ() - 2.0 : ucs.FromACS(inBottom).GetZ() - 2.0; outf.WriteLine(String.Format("#115 = {0:f4} (OBRABOTKA NAD Z=0)", positiveZ)); outf.WriteLine(String.Format("#116 = {0:f4} (OBRABOTKA POD Z=0)", negativeZ)); #region draw test1 /* * Line LL = new Line((Point3d)pa.First, (Point3d)pa.Second); * LL.ColorIndex = 1; * acBlkTblRec.AppendEntity(LL); * tr.AddNewlyCreatedDBObject(LL, true); * * Line LLL = new Line((Point3d)inTOP, (Point3d)outTOP); * LLL.ColorIndex = 1; * acBlkTblRec.AppendEntity(LLL); * tr.AddNewlyCreatedDBObject(LLL, true); * * * Line LLLL = new Line((Point3d)cenTOP, (Point3d)cenBottom); * LLLL.ColorIndex = 1; * acBlkTblRec.AppendEntity(LLLL); * tr.AddNewlyCreatedDBObject(LLLL, true); * * Line LLLLL = new Line((Point3d)bendAxe.First, (Point3d)bendAxe.Second); * LLLLL.ColorIndex = 1; * acBlkTblRec.AppendEntity(LLLLL); * tr.AddNewlyCreatedDBObject(LLLLL, true); * * Line PP = new Line((Point3d)outTOP, (Point3d)gabaritQ); * PP.ColorIndex = 2; * acBlkTblRec.AppendEntity(PP); * tr.AddNewlyCreatedDBObject(PP, true); * * Line PPP = new Line((Point3d)gabaritB, (Point3d)gabaritQ); * PPP.ColorIndex = 2; * acBlkTblRec.AppendEntity(PPP); * tr.AddNewlyCreatedDBObject(PPP, true); * * Line PPPP = new Line((Point3d)inBottom, (Point3d)inTOP); * PPPP.ColorIndex = 2; * acBlkTblRec.AppendEntity(PPPP); * tr.AddNewlyCreatedDBObject(PPPP, true); */ #endregion } outf.WriteLine("G65P1401"); outf.WriteLine("M1"); outf.WriteLine(); counter++; } //outf.WriteLine(String.Format("G43{0}", G43H)); tr.Commit(); Application.DocumentManager.MdiActiveDocument.Editor.UpdateScreen(); }
public plane(plane pl) { D = pl.D; n = new quaternion(0.0, pl.n.imag()); bak = pl.bak; }
private ObjectId TrimPickUP(int nodeNumer, int TriangleNumer, double X, double angle) { //UtilityClasses.ConstantsAndSettings.DoubleGlass_h1 //UtilityClasses.ConstantsAndSettings.DoubleGlass_h2 //UtilityClasses.ConstantsAndSettings.Thickness_of_the_Glass #region basedata Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; ed.WriteMessage("\n"); ed.WriteMessage(angle.ToString()); var node = container.Nodes[nodeNumer]; Triangle TR = container.Triangles[TriangleNumer]; quaternion trNormal = TR.Normal.Second - TR.Normal.First; trNormal /= trNormal.abs(); plane trPlane = new plane(TR.Nodes.First, TR.Nodes.Second, TR.Nodes.Third); Point3dCollection pColl = new Point3dCollection(); IntegerCollection iCol1 = new IntegerCollection(); IntegerCollection iCol2 = new IntegerCollection(); using (Transaction tr = db.TransactionManager.StartTransaction()) { if ((TR.upSolidHandle.First >= 0) && (TR.upSolidHandle.Second != null)) { try { Solid3d upSolid = tr.GetObject(GlobalFunctions.GetObjectId(TR.upSolidHandle.Second), OpenMode.ForWrite) as Solid3d; upSolid.GetGripPoints(pColl, iCol1, iCol2); } catch { } } } Bend bend1 = container.Bends[TR.GetFirstBendNumer()]; Bend bend2 = container.Bends[TR.GetSecondBendNumer()]; Bend bend3 = container.Bends[TR.GetThirdBendNumer()]; #endregion List <Bend> bends = new List <Bend>(); if ((bend1.StartNodeNumer == nodeNumer) || (bend1.EndNodeNumer == nodeNumer)) { bends.Add(bend1); } if ((bend2.StartNodeNumer == nodeNumer) || (bend2.EndNodeNumer == nodeNumer)) { bends.Add(bend2); } if ((bend3.StartNodeNumer == nodeNumer) || (bend3.EndNodeNumer == nodeNumer)) { bends.Add(bend3); } if (bends.Count != 2) { MessageBox.Show("Only two Bends are connected at one point !", "E R R O R"); return(ObjectId.Null); } if (bends[0].IsFictive() || bends[1].IsFictive()) { return(ObjectId.Null); } quaternion Q0 = node.Position; quaternion Q1 = (bends[0].Start + bends[0].End) / 2.0; quaternion Q2 = (bends[1].Start + bends[1].End) / 2.0; // coorinat systems for plane points calculate Q1 = Q1 - Q0; Q1 /= Q1.abs(); Q1 *= X; Q1 = Q0 + Q1; Q2 = Q2 - Q0; Q2 /= Q2.abs(); Q2 *= X; Q2 = Q0 + Q2; UCS ucs = new UCS(Q0, (Q1 + Q2) / 2.0, Q2); ucs = new UCS(Q0, ucs.ToACS(new quaternion(0, 0, 100, 0)), ucs.ToACS(new quaternion(0, 100, 0, 0))); #region UP glass double dist = (node.Position - (quaternion)pColl[0]).abs(); quaternion pick = new quaternion(); foreach (Point3d p in pColl) { quaternion q = (quaternion)p; double z = (node.Position - q).abs(); if (z < dist) { dist = z; pick = new quaternion(0, p.X, p.Y, p.Z); } } pColl.Clear(); pColl.Dispose(); iCol1.Clear(); iCol1.Clear(); #endregion ucs.o = pick; Q1 = pick + Q1 - Q0; Q2 = pick + Q2 - Q0; Q0 = pick; // UtilityClasses.GlobalFunctions.DrawLine((Point3d)Q0, new Point3d(), 1); quaternion t1 = (Q2 - Q1) * 2.0; quaternion t2 = (Q1 - Q2) * 2.0; Q1 = Q1 + t2; Q2 = Q2 + t1; Matrix3d mat = new Matrix3d(ucs.GetAutoCAD_Matrix3d()); Q1 = ucs.FromACS(Q1); Q2 = ucs.FromACS(Q2); quaternion Q3 = new quaternion(0, Q1.GetX(), -Q1.GetY(), Q1.GetZ()); quaternion Q4 = new quaternion(0, Q2.GetX(), -Q2.GetY(), Q2.GetZ()); quaternion[] arr = { Q1, Q2, Q4, Q3, Q1 }; ObjectId obj = ObjectId.Null; using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable acBlkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord acBlkTblRec = tr.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; Polyline pol = GlobalFunctions.GetPoly(ref arr); //pol.TransformBy(Matrix3d.Displacement(new Point3d().GetVectorTo(new Point3d(0, 0, -100)))); //pol.TransformBy(mat); //acBlkTblRec.AppendEntity(pol); //tr.AddNewlyCreatedDBObject(pol, true); try { Solid3d sol = new Solid3d(); sol.CreateExtrudedSolid(pol, new Point3d(0, 0, 0).GetVectorTo(new Point3d(0, 0, 100)), new SweepOptions()); sol.TransformBy(Matrix3d.Displacement(new Point3d().GetVectorTo(new Point3d(0, 0, -50)))); sol.TransformBy(mat); acBlkTblRec.AppendEntity(sol); tr.AddNewlyCreatedDBObject(sol, true); obj = sol.ObjectId; } catch { } tr.Commit(); } /* * if (obj != ObjectId.Null) * { * using (Transaction tr = db.TransactionManager.StartTransaction()) * { * * Solid3d sol = tr.GetObject(obj, OpenMode.ForWrite) as Solid3d; * Solid3d ent = tr.GetObject(UtilityClasses.GlobalFunctions.GetObjectId(TR.lowSolidHandle.Second), OpenMode.ForWrite) as Solid3d; * ent.BooleanOperation(BooleanOperationType.BoolSubtract, sol); * * tr.Commit(); * } * }*/ // ed.WriteMessage("\n"); // ed.WriteMessage(ucs.FromACS(Q0).ToString()); // ed.WriteMessage("\n-----------------------------\n"); return(obj); }