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); }
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); }
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); }