Ejemplo n.º 1
0
        public override bool WorldDraw(
            Autodesk.AutoCAD.GraphicsInterface.Drawable drawable,
            Autodesk.AutoCAD.GraphicsInterface.WorldDraw wd)
        {
            base.WorldDraw(drawable, wd);

            Polyline pline = (Polyline)drawable;

            double length = pline.Length;

            #region Size label
            double  dist = length / 2;
            Point3d pt   = pline.GetPointAtDist(dist);
            int     dn   = PropertySetManager.ReadNonDefinedPropertySetInt(pline, "DriGasDimOgMat", "Dimension");
            string  mat  = PropertySetManager.ReadNonDefinedPropertySetString(pline, "DriGasDimOgMat", "Material");

            if (mat.IsNoE() && dn == 0)
            {
                return(true);
            }
            if (!mat.IsNoE())
            {
                mat = " " + mat;
            }

            string label = $"{dn}{mat}";

            if (
                pline.Layer == "GAS-ude af drift" ||
                pline.Layer == "GAS-ude af drift-2D"
                )
            {
                label += " UAD";
            }

            Vector3d deriv = pline.GetFirstDerivative(pt);
            deriv = deriv.GetNormal();

            Vector3d perp = deriv.GetPerpendicularVector();

            wd.Geometry.Text(
                pt + perp * labelOffset, Vector3d.ZAxis, deriv, label, true, style);
            //pt + perp * labelOffset, Vector3d.ZAxis, deriv, labelHeight, 1.0, 0.0, label);

            //wd.Geometry.Text(
            //    pt + perp * labelOffset, Vector3d.ZAxis, deriv, labelHeight, 1.0, 0.0, label);
            #endregion


            return(true);
        }
Ejemplo n.º 2
0
        public override bool WorldDraw(
            Autodesk.AutoCAD.GraphicsInterface.Drawable drawable,
            Autodesk.AutoCAD.GraphicsInterface.WorldDraw wd)
        {
            base.WorldDraw(drawable, wd);

            Polyline pline = (Polyline)drawable;

            double length         = pline.Length;
            int    numberOfLabels = (int)(length / labelDist);

            if (numberOfLabels == 0)
            {
                numberOfLabels = 1;
            }

            for (int i = 0; i < numberOfLabels + 1; i++)
            {
                #region Direction arrow
                if (numberOfLabels != 1 && i == 0)
                {
                    continue;
                }

                double dist = labelDist * i;
                if (numberOfLabels == 1)
                {
                    dist = length / 2;
                }
                Point3d pt = pline.GetPointAtDist(dist);

                Vector3d deriv = pline.GetFirstDerivative(pt);
                deriv = deriv.GetNormal();
                Vector3d perp = deriv.GetPerpendicularVector();

                Point3d p1 = pt - deriv.RotateBy(0.785398, Vector3d.ZAxis) * arrowSideL;
                Point3d p2 = pt - deriv.RotateBy(-0.785398, Vector3d.ZAxis) * arrowSideL;

                wd.Geometry.WorldLine(pt, p1);
                wd.Geometry.WorldLine(pt, p2);
                #endregion
            }

            #region Last tick
            {
                Point3d  pt    = pline.EndPoint;
                Vector3d deriv = pline.GetFirstDerivative(pt);
                deriv = deriv.GetNormal();
                Vector3d perp = deriv.GetPerpendicularVector();

                Point3d p1 = pt - deriv.RotateBy(0.785398, Vector3d.ZAxis) * arrowSideL;
                Point3d p2 = pt - deriv.RotateBy(-0.785398, Vector3d.ZAxis) * arrowSideL;

                wd.Geometry.WorldLine(pt, p1);
                wd.Geometry.WorldLine(pt, p2);
            }
            #endregion

            #region End cirkel
            Point3d p = pline.EndPoint;

            int               nrOfPoints = 16;
            double            phiDelta   = 2 * Math.PI / nrOfPoints;
            Vector3d          vec        = Vector3d.XAxis;
            Point3dCollection points     = new Point3dCollection();

            for (int i = 0; i < nrOfPoints; i++)
            {
                double  phi = phiDelta * i;
                Point3d pC  = p + vec.RotateBy(phi, Vector3d.ZAxis) * arrowSideL;
                points.Add(pC);
            }

            //wd.SubEntityTraits.FillType = Autodesk.AutoCAD.GraphicsInterface.FillType.FillAlways;
            wd.Geometry.Polygon(points);
            #endregion

            //Start and End labels

            //Point3d p = pline.StartPoint;
            //Vector3d derivP = pline.GetFirstDerivative(p);
            //wd.Geometry.Text(p, Vector3d.ZAxis, derivP, 2.0, 1.0, 0.0, "S");

            //p = pline.EndPoint;
            //derivP = pline.GetFirstDerivative(p);
            //wd.Geometry.Text(p, Vector3d.ZAxis, derivP, 2.0, 1.0, 0.0, "E");

            return(true);
        }
Ejemplo n.º 3
0
        public override bool WorldDraw(
            Autodesk.AutoCAD.GraphicsInterface.Drawable drawable,
            Autodesk.AutoCAD.GraphicsInterface.WorldDraw wd)
        {
            base.WorldDraw(drawable, wd);

            Polyline pline = (Polyline)drawable;

            double length         = pline.Length;
            int    numberOfLabels = (int)(length / labelDist);

            if (numberOfLabels == 0)
            {
                numberOfLabels = 1;
            }

            for (int i = 0; i < numberOfLabels + 1; i++)
            {
                #region Size label
                double dist = labelDist * i;
                if (numberOfLabels == 1)
                {
                    dist = length / 2;
                }
                Point3d pt     = pline.GetPointAtDist(dist);
                int     dn     = IntersectUtilities.PipeSchedule.GetPipeDN(pline);
                string  system =
                    IntersectUtilities.PipeSchedule.GetPipeType(pline) == IntersectUtilities.PipeSchedule.PipeTypeEnum.Twin ?
                    "T" : "E";
                string label = $"DN{dn}-{system}";

                Vector3d deriv = pline.GetFirstDerivative(pt);
                deriv = deriv.GetNormal();

                Vector3d perp = deriv.GetPerpendicularVector();

                wd.Geometry.Text(
                    pt + perp * labelOffset, Vector3d.ZAxis, deriv, label, true, style);
                //pt + perp * labelOffset, Vector3d.ZAxis, deriv, labelHeight, 1.0, 0.0, label);

                //wd.Geometry.Text(
                //    pt + perp * labelOffset, Vector3d.ZAxis, deriv, labelHeight, 1.0, 0.0, label);
                #endregion
            }

            #region Buerør label
            int nrOfVertices = pline.NumberOfVertices;

            for (int j = 0; j < pline.NumberOfVertices - 1; j++)
            {
                //Guard against already cut out curves
                double b = pline.GetBulgeAt(j);
                if (b == 0)
                {
                    continue;
                }
                Point2d fP = pline.GetPoint2dAt(j);
                Point2d sP = pline.GetPoint2dAt(j + 1);

                double u           = fP.GetDistanceTo(sP);
                double radius      = u * ((1 + b.Pow(2)) / (4 * Math.Abs(b)));
                double minRadius   = IntersectUtilities.PipeSchedule.GetPipeMinElasticRadius(pline, false);
                bool   isInSituBuk = IntersectUtilities.PipeSchedule.IsInSituBent(pline);
                //If radius is less than minRadius a buerør is detected
                //Split the pline in segments delimiting buerør and append

                Point3d fP3d = new Point3d(fP.X, fP.Y, 0);
                Point3d sP3d = new Point3d(sP.X, sP.Y, 0);

                double fL = pline.GetDistAtPoint(fP3d);
                double sL = pline.GetDistAtPoint(sP3d);

                Vector3d vec = pline.GetFirstDerivative(fP3d);
                vec = vec.GetNormal();
                vec = vec.GetPerpendicularVector();
                Point3d pt1 = fP3d + vec;
                Point3d pt2 = fP3d - vec;
                wd.Geometry.WorldLine(pt1, pt2);

                vec = pline.GetFirstDerivative(sP3d);
                vec = vec.GetNormal();
                vec = vec.GetPerpendicularVector();
                pt1 = sP3d + vec;
                pt2 = sP3d - vec;
                wd.Geometry.WorldLine(pt1, pt2);

                string label;
                if (radius > minRadius)
                {
                    label = $"Elastisk R{radius.ToString("0.##")}";
                }
                else
                {
                    double arcLength = sL - fL;

                    if (isInSituBuk)
                    {
                        label = $"In-situ buk R{radius.ToString("0.##")} L{arcLength.ToString("0.##")}";
                    }
                    else
                    {
                        double angle = arcLength / ((Math.PI / 180) * radius);
                        label = $"Buerør R{radius.ToString("0.##")} L{arcLength.ToString("0.##")} A{angle.ToString("0.##")}";
                    }
                }

                CircularArc2d arc     = pline.GetArcSegment2dAt(j);
                Point2d[]     samples = arc.GetSamplePoints(3);
                Point3d       midPt   = new Point3d(samples[1].X, samples[1].Y, 0);

                Vector3d deriv = pline.GetFirstDerivative(midPt);
                deriv = deriv.GetNormal();

                Vector3d perp = deriv.GetPerpendicularVector();
                if (b > 0)
                {
                    perp = -perp;
                }

                //wd.Geometry.Text(
                //    midPt + perp * (labelOffset + labelHeight + 0.7), Vector3d.ZAxis, deriv, labelHeight, 1.0, 0.0, label);
                wd.Geometry.Text(
                    midPt + perp * (labelOffset + labelHeight + 0.7), Vector3d.ZAxis, deriv, label, true, style);
            }
            #endregion

            return(true);
        }