private static void WriteDxfFile() { DxfDocument dxf = new DxfDocument(); //arc Arc arc = new Arc(new Vector3f(10, 10, 0), 10, 45, 135); arc.Layer = new Layer("arc"); arc.Layer.Color.Index = 1; dxf.AddEntity(arc); //xData sample XData xdata = new XData(new ApplicationRegistry("SharpDxf")); xdata.XDataRecord.Add(new XDataRecord(XDataCode.String, "extended data with SharpDxf")); xdata.XDataRecord.Add(XDataRecord.OpenControlString); xdata.XDataRecord.Add(new XDataRecord(XDataCode.WorldSpacePositionX, 0)); xdata.XDataRecord.Add(new XDataRecord(XDataCode.WorldSpacePositionY, 0)); xdata.XDataRecord.Add(new XDataRecord(XDataCode.WorldSpacePositionZ, 0)); xdata.XDataRecord.Add(XDataRecord.CloseControlString); XData xdata2 = new XData(new ApplicationRegistry("other application")); xdata2.XDataRecord.Add(new XDataRecord(XDataCode.String, "extended data with SharpDxf")); xdata2.XDataRecord.Add(XDataRecord.OpenControlString); xdata2.XDataRecord.Add(new XDataRecord(XDataCode.String, "string record")); xdata2.XDataRecord.Add(new XDataRecord(XDataCode.Real, 15.5)); xdata2.XDataRecord.Add(new XDataRecord(XDataCode.Long, 350)); xdata2.XDataRecord.Add(XDataRecord.CloseControlString); //circle Vector3f extrusion = new Vector3f(1, 1, 1); Vector3f centerWCS = new Vector3f(1, 1, 1); Vector3d centerOCS = MathHelper.Transform((Vector3d) centerWCS, (Vector3d)extrusion, MathHelper.CoordinateSystem.World, MathHelper.CoordinateSystem.Object); Circle circle = new Circle((Vector3f) centerOCS, 5); circle.Layer = new Layer("circle with spaces"); circle.Layer.Color=AciColor.Yellow; circle.LineType = LineType.Dashed; circle.Normal = extrusion; circle.XData=new Dictionary<ApplicationRegistry, XData> { {xdata.ApplicationRegistry, xdata}, {xdata2.ApplicationRegistry, xdata2} }; dxf.AddEntity(circle); //points Point point1 = new Point(new Vector3f(-3, -3, 0)); point1.Layer = new Layer("point"); point1.Color = new AciColor(30); Point point2 = new Point(new Vector3f(1, 1, 1)); point2.Layer = point1.Layer; point2.Layer.Color.Index = 9; point2.Normal = new Vector3f(1, 1, 1); dxf.AddEntity(point1); dxf.AddEntity(point2); //3dface Face3d face3D = new Face3d(new Vector3f(-5, -5, 5), new Vector3f(5, -5, 5), new Vector3f(5, 5, 5), new Vector3f(-5, 5, 5)); face3D.Layer = new Layer("3dface"); face3D.Layer.Color.Index = 3; dxf.AddEntity(face3D); //polyline PolylineVertex polyVertex; List<PolylineVertex> polyVertexes = new List<PolylineVertex>(); polyVertex = new PolylineVertex(new Vector2f(-50, -50)); polyVertex.BeginThickness = 2; polyVertexes.Add(polyVertex); polyVertex = new PolylineVertex(new Vector2f(50, -50)); polyVertex.BeginThickness = 1; polyVertexes.Add(polyVertex); polyVertex = new PolylineVertex(new Vector2f(50, 50)); polyVertex.Bulge = 1; polyVertexes.Add(polyVertex); polyVertex = new PolylineVertex(new Vector2f(-50, 50)); polyVertexes.Add(polyVertex); Polyline polyline2d = new Polyline(polyVertexes, true); polyline2d.Layer = new Layer("polyline2d"); polyline2d.Layer.Color.Index = 5; polyline2d.Normal = new Vector3f(1, 1, 1); polyline2d.Elevation = 100.0f; dxf.AddEntity(polyline2d); //lightweight polyline LightWeightPolylineVertex lwVertex; List<LightWeightPolylineVertex> lwVertexes = new List<LightWeightPolylineVertex>(); lwVertex = new LightWeightPolylineVertex(new Vector2f(-25, -25)); lwVertex.BeginThickness = 2; lwVertexes.Add(lwVertex); lwVertex = new LightWeightPolylineVertex(new Vector2f(25, -25)); lwVertex.BeginThickness = 1; lwVertexes.Add(lwVertex); lwVertex = new LightWeightPolylineVertex(new Vector2f(25, 25)); lwVertex.Bulge = 1; lwVertexes.Add(lwVertex); lwVertex = new LightWeightPolylineVertex(new Vector2f(-25, 25)); lwVertexes.Add(lwVertex); LightWeightPolyline lwPolyline = new LightWeightPolyline(lwVertexes, true); lwPolyline.Layer = new Layer("lwpolyline"); lwPolyline.Layer.Color.Index = 5; lwPolyline.Normal = new Vector3f(1, 1, 1); lwPolyline.Elevation = 100.0f; dxf.AddEntity(lwPolyline); //line Line line = new Line(new Vector3f(0, 0, 0), new Vector3f(10, 10, 10)); line.Layer = new Layer("line"); line.Layer.Color.Index = 6; dxf.AddEntity(line); //3d polyline Polyline3dVertex vertex; List<Polyline3dVertex> vertexes = new List<Polyline3dVertex>(); vertex = new Polyline3dVertex(new Vector3f(-50, -50, 0)); vertexes.Add(vertex); vertex = new Polyline3dVertex(new Vector3f(50, -50, 10)); vertexes.Add(vertex); vertex = new Polyline3dVertex(new Vector3f(50, 50, 25)); vertexes.Add(vertex); vertex = new Polyline3dVertex(new Vector3f(-50, 50, 50)); vertexes.Add(vertex); Polyline3d polyline = new Polyline3d(vertexes, true); polyline.Layer = new Layer("polyline3d"); polyline.Layer.Color.Index = 24; dxf.AddEntity(polyline); //block definition Block block = new Block("TestBlock"); block.Entities.Add(new Line(new Vector3f(-5, -5, 5), new Vector3f(5, 5, 5))); block.Entities.Add(new Line(new Vector3f(5, -5, 5), new Vector3f(-5, 5, 5))); //insert Insert insert = new Insert(block, new Vector3f(5, 5, 5)); insert.Layer = new Layer("insert"); insert.Layer.Color.Index = 4; dxf.AddEntity(insert); //text TextStyle style=new TextStyle("True type font","Arial.ttf"); Text text = new Text("Hello world!", Vector3f.Zero, 10.0f,style); text.Layer = new Layer("text"); text.Layer.Color.Index = 8; text.Alignment = TextAlignment.TopRight; dxf.AddEntity(text); dxf.Save("AutoCad2007.dxf", DxfVersion.AutoCad2007); dxf.Save("AutoCad2004.dxf", DxfVersion.AutoCad2004); dxf.Save("AutoCad2000.dxf", DxfVersion.AutoCad2000); dxf.Save("AutoCad12.dxf", DxfVersion.AutoCad12); }
private Text ReadText(ref CodeValuePair code) { var text = new Text(); Vector3f firstAlignmentPoint = Vector3f.Zero; Vector3f secondAlignmentPoint = Vector3f.Zero; Vector3f normal = Vector3f.UnitZ; int horizontalAlignment = 0; int verticalAlignment = 0; Dictionary<ApplicationRegistry, XData> xData = new Dictionary<ApplicationRegistry, XData>(); code = this.ReadCodePair(); while (code.Code != 0) { switch (code.Code) { case 5: text.Handle = code.Value; code = this.ReadCodePair(); break; case 1: text.Value = code.Value; code = this.ReadCodePair(); break; case 8: //layer code text.Layer = this.GetLayer(code.Value); code = this.ReadCodePair(); break; case 62: //aci color code text.Color = new AciColor(short.Parse(code.Value)); code = this.ReadCodePair(); break; case 6: //type line code text.LineType = this.GetLineType(code.Value); code = this.ReadCodePair(); break; case 10: firstAlignmentPoint.X = float.Parse(code.Value); code = this.ReadCodePair(); break; case 20: firstAlignmentPoint.Y = float.Parse(code.Value); code = this.ReadCodePair(); break; case 30: firstAlignmentPoint.Z = float.Parse(code.Value); code = this.ReadCodePair(); break; case 11: secondAlignmentPoint.X = float.Parse(code.Value); code = this.ReadCodePair(); break; case 21: secondAlignmentPoint.Y = float.Parse(code.Value); code = this.ReadCodePair(); break; case 31: secondAlignmentPoint.Z = float.Parse(code.Value); code = this.ReadCodePair(); break; case 40: text.Height = float.Parse(code.Value); code = this.ReadCodePair(); break; case 41: text.WidthFactor = float.Parse(code.Value); code = this.ReadCodePair(); break; case 50: text.Rotation = float.Parse(code.Value); code = this.ReadCodePair(); break; case 51: text.ObliqueAngle = float.Parse(code.Value); code = this.ReadCodePair(); break; case 7: text.Style = this.GetTextStyle(code.Value); code = this.ReadCodePair(); break; case 72: horizontalAlignment = int.Parse(code.Value); code = this.ReadCodePair(); break; case 73: verticalAlignment = int.Parse(code.Value); code = this.ReadCodePair(); break; case 210: normal.X = float.Parse(code.Value); code = this.ReadCodePair(); break; case 220: normal.Y = float.Parse(code.Value); code = this.ReadCodePair(); break; case 230: normal.Z = float.Parse(code.Value); code = this.ReadCodePair(); break; case 1001: XData xDataItem = this.ReadXDataRecord(code.Value, ref code); xData.Add(xDataItem.ApplicationRegistry, xDataItem); break; default: if (code.Code >= 1000 && code.Code <= 1071) throw new DxfInvalidCodeValueEntityException(code.Code, code.Value, this.file, "The extended data of an entity must start with the application registry code " + this.fileLine); code = this.ReadCodePair(); break; } } TextAlignment alignment = ObtainAlignment(horizontalAlignment, verticalAlignment); text.BasePoint = alignment == TextAlignment.BaselineLeft ? firstAlignmentPoint : secondAlignmentPoint; text.Normal = normal; text.Alignment = alignment; text.XData = xData; return text; }
private void WriteText(Text text) { if (this.activeSection != StringCode.EntitiesSection && !this.isBlockEntities) { throw new InvalidDxfSectionException(this.activeSection, this.file); } this.WriteCodePair(0, text.CodeName); this.WriteCodePair(100, SubclassMarker.Entity); this.WriteEntityCommonCodes(text); this.WriteCodePair(5, text.Handle); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(1, text.Value); this.WriteCodePair(10, text.BasePoint.X); this.WriteCodePair(20, text.BasePoint.Y); this.WriteCodePair(30, text.BasePoint.Z); this.WriteCodePair(40, text.Height); this.WriteCodePair(41, text.WidthFactor); this.WriteCodePair(50, text.Rotation); this.WriteCodePair(51, text.ObliqueAngle); this.WriteCodePair(7, text.Style); this.WriteCodePair(11, text.BasePoint.X); this.WriteCodePair(21, text.BasePoint.Y); this.WriteCodePair(31, text.BasePoint.Z); this.WriteCodePair(210, text.Normal.X); this.WriteCodePair(220, text.Normal.Y); this.WriteCodePair(230, text.Normal.Z); switch (text.Alignment) { case TextAlignment.TopLeft: this.WriteCodePair(72, 0); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 3); break; case TextAlignment.TopCenter: this.WriteCodePair(72, 1); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 3); break; case TextAlignment.TopRight: this.WriteCodePair(72, 2); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 3); break; case TextAlignment.MiddleLeft: this.WriteCodePair(72, 0); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 2); break; case TextAlignment.MiddleCenter: this.WriteCodePair(72, 1); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 2); break; case TextAlignment.MiddleRight: this.WriteCodePair(72, 2); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 2); break; case TextAlignment.BottomLeft: this.WriteCodePair(72, 0); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 1); break; case TextAlignment.BottomCenter: this.WriteCodePair(72, 1); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 1); break; case TextAlignment.BottomRight: this.WriteCodePair(72, 2); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 1); break; case TextAlignment.BaselineLeft: this.WriteCodePair(72, 0); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 0); break; case TextAlignment.BaselineCenter: this.WriteCodePair(72, 1); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 0); break; case TextAlignment.BaselineRight: this.WriteCodePair(72, 2); this.WriteCodePair(100, SubclassMarker.Text); this.WriteCodePair(73, 0); break; } this.WriteXData(text.XData); }