|
@@ -41,17 +41,21 @@ internal class DxfInsert : IDxfObject
|
|
|
|
|
|
public void Draw(DrawData data)
|
|
|
{
|
|
|
- if (!Insert.IsVisible) return;
|
|
|
+ if (!Insert.IsVisible || !data.Data.HasLayer(Insert.Layer)) return;
|
|
|
|
|
|
- data.PushTransform();
|
|
|
- data.Translate(new PointF((float)Insert.Position.X, (float)Insert.Position.Y));
|
|
|
- data.Rotate((float)Insert.Rotation);
|
|
|
- data.Scale((float)Insert.Scale.X, (float)Insert.Scale.Y);
|
|
|
- foreach(var obj in Objects)
|
|
|
+ var transformation = Insert.GetTransformation();
|
|
|
+ var translation = Insert.Position - transformation * Insert.Block.Origin;
|
|
|
+
|
|
|
+ foreach(var entity in Insert.Block.Entities)
|
|
|
{
|
|
|
- obj.Draw(data);
|
|
|
+ entity.TransformBy(transformation, translation);
|
|
|
+ DxfUtils.ConvertEl(entity)?.Draw(data);
|
|
|
}
|
|
|
- data.PopTransform();
|
|
|
+
|
|
|
+ // foreach(var obj in Insert.Explode())
|
|
|
+ // {
|
|
|
+ // DxfUtils.ConvertEl(obj)?.Draw(data);
|
|
|
+ // }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -68,13 +72,41 @@ internal class DxfEllipse : IDxfObject
|
|
|
{
|
|
|
if (!Ellipse.IsVisible || !data.Data.HasLayer(Ellipse.Layer)) return;
|
|
|
|
|
|
- var center = DrawData.ConvertPoint(Ellipse.Center);
|
|
|
- var size = new SizeF((float)Ellipse.MajorAxis, (float)Ellipse.MinorAxis);
|
|
|
+ foreach(var obj in Ellipse.ToPolyline2D(100).Explode())
|
|
|
+ {
|
|
|
+ DxfUtils.ConvertEl(obj)?.Draw(data);
|
|
|
+ }
|
|
|
+ // var center = DrawData.ConvertPoint(Ellipse.Center);
|
|
|
+ // var size = new SizeF((float)Ellipse.MajorAxis, (float)Ellipse.MinorAxis);
|
|
|
|
|
|
- var startAngle = (float)(Ellipse.StartAngle);
|
|
|
- var endAngle = (float)(Ellipse.EndAngle);
|
|
|
+ // var startAngle = (float)(Ellipse.StartAngle);
|
|
|
+ // var endAngle = (float)(Ellipse.EndAngle);
|
|
|
|
|
|
- data.Graphics.DrawArc(new Pen(Color.Black, data.ConvertThickness((float)Ellipse.Thickness)), center.X - size.Width / 2, center.Y - size.Height / 2, size.Width, size.Height, startAngle, Utils.Mod(endAngle - startAngle, 360));
|
|
|
+ // data.Graphics.DrawArc(new Pen(Color.Black, data.ConvertThickness((float)Ellipse.Thickness)), center.X - size.Width / 2, center.Y - size.Height / 2, size.Width, size.Height, startAngle, Utils.Mod(endAngle - startAngle, 360));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+internal class DxfSolid : IDxfObject
|
|
|
+{
|
|
|
+ public Solid Solid { get; set; }
|
|
|
+
|
|
|
+ public DxfSolid(Solid solid)
|
|
|
+ {
|
|
|
+ Solid = solid;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Draw(DrawData data)
|
|
|
+ {
|
|
|
+ if (!Solid.IsVisible || !data.Data.HasLayer(Solid.Layer)) return;
|
|
|
+
|
|
|
+ var vertices = new Vector2[]
|
|
|
+ {
|
|
|
+ Solid.FirstVertex,
|
|
|
+ Solid.SecondVertex,
|
|
|
+ Solid.FourthVertex, // Apparently the third and fourth are the wrong way round, so I've mirrored that here.
|
|
|
+ Solid.ThirdVertex
|
|
|
+ };
|
|
|
+ data.Graphics.FillPolygon(new SolidBrush(Color.Black), vertices.ToArray(x => DrawData.ConvertPoint(x)));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -149,12 +181,14 @@ internal class DxfMText : IDxfObject
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ var text = MText.PlainText().Replace("^M", "");
|
|
|
+
|
|
|
data.PushTransform();
|
|
|
data.Translate(new PointF((float)MText.Position.X, (float)MText.Position.Y));
|
|
|
data.Rotate((float)MText.Rotation);
|
|
|
data.Scale(1, -1);
|
|
|
|
|
|
- var size = data.Graphics.MeasureString(MText.PlainText(), font, new PointF(), StringFormat.GenericTypographic);
|
|
|
+ var size = data.Graphics.MeasureString(text, font, new PointF(), StringFormat.GenericTypographic);
|
|
|
switch (MText.AttachmentPoint)
|
|
|
{
|
|
|
case MTextAttachmentPoint.MiddleLeft:
|
|
@@ -194,7 +228,7 @@ internal class DxfMText : IDxfObject
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- data.Graphics.DrawString(MText.PlainText(), font, new SolidBrush(Color.Black), new PointF(0, 0), StringFormat.GenericTypographic);
|
|
|
+ data.Graphics.DrawString(text, font, new SolidBrush(Color.Black), new PointF(0, 0), StringFormat.GenericTypographic);
|
|
|
data.PopTransform();
|
|
|
}
|
|
|
}
|
|
@@ -212,6 +246,11 @@ internal class DxfDimension : IDxfObject
|
|
|
{
|
|
|
if (!Dimension.IsVisible || !data.Data.HasLayer(Dimension.Layer)) return;
|
|
|
|
|
|
+ if(Dimension.Block is null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
var entities = Dimension.Block.Entities;
|
|
|
foreach(var entity in entities)
|
|
|
{
|