Example #1
0
        //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);
        }
Example #2
0
        //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);
        }
Example #3
0
        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();
        }