public Edge(Brep[] C, Curve i) { BasisCurve = i.DuplicateCurve(); }
/// <summary> /// Adds a new, colored curve to the display list. /// The curve will be duplicated so changes to the /// original will not affect the display. /// </summary> /// <param name="curve">Curve to add.</param> /// <param name="color">Color of curve.</param> /// <param name="thickness">Thickness of curve.</param> public void AddCurve(Curve curve, Color color, int thickness) { if (m_disposed) { throw new ObjectDisposedException("This CustomDisplay instance has been disposed and cannot be modified"); } if (curve == null) { return; } if (!curve.IsValid) { return; } CDU_Curve cdu = new CDU_Curve(); cdu.m_curve = curve.DuplicateCurve(); cdu.m_color = Color.FromArgb(255, color); cdu.m_thickness = thickness; m_curves.Add(cdu); m_clip.Union(cdu.m_curve.GetBoundingBox(false)); }
internal static IfcBoundedCurve convCurve(DatabaseIfc db, Curve crv, IfcCartesianPoint optStrt, bool twoD, out IfcCartesianPoint end) { double tol = db.Tolerance; end = null; Curve c = crv.DuplicateCurve(); if (c.IsLinear(tol)) { if (twoD) end = new IfcCartesianPoint(db, new Point2d(c.PointAtEnd.X, c.PointAtEnd.Y)); else end = new IfcCartesianPoint(db, c.PointAtEnd); if (optStrt == null) { if (twoD) optStrt = new IfcCartesianPoint(db, new Point2d(c.PointAtStart.X, c.PointAtStart.Y)); else optStrt = new IfcCartesianPoint(db, c.PointAtStart); } return new IfcPolyline(optStrt, end); } ArcCurve ac = c as ArcCurve; if (ac != null) return new IfcTrimmedCurve(db, ac.Arc, twoD, optStrt, out end); Arc arc = Arc.Unset; if (c.TryGetArc(out arc, tol)) return new IfcTrimmedCurve(db, arc, twoD, optStrt, out end); Polyline pl = new Polyline(); if (c.TryGetPolyline(out pl)) { if (db.mRelease != ReleaseVersion.IFC2x3 && db.mRelease != ReleaseVersion.IFC4) { if (twoD) return new IfcIndexedPolyCurve(new IfcCartesianPointList2D(db, pl.ConvertAll(x => new Point2d(x.X, x.Y)))); else return new IfcIndexedPolyCurve(new IfcCartesianPointList3D(db, pl)); } List<IfcCartesianPoint> cps = new List<IfcCartesianPoint>(); if (twoD) { Point2d p = new Point2d(pl[0].X, pl[0].Y), n; cps.Add(new IfcCartesianPoint(db, p)); for (int icounter = 1; icounter < pl.Count - 1; icounter++) { n = new Point2d(pl[icounter].X, pl[icounter].Y); if (n.DistanceTo(p) > tol) { cps.Add(new IfcCartesianPoint(db, n)); p = n; } } n = new Point2d(pl[pl.Count - 1].X, pl[pl.Count - 1].Y); if (n.DistanceTo(p) > tol) { if (pl.IsClosed) cps.Add(cps[0]); else cps.Add(new IfcCartesianPoint(db, n)); } } else { Point3d p = pl[0], n; cps.Add(new IfcCartesianPoint(db, p)); for (int icounter = 1; icounter < pl.Count; icounter++) { n = pl[icounter]; if (n.DistanceTo(p) > tol) { cps.Add(new IfcCartesianPoint(db, n)); p = n; } } } return new IfcPolyline(cps); } PolyCurve plc = c as PolyCurve; if (plc != null) { if (db.mRelease != ReleaseVersion.IFC2x3 && db.mRelease != ReleaseVersion.IFC4) { IfcIndexedPolyCurve ipc = IfcIndexedPolyCurve.Convert(db, plc, twoD); if (ipc != null) return ipc; } return new IfcCompositeCurve(db, plc, twoD); } if (db.mRelease != ReleaseVersion.IFC2x3) { NurbsCurve nc = c as NurbsCurve; if (nc != null) { if (nc.IsRational) return new IfcRationalBSplineCurveWithKnots(db, nc, twoD); return new IfcBSplineCurveWithKnots(db, nc, twoD); } } return null; }