private static void WriteDxfFile() { DxfDocument dxf = new DxfDocument(); //arc Arc arc = new Arc(new Vector3(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("netDxf")); xdata.XDataRecord.Add(new XDataRecord(XDataCode.String, "extended data with netDxf")); 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 netDxf")); 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.Int32, 350)); xdata2.XDataRecord.Add(XDataRecord.CloseControlString); //circle Vector3 extrusion = new Vector3(1, 1, 1); Vector3 centerWCS = new Vector3(1, 1, 1); Vector3 centerOCS = MathHelper.Transform(centerWCS, extrusion, CoordinateSystem.World, CoordinateSystem.Object); Circle circle = new Circle(centerOCS, 5); circle.Layer = new Layer("circle with spaces"); circle.Layer.Color=AciColor.Yellow; circle.LineType = LineType.Dashed; circle.Normal = extrusion; circle.XData.Add(xdata); circle.XData.Add(xdata2); dxf.AddEntity(circle); //points Point point1 = new Point(new Vector3(-3, -3, 0)); point1.Layer = new Layer("point"); point1.Color = new AciColor(30); Point point2 = new Point(new Vector3(1, 1, 1)); point2.Layer = point1.Layer; point2.Layer.Color.Index = 9; point2.Normal = new Vector3(1, 1, 1); dxf.AddEntity(point1); dxf.AddEntity(point2); //3dface Face3d face3D = new Face3d(new Vector3(-5, -5, 5), new Vector3(5, -5, 5), new Vector3(5, 5, 5), new Vector3(-5, 5, 5)); face3D.Layer = new Layer("3dface"); face3D.Layer.Color.Index = 3; dxf.AddEntity(face3D); //polyline LwPolylineVertex polyVertex; List<LwPolylineVertex> polyVertexes = new List<LwPolylineVertex>(); polyVertex = new LwPolylineVertex(new Vector2(-50, -50)); polyVertex.StartWidth = 2; polyVertexes.Add(polyVertex); polyVertex = new LwPolylineVertex(new Vector2(50, -50)); polyVertex.StartWidth = 1; polyVertexes.Add(polyVertex); polyVertex = new LwPolylineVertex(new Vector2(50, 50)); polyVertex.Bulge = 1; polyVertexes.Add(polyVertex); polyVertex = new LwPolylineVertex(new Vector2(-50, 50)); polyVertexes.Add(polyVertex); LwPolyline polyline2d = new LwPolyline(polyVertexes, true); polyline2d.Layer = new Layer("polyline2d"); polyline2d.Layer.Color.Index = 5; polyline2d.Normal = new Vector3(1, 1, 1); polyline2d.Elevation = 100.0f; dxf.AddEntity(polyline2d); //lightweight polyline LwPolylineVertex lwVertex; List<LwPolylineVertex> lwVertexes = new List<LwPolylineVertex>(); lwVertex = new LwPolylineVertex(new Vector2(-25, -25)); lwVertex.StartWidth = 2; lwVertexes.Add(lwVertex); lwVertex = new LwPolylineVertex(new Vector2(25, -25)); lwVertex.StartWidth = 1; lwVertexes.Add(lwVertex); lwVertex = new LwPolylineVertex(new Vector2(25, 25)); lwVertex.Bulge = 1; lwVertexes.Add(lwVertex); lwVertex = new LwPolylineVertex(new Vector2(-25, 25)); lwVertexes.Add(lwVertex); LwPolyline lwPolyline = new LwPolyline(lwVertexes, true); lwPolyline.Layer = new Layer("lwpolyline"); lwPolyline.Layer.Color.Index = 5; lwPolyline.Normal = new Vector3(1, 1, 1); lwPolyline.Elevation = 100.0f; dxf.AddEntity(lwPolyline); // polyfaceMesh List<PolyfaceMeshVertex> meshVertexes = new List<PolyfaceMeshVertex> { new PolyfaceMeshVertex(0, 0, 0), new PolyfaceMeshVertex(10, 0, 0), new PolyfaceMeshVertex(10, 10, 0), new PolyfaceMeshVertex(5, 15, 0), new PolyfaceMeshVertex(0, 10, 0) }; List<PolyfaceMeshFace> faces = new List<PolyfaceMeshFace> { new PolyfaceMeshFace(new short[] {1, 2, -3}), new PolyfaceMeshFace(new short[] {-1, 3, -4}), new PolyfaceMeshFace(new short[] {-1, 4, 5}) }; PolyfaceMesh mesh = new PolyfaceMesh(meshVertexes, faces); mesh.Layer = new Layer("polyfacemesh"); mesh.Layer.Color.Index = 104; dxf.AddEntity(mesh); //line Line line = new Line(new Vector3(0, 0, 0), new Vector3(10, 10, 10)); line.Layer = new Layer("line"); line.Layer.Color.Index = 6; dxf.AddEntity(line); //3d polyline PolylineVertex vertex; List<PolylineVertex> vertexes = new List<PolylineVertex>(); vertex = new PolylineVertex(new Vector3(-50, -50, 0)); vertexes.Add(vertex); vertex = new PolylineVertex(new Vector3(50, -50, 10)); vertexes.Add(vertex); vertex = new PolylineVertex(new Vector3(50, 50, 25)); vertexes.Add(vertex); vertex = new PolylineVertex(new Vector3(-50, 50, 50)); vertexes.Add(vertex); Polyline polyline = new Polyline(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 Vector3(-5, -5, 5), new Vector3(5, 5, 5))); block.Entities.Add(new Line(new Vector3(5, -5, 5), new Vector3(-5, 5, 5))); //insert Insert insert = new Insert(block, new Vector3(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!", Vector3.Zero, 10.0f,style); text.Layer = new Layer("text"); text.Layer.Color.Index = 8; text.Alignment = TextAlignment.TopRight; dxf.AddEntity(text); dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2010; dxf.Save("AutoCad2010.dxf"); dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2007; dxf.Save("AutoCad2007.dxf"); dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2004; dxf.Save("AutoCad2004.dxf"); dxf.DrawingVariables.AcadVer = DxfVersion.AutoCad2000; dxf.Save("AutoCad2000.dxf"); dxf = DxfDocument.Load("AutoCad2000.dxf"); dxf.Save("AutoCad2000 result.dxf"); }
/// <summary> /// Creates a new Face3d that is a copy of the current instance. /// </summary> /// <returns>A new Face3d that is a copy of this instance.</returns> public override object Clone() { Face3d entity = new Face3d { //EntityObject properties Layer = (Layer)this.Layer.Clone(), Linetype = (Linetype)this.Linetype.Clone(), Color = (AciColor)this.Color.Clone(), Lineweight = this.Lineweight, Transparency = (Transparency)this.Transparency.Clone(), LinetypeScale = this.LinetypeScale, Normal = this.Normal, IsVisible = this.IsVisible, //Face3d properties FirstVertex = this.firstVertex, SecondVertex = this.secondVertex, ThirdVertex = this.thirdVertex, FourthVertex = this.fourthVertex, EdgeFlags = this.edgeFlags }; foreach (XData data in this.XData.Values) { entity.XData.Add((XData)data.Clone()); } return(entity); }
/// <summary> /// Decompose the actual polyface mesh faces in <see cref="Point">points</see> (one vertex polyface mesh face), /// <see cref="Line">lines</see> (two vertexes polyface mesh face) and <see cref="Face3d">3d faces</see> (three or four vertexes polyface mesh face). /// </summary> /// <returns>A list of <see cref="Face3d">3d faces</see> that made up the polyface mesh.</returns> public List <EntityObject> Explode() { List <EntityObject> entities = new List <EntityObject>(); foreach (PolyfaceMeshFace face in this.Faces) { if (face.VertexIndexes.Count == 1) { Point point = new Point { Layer = (Layer)this.Layer.Clone(), Linetype = (Linetype)this.Linetype.Clone(), Color = (AciColor)this.Color.Clone(), Lineweight = this.Lineweight, Transparency = (Transparency)this.Transparency.Clone(), LinetypeScale = this.LinetypeScale, Normal = this.Normal, Position = this.Vertexes[Math.Abs(face.VertexIndexes[0]) - 1].Position, }; entities.Add(point); continue; } if (face.VertexIndexes.Count == 2) { Line line = new Line { Layer = (Layer)this.Layer.Clone(), Linetype = (Linetype)this.Linetype.Clone(), Color = (AciColor)this.Color.Clone(), Lineweight = this.Lineweight, Transparency = (Transparency)this.Transparency.Clone(), LinetypeScale = this.LinetypeScale, Normal = this.Normal, StartPoint = this.Vertexes[Math.Abs(face.VertexIndexes[0]) - 1].Position, EndPoint = this.Vertexes[Math.Abs(face.VertexIndexes[1]) - 1].Position, }; entities.Add(line); continue; } Face3dEdgeFlags edgeVisibility = Face3dEdgeFlags.Visibles; short indexV1 = face.VertexIndexes[0]; short indexV2 = face.VertexIndexes[1]; short indexV3 = face.VertexIndexes[2]; // Polyface mesh faces are made of 3 or 4 vertexes, we will repeat the third vertex if the number of face vertexes is three int indexV4 = face.VertexIndexes.Count == 3 ? face.VertexIndexes[2] : face.VertexIndexes[3]; if (indexV1 < 0) { edgeVisibility = edgeVisibility | Face3dEdgeFlags.First; } if (indexV2 < 0) { edgeVisibility = edgeVisibility | Face3dEdgeFlags.Second; } if (indexV3 < 0) { edgeVisibility = edgeVisibility | Face3dEdgeFlags.Third; } if (indexV4 < 0) { edgeVisibility = edgeVisibility | Face3dEdgeFlags.Fourth; } Vector3 v1 = this.Vertexes[Math.Abs(indexV1) - 1].Position; Vector3 v2 = this.Vertexes[Math.Abs(indexV2) - 1].Position; Vector3 v3 = this.Vertexes[Math.Abs(indexV3) - 1].Position; Vector3 v4 = this.Vertexes[Math.Abs(indexV4) - 1].Position; Face3d face3d = new Face3d { Layer = (Layer)this.Layer.Clone(), Linetype = (Linetype)this.Linetype.Clone(), Color = (AciColor)this.Color.Clone(), Lineweight = this.Lineweight, Transparency = (Transparency)this.Transparency.Clone(), LinetypeScale = this.LinetypeScale, Normal = this.Normal, FirstVertex = v1, SecondVertex = v2, ThirdVertex = v3, FourthVertex = v4, EdgeFlags = edgeVisibility, }; entities.Add(face3d); } return(entities); }
/// <summary> /// Decompose the actual polyface mesh faces in <see cref="Point">points</see> (one vertex polyface mesh face), /// <see cref="Line">lines</see> (two vertexes polyface mesh face) and <see cref="Face3d">3d faces</see> (three or four vertexes polyface mesh face). /// </summary> /// <returns>A list of <see cref="Face3d">3d faces</see> that made up the polyface mesh.</returns> public List<EntityObject> Explode() { List<EntityObject> entities = new List<EntityObject>(); foreach (PolyfaceMeshFace face in this.Faces) { if (face.VertexIndexes.Count == 1) { Point point = new Point { Layer = (Layer) this.Layer.Clone(), Linetype = (Linetype) this.Linetype.Clone(), Color = (AciColor) this.Color.Clone(), Lineweight = this.Lineweight, Transparency = (Transparency) this.Transparency.Clone(), LinetypeScale = this.LinetypeScale, Normal = this.Normal, Position = this.Vertexes[Math.Abs(face.VertexIndexes[0]) - 1].Location, }; entities.Add(point); continue; } if (face.VertexIndexes.Count == 2) { Line line = new Line { Layer = (Layer) this.Layer.Clone(), Linetype = (Linetype) this.Linetype.Clone(), Color = (AciColor) this.Color.Clone(), Lineweight = this.Lineweight, Transparency = (Transparency) this.Transparency.Clone(), LinetypeScale = this.LinetypeScale, Normal = this.Normal, StartPoint = this.Vertexes[Math.Abs(face.VertexIndexes[0]) - 1].Location, EndPoint = this.Vertexes[Math.Abs(face.VertexIndexes[1]) - 1].Location, }; entities.Add(line); continue; } Face3dEdgeFlags edgeVisibility = Face3dEdgeFlags.Visibles; short indexV1 = face.VertexIndexes[0]; short indexV2 = face.VertexIndexes[1]; short indexV3 = face.VertexIndexes[2]; // Polyface mesh faces are made of 3 or 4 vertexes, we will repeat the third vertex if the number of face vertexes is three int indexV4 = face.VertexIndexes.Count == 3 ? face.VertexIndexes[2] : face.VertexIndexes[3]; if (indexV1 < 0) edgeVisibility = edgeVisibility | Face3dEdgeFlags.First; if (indexV2 < 0) edgeVisibility = edgeVisibility | Face3dEdgeFlags.Second; if (indexV3 < 0) edgeVisibility = edgeVisibility | Face3dEdgeFlags.Third; if (indexV4 < 0) edgeVisibility = edgeVisibility | Face3dEdgeFlags.Fourth; Vector3 v1 = this.Vertexes[Math.Abs(indexV1) - 1].Location; Vector3 v2 = this.Vertexes[Math.Abs(indexV2) - 1].Location; Vector3 v3 = this.Vertexes[Math.Abs(indexV3) - 1].Location; Vector3 v4 = this.Vertexes[Math.Abs(indexV4) - 1].Location; Face3d face3d = new Face3d { Layer = (Layer) this.Layer.Clone(), Linetype = (Linetype) this.Linetype.Clone(), Color = (AciColor) this.Color.Clone(), Lineweight = this.Lineweight, Transparency = (Transparency) this.Transparency.Clone(), LinetypeScale = this.LinetypeScale, Normal = this.Normal, FirstVertex = v1, SecondVertex = v2, ThirdVertex = v3, FourthVertex = v4, EdgeFlags = edgeVisibility, }; entities.Add(face3d); } return entities; }
private Face3d ReadFace3D(ref CodeValuePair code) { var face = new Face3d(); Vector3d v0 = Vector3d.Zero; Vector3d v1 = Vector3d.Zero; Vector3d v2 = Vector3d.Zero; Vector3d v3 = Vector3d.Zero; Dictionary<ApplicationRegistry, XData> xData = new Dictionary<ApplicationRegistry, XData>(); code = this.ReadCodePair(); while (code.Code != 0) { switch (code.Code) { case 5: face.Handle = code.Value; code = this.ReadCodePair(); break; case 8: //layer code face.Layer = this.GetLayer(code.Value); code = this.ReadCodePair(); break; case 62: //aci color code face.Color = new AciColor(short.Parse(code.Value)); code = this.ReadCodePair(); break; case 6: //type line code face.LineType = this.GetLineType(code.Value); code = this.ReadCodePair(); break; case 10: v0.X = double.Parse(code.Value); code = this.ReadCodePair(); break; case 20: v0.Y = double.Parse(code.Value); code = this.ReadCodePair(); break; case 30: v0.Z = double.Parse(code.Value); code = this.ReadCodePair(); break; case 11: v1.X = float.Parse(code.Value); code = this.ReadCodePair(); break; case 21: v1.Y = double.Parse(code.Value); code = this.ReadCodePair(); break; case 31: v1.Z = double.Parse(code.Value); code = this.ReadCodePair(); break; case 12: v2.X = double.Parse(code.Value); code = this.ReadCodePair(); break; case 22: v2.Y = double.Parse(code.Value); code = this.ReadCodePair(); break; case 32: v2.Z = double.Parse(code.Value); code = this.ReadCodePair(); break; case 13: v3.X = double.Parse(code.Value); code = this.ReadCodePair(); break; case 23: v3.Y = double.Parse(code.Value); code = this.ReadCodePair(); break; case 33: v3.Z = double.Parse(code.Value); code = this.ReadCodePair(); break; case 70: face.EdgeFlags = (EdgeFlags) (int.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; } } face.FirstVertex = v0; face.SecondVertex = v1; face.ThirdVertex = v2; face.FourthVertex = v3; face.XData = xData; return face; }
private void WriteFace3D(Face3d face) { this.chunk.Write(100, SubclassMarker.Face3d); this.chunk.Write(10, face.FirstVertex.X); this.chunk.Write(20, face.FirstVertex.Y); this.chunk.Write(30, face.FirstVertex.Z); this.chunk.Write(11, face.SecondVertex.X); this.chunk.Write(21, face.SecondVertex.Y); this.chunk.Write(31, face.SecondVertex.Z); this.chunk.Write(12, face.ThirdVertex.X); this.chunk.Write(22, face.ThirdVertex.Y); this.chunk.Write(32, face.ThirdVertex.Z); this.chunk.Write(13, face.FourthVertex.X); this.chunk.Write(23, face.FourthVertex.Y); this.chunk.Write(33, face.FourthVertex.Z); this.chunk.Write(70, (short) face.EdgeFlags); this.WriteXData(face.XData); }
/// <summary> /// Decompose the actual polyface mesh faces in <see cref="Point">points</see> (one vertex polyface mesh face), /// <see cref="Line">lines</see> (two vertexes polyface mesh face) and <see cref="Face3d">3d faces</see> (three or four vertexes polyface mesh face). /// </summary> /// <returns>A list of <see cref="Face3d">3d faces</see> that made up the polyface mesh.</returns> public List <EntityObject> Explode() { List <EntityObject> entities = new List <EntityObject>(); foreach (PolyfaceMeshFace face in this.Faces) { if (face.VertexIndexes.Length == 1) { Point point = new Point { Location = this.Vertexes[Math.Abs(face.VertexIndexes[0]) - 1].Location, Color = this.Color, IsVisible = this.IsVisible, Layer = this.Layer, LineType = this.LineType, LineTypeScale = this.LineTypeScale, Lineweight = this.Lineweight, XData = this.XData }; entities.Add(point); continue; } if (face.VertexIndexes.Length == 2) { Line line = new Line { StartPoint = this.Vertexes[Math.Abs(face.VertexIndexes[0]) - 1].Location, EndPoint = this.Vertexes[Math.Abs(face.VertexIndexes[1]) - 1].Location, Color = this.Color, IsVisible = this.IsVisible, Layer = this.Layer, LineType = this.LineType, LineTypeScale = this.LineTypeScale, Lineweight = this.Lineweight, XData = this.XData }; entities.Add(line); continue; } EdgeFlags edgeVisibility = EdgeFlags.Visibles; int indexV1 = face.VertexIndexes[0]; int indexV2 = face.VertexIndexes[1]; int indexV3 = face.VertexIndexes[2]; // Polyface mesh faces are made of 3 or 4 vertexes, we will repeat the third vertex if the face vertexes is three int indexV4 = face.VertexIndexes.Length == 3 ? face.VertexIndexes[2] : face.VertexIndexes[3]; if (indexV1 < 0) { edgeVisibility = edgeVisibility | EdgeFlags.First; } if (indexV2 < 0) { edgeVisibility = edgeVisibility | EdgeFlags.Second; } if (indexV3 < 0) { edgeVisibility = edgeVisibility | EdgeFlags.Third; } if (indexV4 < 0) { edgeVisibility = edgeVisibility | EdgeFlags.Fourth; } Vector3 v1 = this.Vertexes[Math.Abs(indexV1) - 1].Location; Vector3 v2 = this.Vertexes[Math.Abs(indexV2) - 1].Location; Vector3 v3 = this.Vertexes[Math.Abs(indexV3) - 1].Location; Vector3 v4 = this.Vertexes[Math.Abs(indexV4) - 1].Location; Face3d face3d = new Face3d { FirstVertex = v1, SecondVertex = v2, ThirdVertex = v3, FourthVertex = v4, EdgeFlags = edgeVisibility, Color = this.Color, IsVisible = this.IsVisible, Layer = this.Layer, LineType = this.LineType, LineTypeScale = this.LineTypeScale, Lineweight = this.Lineweight, XData = this.XData }; entities.Add(face3d); } return(entities); }
private void WriteFace3D(Face3d face) { if (this.activeSection != StringCode.EntitiesSection && !this.isBlockEntities) { throw new InvalidDxfSectionException(this.activeSection, this.file); } this.WriteCodePair(0, face.CodeName); this.WriteCodePair(5, face.Handle); this.WriteCodePair(100, SubclassMarker.Entity); this.WriteEntityCommonCodes(face); this.WriteCodePair(100, SubclassMarker.Face3d); this.WriteCodePair(10, face.FirstVertex.X); this.WriteCodePair(20, face.FirstVertex.Y); this.WriteCodePair(30, face.FirstVertex.Z); this.WriteCodePair(11, face.SecondVertex.X); this.WriteCodePair(21, face.SecondVertex.Y); this.WriteCodePair(31, face.SecondVertex.Z); this.WriteCodePair(12, face.ThirdVertex.X); this.WriteCodePair(22, face.ThirdVertex.Y); this.WriteCodePair(32, face.ThirdVertex.Z); this.WriteCodePair(13, face.FourthVertex.X); this.WriteCodePair(23, face.FourthVertex.Y); this.WriteCodePair(33, face.FourthVertex.Z); this.WriteCodePair(70, Convert.ToInt32(face.EdgeFlags)); this.WriteXData(face.XData); }
/// <summary> /// Creates a new Face3d that is a copy of the current instance. /// </summary> /// <returns>A new Face3d that is a copy of this instance.</returns> public override object Clone() { Face3d entity = new Face3d { //EntityObject properties Layer = (Layer)this.layer.Clone(), LineType = (LineType)this.lineType.Clone(), Color = (AciColor)this.color.Clone(), Lineweight = (Lineweight)this.lineweight.Clone(), Transparency = (Transparency)this.transparency.Clone(), LineTypeScale = this.lineTypeScale, Normal = this.normal, //Face3d properties FirstVertex = this.firstVertex, SecondVertex = this.secondVertex, ThirdVertex = this.thirdVertex, FourthVertex = this.fourthVertex, EdgeFlags = this.edgeFlags }; foreach (XData data in this.XData.Values) entity.XData.Add((XData)data.Clone()); return entity; }
private Face3d ReadFace3d() { Vector3 v0 = Vector3.Zero; Vector3 v1 = Vector3.Zero; Vector3 v2 = Vector3.Zero; Vector3 v3 = Vector3.Zero; Face3dEdgeFlags flags = Face3dEdgeFlags.Visibles; List<XData> xData = new List<XData>(); this.chunk.Next(); while (this.chunk.Code != 0) { switch (this.chunk.Code) { case 10: v0.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 20: v0.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 30: v0.Z = this.chunk.ReadDouble(); this.chunk.Next(); break; case 11: v1.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 21: v1.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 31: v1.Z = this.chunk.ReadDouble(); this.chunk.Next(); break; case 12: v2.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 22: v2.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 32: v2.Z = this.chunk.ReadDouble(); this.chunk.Next(); break; case 13: v3.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 23: v3.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 33: v3.Z = this.chunk.ReadDouble(); this.chunk.Next(); break; case 70: flags = (Face3dEdgeFlags) this.chunk.ReadShort(); this.chunk.Next(); break; case 1001: string appId = this.DecodeEncodedNonAsciiCharacters(this.chunk.ReadString()); XData data = this.ReadXDataRecord(this.GetApplicationRegistry(appId)); xData.Add(data); break; default: if (this.chunk.Code >= 1000 && this.chunk.Code <= 1071) throw new Exception("The extended data of an entity must start with the application registry code."); this.chunk.Next(); break; } } Face3d entity = new Face3d { FirstVertex = v0, SecondVertex = v1, ThirdVertex = v2, FourthVertex = v3, EdgeFlags = flags }; entity.XData.AddRange(xData); return entity; }
private static void Face3d() { DxfDocument dxf = new DxfDocument(); Face3d face3d = new Face3d(); face3d.FirstVertex = new Vector3(0, 0, 0); face3d.SecondVertex = new Vector3(1, 0, 0); face3d.ThirdVertex = new Vector3(1, 1, 0); face3d.FourthVertex = new Vector3(0, 1, 0); dxf.AddEntity(face3d); dxf.Save("face.dxf"); dxf = DxfDocument.Load("face.dxf"); dxf.Save("face return.dxf"); }
private static void WriteDxfFile() { DxfDocument dxf = new DxfDocument(); //arc Arc arc = new Arc(new Vector3d(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("netDxf")); xdata.XDataRecord.Add(new XDataRecord(XDataCode.String, "extended data with netDxf")); 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 netDxf")); 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 Vector3d extrusion = new Vector3d(1, 1, 1); Vector3d centerWCS = new Vector3d(1, 1, 1); Vector3d centerOCS = MathHelper.Transform(centerWCS, extrusion, MathHelper.CoordinateSystem.World, MathHelper.CoordinateSystem.Object); Circle circle = new Circle(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 Vector3d(-3, -3, 0)); point1.Layer = new Layer("point"); point1.Color = new AciColor(30); Point point2 = new Point(new Vector3d(1, 1, 1)); point2.Layer = point1.Layer; point2.Layer.Color.Index = 9; point2.Normal = new Vector3d(1, 1, 1); dxf.AddEntity(point1); dxf.AddEntity(point2); //3dface Face3d face3D = new Face3d(new Vector3d(-5, -5, 5), new Vector3d(5, -5, 5), new Vector3d(5, 5, 5), new Vector3d(-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 Vector2d(-50, -50)); polyVertex.BeginThickness = 2; polyVertexes.Add(polyVertex); polyVertex = new PolylineVertex(new Vector2d(50, -50)); polyVertex.BeginThickness = 1; polyVertexes.Add(polyVertex); polyVertex = new PolylineVertex(new Vector2d(50, 50)); polyVertex.Bulge = 1; polyVertexes.Add(polyVertex); polyVertex = new PolylineVertex(new Vector2d(-50, 50)); polyVertexes.Add(polyVertex); Polyline polyline2d = new Polyline(polyVertexes, true); polyline2d.Layer = new Layer("polyline2d"); polyline2d.Layer.Color.Index = 5; polyline2d.Normal = new Vector3d(1, 1, 1); polyline2d.Elevation = 100.0; dxf.AddEntity(polyline2d); //lightweight polyline LightWeightPolylineVertex lwVertex; List<LightWeightPolylineVertex> lwVertexes = new List<LightWeightPolylineVertex>(); lwVertex = new LightWeightPolylineVertex(new Vector2d(-25, -25)); lwVertex.BeginThickness = 2; lwVertexes.Add(lwVertex); lwVertex = new LightWeightPolylineVertex(new Vector2d(25, -25)); lwVertex.BeginThickness = 1; lwVertexes.Add(lwVertex); lwVertex = new LightWeightPolylineVertex(new Vector2d(25, 25)); lwVertex.Bulge = 1; lwVertexes.Add(lwVertex); lwVertex = new LightWeightPolylineVertex(new Vector2d(-25, 25)); lwVertexes.Add(lwVertex); LightWeightPolyline lwPolyline = new LightWeightPolyline(lwVertexes, true); lwPolyline.Layer = new Layer("lwpolyline"); lwPolyline.Layer.Color.Index = 5; lwPolyline.Normal = new Vector3d(1, 1, 1); lwPolyline.Elevation = 100.0; dxf.AddEntity(lwPolyline); //line Line line = new Line(new Vector3d(0, 0, 0), new Vector3d(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 Vector3d(-50, -50, 0)); vertexes.Add(vertex); vertex = new Polyline3dVertex(new Vector3d(50, -50, 10)); vertexes.Add(vertex); vertex = new Polyline3dVertex(new Vector3d(50, 50, 25)); vertexes.Add(vertex); vertex = new Polyline3dVertex(new Vector3d(-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 Vector3d(-5, -5, 5), new Vector3d(5, 5, 5))); block.Entities.Add(new Line(new Vector3d(5, -5, 5), new Vector3d(-5, 5, 5))); //insert Insert insert = new Insert(block, new Vector3d(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!", Vector3d.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); }