//-------------------------------------------------------------------------------------------------- void _ImportArc(DxfDomCircle dxfCircle) { Pnt2d center = dxfCircle.CenterPoint; double radius = dxfCircle.Radius; if (radius <= 0) { return; } var startParam = dxfCircle.StartAngle.ToRad(); var endParam = dxfCircle.EndAngle.ToRad(); if (endParam < startParam) { endParam += 2 * Math.PI; } var geomCircle = new Geom2d_Circle(new Ax2d(center, Dir2d.DX), radius); var startIndex = _AddPoint(geomCircle.Value(startParam)); var endIndex = _AddPoint(geomCircle.Value(endParam)); var rimIndex = _AddPoint(geomCircle.Value(startParam.Lerp(endParam, 0.5)), false); if (startIndex != endIndex) { _Segments.Add(new SketchSegmentArc(startIndex, endIndex, rimIndex)); } }
//-------------------------------------------------------------------------------------------------- void _AddCircleSegment(SketchSegmentCircle circleSegment) { var p1 = _Sketch.Points[circleSegment.CenterPoint]; var radius = circleSegment.Radius(_Sketch.Points); var entity = new DxfDomCircle("0", p1, radius); _Document.Entities.Add(entity); }
//-------------------------------------------------------------------------------------------------- void _ImportCircle(DxfDomCircle dxfCircle) { var centerIndex = _AddPoint(dxfCircle.CenterPoint, false); double radius = dxfCircle.Radius; if (radius <= 0) { return; } var rimIndex = _AddPoint(dxfCircle.CenterPoint.Translated(new Vec2d(radius, 0)), false); if (centerIndex != rimIndex) { _Segments.Add(new SketchSegmentCircle(centerIndex, rimIndex)); } }
//-------------------------------------------------------------------------------------------------- void IDrawingRenderer.Circle(Pnt2d center, double radius, double startAngle, double endAngle) { if (startAngle.Distance(endAngle).IsEqual(Maths.DoublePI, 0.00001)) { // Full circle var entity = new DxfDomCircle(_CurrentLayerName, center, radius); _AddEntity(entity); } else { // Circle arc if (startAngle > endAngle) { startAngle.Swap(ref endAngle); } var entity = new DxfDomCircle(_CurrentLayerName, center, radius, startAngle.ToDeg(), endAngle.ToDeg()); _AddEntity(entity); } }
//-------------------------------------------------------------------------------------------------- void _AddArcSegment(SketchSegmentArc arcSegment) { var circle = arcSegment.GetCircle(_Sketch.Points); Pnt2d startPoint; Pnt2d endPoint; if (circle.Position().Sense() < 0) { startPoint = _Sketch.Points[arcSegment.StartPoint]; endPoint = _Sketch.Points[arcSegment.EndPoint]; } else { startPoint = _Sketch.Points[arcSegment.EndPoint]; endPoint = _Sketch.Points[arcSegment.StartPoint]; } var entity = new DxfDomCircle("0", circle.Location(), circle.Radius(), startPoint, endPoint); _Document.Entities.Add(entity); }