//returns the value found in the table - KFactorValue private static double GetKFactorValue(UnfoldSheetProfileConfig aSpConfig) { double rez = 0; if (aSpConfig.UnfoldingMethod == UnfoldingMethod.KFactor) { rez = aSpConfig.KFactorValue; } if (rez < 0) { MessageBox.Show("Incorrect K-factor Exception ! ", "IO ERROR"); } return(rez); }
//calculated using GetKFactorValue OR GetBendDeductionValue - depending radioButtons in aSPConfig private static double GetBendAllowance(double aThickness, double aInternalRadius, double aBendDegree, UnfoldSheetProfileConfig aSpConfig) { double ba; var beta = Math.Abs(Math.PI - aBendDegree * Math.PI / 180); //further to 180 degrees (angle of the arc) in radians if (aSpConfig.UnfoldingMethod == UnfoldingMethod.BendDeduction) { var status = 1; var bd = GetBendDeductionValue(aSpConfig.BendDeductionTableFile, aBendDegree, aThickness, ref status); ba = 2 * (aInternalRadius + aThickness) * Math.Tan(beta / 2) - Math.Abs(bd); ba *= status; string errMsg; if (Math.Abs(bd) < 0.000000001) { errMsg = "Angle = " + aBendDegree + " degree \n Incorrect Bend Deduction Value in Table = 0"; Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(errMsg); } if (ba <= 0) { errMsg = "Angle = " + aBendDegree + " degree \n Incorrect Bend Allowance = " + ba + "\n\n Must be greater than zero !"; Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(errMsg); } } else { var k = GetKFactorValue(aSpConfig); ba = (k * aThickness + aInternalRadius) * beta; } return(ba); }
public static void Draw2DUnfolding(UnfoldSheetProfileConfig aU2DConfig) { /* #region Try to load bend deductions * if (aU2DConfig.UnfoldingMethod == UnfoldingMethod.BendDeduction) * { * BDeductions = new BendDeduction(aU2DConfig.BendDeductionTableFile); * } * else if (aU2DConfig.UnfoldingMethod == UnfoldingMethod.KFactor) * { * throw new System.Exception("Not implemented"); * } * else if (aU2DConfig.UnfoldingMethod == UnfoldingMethod.BendAllowence) * { * throw new System.Exception("Not implemented"); * } #endregion*/ var angArr = new ArrayList(); var angArrP = new ArrayList(); #region find points of unfolding and adding to an array var off = -1; _unfoldPoints.Add(_cPickPoint); using (_basePolyLine = (Polyline)_polylineId.Open(OpenMode.ForRead)) for (var j = 1; j < _basePolyLine.NumberOfVertices >> 1; j++) { if (_num1 + j > _basePolyLine.NumberOfVertices - 1) { off++; } var i = off < 0 ? _num1 + j : off; var seg = _basePolyLine.GetLineSegment2dAt(i); if (Math.Abs(_basePolyLine.GetBulgeAt(i)) < 0.0000000001) { var c = new Complex(((Complex)_unfoldPoints[_unfoldPoints.Count - 1]).real() + seg.Length, ((Complex)_unfoldPoints[_unfoldPoints.Count - 1]).imag()); _unfoldPoints.Add(c); } else { var bAllowance = 0.0; var seg1 = _basePolyLine.GetLineSegment2dAt(GetParalellArc(i, ref bAllowance)); //namira hordata na drugata daga var cS = new Complex(seg.StartPoint.X, seg.StartPoint.Y); //start 1 daga var cE = new Complex(seg.EndPoint.X, seg.EndPoint.Y); //end 1 daga var cS1 = new Complex(seg1.StartPoint.X, seg1.StartPoint.Y); // start 2 daga var cE1 = new Complex(seg1.EndPoint.X, seg1.EndPoint.Y); // end 2 daga var c = cS - cE1; // na4alo na dygov segment (hordite sa v obratni posoki) var c1 = cE - cS1; // krai na dygov segment (hordite sa v obratni posoki) var ang = Math.Abs(c.arg() - c1.arg()); //ang betwen endmost lines (c,c1) var iR1 = seg.Length / 2 / Math.Sin(ang / 2); //radius do daga 1 var iR2 = seg1.Length / 2 / Math.Sin(ang / 2); // radius do daga 2 var iR = iR1 < iR2 ? iR1 : iR2; // Internal is the smaller ang = Math.Abs(Math.PI - ang); // angle between segments is supplementary to 180 ang = ang * 180 / Math.PI; // to degree Settings.Default.U2D_InternalRadius = (decimal)iR; bAllowance = GetBendAllowance(aU2DConfig.Thickness, iR, ang, aU2DConfig); //dylgina na dygata if (bAllowance < 0) { return; } angArr.Add(ang); angArrP.Add(bAllowance / 2 + 1.5); var cc = new Complex(((Complex)_unfoldPoints[_unfoldPoints.Count - 1]).real() + bAllowance, ((Complex)_unfoldPoints[_unfoldPoints.Count - 1]).imag()); _unfoldPoints.Add(cc); } } #endregion #region drawing unfold using (var acTrans = _db.TransactionManager.StartTransaction()) { for (var i = 1; i < _unfoldPoints.Count - 1; i++) { var l = new Line( new Point3d(((Complex)_unfoldPoints[i]).real(), ((Complex)_unfoldPoints[i]).imag(), 0), new Point3d(((Complex)_unfoldPoints[i]).real(), ((Complex)_unfoldPoints[i]).imag() + aU2DConfig.Thickness, 0)); l.TransformBy(_ed.CurrentUserCoordinateSystem); //? Draw(l, acTrans); _entityTemp.Add(l.ObjectId); } var acBlkTbl = (BlockTable)acTrans.GetObject(_db.BlockTableId, OpenMode.ForRead); var acBlkTblRec = (BlockTableRecord)acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite); var acPoly = new Polyline(); acPoly.SetDatabaseDefaults(); acPoly.AddVertexAt(0, new Point2d(((Complex)_unfoldPoints[0]).real(), ((Complex)_unfoldPoints[0]).imag()), 0, 0, 0); acPoly.AddVertexAt(0, new Point2d(((Complex)_unfoldPoints[_unfoldPoints.Count - 1]).real(), ((Complex)_unfoldPoints[_unfoldPoints.Count - 1]).imag()), 0, 0, 0); acPoly.AddVertexAt(0, new Point2d(((Complex)_unfoldPoints[_unfoldPoints.Count - 1]).real(), ((Complex)_unfoldPoints[_unfoldPoints.Count - 1]).imag() + aU2DConfig.Thickness), 0, 0, 0); acPoly.AddVertexAt(0, new Point2d(((Complex)_unfoldPoints[0]).real(), ((Complex)_unfoldPoints[0]).imag() + aU2DConfig.Thickness), 0, 0, 0); acBlkTblRec.AppendEntity(acPoly); acTrans.AddNewlyCreatedDBObject(acPoly, true); acPoly.Closed = true; acPoly.TransformBy(_ed.CurrentUserCoordinateSystem); //? _entityTemp.Add(acPoly.ObjectId); acTrans.Commit(); } #endregion #region drawing dimensions using (var acTrans = _db.TransactionManager.StartTransaction()) { if (aU2DConfig.DrawDimensions) { var ccc = new Complex(0, aU2DConfig.Thickness); var cccc = new Complex(0, aU2DConfig.Thickness + 16); for (var i = 1; i < _unfoldPoints.Count; i++) { var td = AddDim( (Complex)_unfoldPoints[i - 1], (Complex)_unfoldPoints[i], aU2DConfig.DrawCoating ? -aU2DConfig.Thickness - 8 : -8, aU2DConfig.DimensionsLayer, aU2DConfig.DimensionsColor, aU2DConfig.DimensionStyle, acTrans); td = (AlignedDimension)acTrans.GetObject(td.Id, OpenMode.ForWrite); td.TransformBy(_ed.CurrentUserCoordinateSystem); //? _entityTemp.Add(td.ObjectId); i++; } for (var i = 2; i < _unfoldPoints.Count; i++) { var td = AddDim( (Complex)_unfoldPoints[i - 1] + ccc, (Complex)_unfoldPoints[i] + ccc, aU2DConfig.DrawCoating ? aU2DConfig.Thickness + 8 : 8, aU2DConfig.DimensionsLayer, aU2DConfig.DimensionsColor, aU2DConfig.DimensionStyle, acTrans); td = (AlignedDimension)acTrans.GetObject(td.Id, OpenMode.ForWrite); td.TransformBy(_ed.CurrentUserCoordinateSystem); //? _entityTemp.Add(td.ObjectId); i++; } var tdd = AddDim( (Complex)_unfoldPoints[0] + cccc, (Complex)_unfoldPoints[_unfoldPoints.Count - 1] + cccc, aU2DConfig.DrawCoating ? aU2DConfig.Thickness + 8 : 8, aU2DConfig.DimensionsLayer, aU2DConfig.DimensionsColor, aU2DConfig.DimensionStyle, acTrans); tdd = (AlignedDimension)acTrans.GetObject(tdd.Id, OpenMode.ForWrite); tdd.TransformBy(_ed.CurrentUserCoordinateSystem); //? _entityTemp.Add(tdd.ObjectId); var ccccc = (Complex)_unfoldPoints[0]; for (var i = 2; i < _unfoldPoints.Count; i++) { var mid = ((Complex)_unfoldPoints[i] + (Complex)_unfoldPoints[i - 1]) / 2; var tddd = AddDim( ccccc, mid, aU2DConfig.DrawCoating ? 2 * aU2DConfig.Thickness + 16 : aU2DConfig.Thickness + 16, aU2DConfig.DimensionsLayer, aU2DConfig.DimensionsColor, aU2DConfig.DimensionStyle, acTrans); tddd = (AlignedDimension)acTrans.GetObject(tddd.Id, OpenMode.ForWrite); tddd.TransformBy(_ed.CurrentUserCoordinateSystem); //? _entityTemp.Add(tddd.ObjectId); ccccc = mid; // var acText = new DBText { Position = new Point3d(((Complex)_unfoldPoints[i]).real() - (double)angArrP[0], ((Complex)_unfoldPoints[i]).imag() + (aU2DConfig.DrawCoating ? -2 * aU2DConfig.Thickness - 10 : -aU2DConfig.Thickness - 10), 0), Height = 3, Rotation = -Math.PI / 2, TextString = ((double)angArr[0]).ToString("f3") + "%%d" }; angArr.RemoveAt(0); angArrP.RemoveAt(0); acText.TransformBy(_ed.CurrentUserCoordinateSystem); //? Draw(acText, acTrans); _entityTemp.Add(acText.ObjectId); // i++; } var tdod = AddDim( ccccc, (Complex)_unfoldPoints[_unfoldPoints.Count - 1], aU2DConfig.DrawCoating ? 2 * aU2DConfig.Thickness + 16 : aU2DConfig.Thickness + 16, aU2DConfig.DimensionsLayer, aU2DConfig.DimensionsColor, aU2DConfig.DimensionStyle, acTrans); tdod = (AlignedDimension)acTrans.GetObject(tdod.Id, OpenMode.ForWrite); tdod.TransformBy(_ed.CurrentUserCoordinateSystem); //? _entityTemp.Add(tdod.ObjectId); //debelina var tdrd = AddDim( (Complex)_unfoldPoints[0], (Complex)_unfoldPoints[0] + ccc, 10, aU2DConfig.DimensionsLayer, aU2DConfig.DimensionsColor, aU2DConfig.DimensionStyle, acTrans); tdrd = (AlignedDimension)acTrans.GetObject(tdrd.Id, OpenMode.ForWrite); tdrd.TransformBy(_ed.CurrentUserCoordinateSystem); //? _entityTemp.Add(tdrd.ObjectId); } acTrans.Commit(); } #endregion #region drawing coating if (aU2DConfig.DrawCoating) { using (var acTrans = _db.TransactionManager.StartTransaction()) { var ccc = new Complex(0, aU2DConfig.Thickness); if ((aU2DConfig.CoatingSide == SheetProfile.CoatingSide.Left) || (aU2DConfig.CoatingSide == SheetProfile.CoatingSide.Both)) { var l = new Line( new Point3d(((Complex)_unfoldPoints[0] - ccc).real(), ((Complex)_unfoldPoints[0] - ccc).imag(), 0), new Point3d(((Complex)_unfoldPoints[_unfoldPoints.Count - 1] - ccc).real(), ((Complex)_unfoldPoints[_unfoldPoints.Count - 1] - ccc).imag(), 0)); l.TransformBy(_ed.CurrentUserCoordinateSystem); //? Draw(l, aU2DConfig.CoatingColor, aU2DConfig.CoatingLayer, acTrans); _entityTemp.Add(l.ObjectId); } if ((aU2DConfig.CoatingSide == SheetProfile.CoatingSide.Right) || (aU2DConfig.CoatingSide == SheetProfile.CoatingSide.Both)) { var ll = new Line( new Point3d(((Complex)_unfoldPoints[0] + ccc * 2.0).real(), ((Complex)_unfoldPoints[0] + ccc * 2.0).imag(), 0), new Point3d(((Complex)_unfoldPoints[_unfoldPoints.Count - 1] + ccc * 2.0).real(), ((Complex)_unfoldPoints[_unfoldPoints.Count - 1] + ccc * 2.0).imag(), 0)); ll.TransformBy(_ed.CurrentUserCoordinateSystem); //? Draw(ll, aU2DConfig.CoatingColor, aU2DConfig.CoatingLayer, acTrans); _entityTemp.Add(ll.ObjectId); } acTrans.Commit(); } } #endregion _ed.Regen(); }