├── DXFLib
├── ISectionParser.cs
├── DXFPoint.cs
├── EntityAttribute.cs
├── HeaderAttribute.cs
├── TableAttribute.cs
├── TextReaderExtensions.cs
├── DXFClass.cs
├── DXFDimStyleRecord.cs
├── DXFBlockRecord.cs
├── DXFAppIDRecord.cs
├── DXFBlock.cs
├── DXFLayerRecord.cs
├── DXFRay.cs
├── Properties
│ └── AssemblyInfo.cs
├── DXF3DFace.cs
├── ClassParser.cs
├── DXFCircle.cs
├── DXFInsert.cs
├── DXFPointEntity.cs
├── DXFSolid.cs
├── DXFTrace.cs
├── DXFLine.cs
├── DXFArc.cs
├── DXFTables.cs
├── DXFEntity.cs
├── DXFTolerance.cs
├── DXFEllipse.cs
├── DXFShape.cs
├── DXFUCSRecord.cs
├── DXFStyleRecord.cs
├── BlockParser.cs
├── EntityParser.cs
├── DXFVertex.cs
├── DXFGenericEntity.cs
├── DXFPolyLine.cs
├── DXFViewPortRecord.cs
├── DXFLWPolyLine.cs
├── DXFLineTypeRecord.cs
├── DXFLib.csproj
├── TableParser.cs
├── ClassDiagram.cd
├── DXFDocument.cs
├── HeaderParser.cs
├── DXFSpline.cs
├── DXFVPortRecord.cs
└── DXFHeader.cs
├── LocalTestRun.testrunconfig
├── DXFLib.vsmdi
├── DXFLib1.vsmdi
├── DXFLibTests
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ └── Resources.resx
├── UnitTest1.cs
├── DXFLibTests.csproj
├── AuthoringTests.txt
└── Resources
│ └── Test.dxf
└── DXFLib.sln
/DXFLib/ISectionParser.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | interface ISectionParser
9 | {
10 | void ParseGroupCode(DXFDocument doc, int groupcode, string value);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/DXFLib/DXFPoint.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFPoint
9 | {
10 | public double? X { get; set; }
11 | public double? Y { get; set; }
12 | public double? Z { get; set; }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/LocalTestRun.testrunconfig:
--------------------------------------------------------------------------------
1 |
2 |
3 | Dies ist eine standardmäßige Testlaufkonfiguration für einen lokalen Testlauf.
4 |
5 |
--------------------------------------------------------------------------------
/DXFLib/EntityAttribute.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [AttributeUsage(AttributeTargets.Class)]
9 | class EntityAttribute : Attribute
10 | {
11 | public string EntityName;
12 | public EntityAttribute(string Name)
13 | {
14 | this.EntityName = Name;
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/DXFLib/HeaderAttribute.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [AttributeUsage(AttributeTargets.Property)]
9 | class HeaderAttribute:Attribute
10 | {
11 | public string Name;
12 |
13 | public HeaderAttribute(string varname)
14 | {
15 | this.Name = varname;
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DXFLib.vsmdi:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DXFLib1.vsmdi:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DXFLib/TableAttribute.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [AttributeUsage(AttributeTargets.Property)]
9 | class TableAttribute : Attribute
10 | {
11 | public string TableName;
12 | public Type TableParser;
13 |
14 | public TableAttribute(string name, Type parser)
15 | {
16 | this.TableName = name;
17 | this.TableParser = parser;
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/DXFLib/TextReaderExtensions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.IO;
6 |
7 | namespace DXFLib
8 | {
9 | public static class TextReaderExtensions
10 | {
11 | public static void ReadDXFEntry(this TextReader obj, out int? groupcode, out string value)
12 | {
13 | string line = obj.ReadLine();
14 | if (line == null)
15 | {
16 | groupcode = null;
17 | value = null;
18 | return;
19 | }
20 | int buf;
21 | if (int.TryParse(line.Trim(), out buf))
22 | {
23 | groupcode = buf;
24 | value = obj.ReadLine();
25 | }
26 | else
27 | {
28 | value = null;
29 | groupcode = null;
30 | }
31 |
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/DXFLib/DXFClass.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFClass
9 | {
10 | [Flags]
11 | public enum Caps
12 | {
13 | NoOperationAllowed = 0,
14 | Erase = 1,
15 | Transform = 2,
16 | ColorChange = 4,
17 | LayerChange = 8,
18 | LineTypeChange = 16,
19 | LineTypeScale = 32,
20 | VisibilityChange = 64,
21 | AllOperationExceptCloning = 127,
22 | Cloning = 128,
23 | AllOp = 255,
24 | R13FormatProxy = 32768
25 | }
26 |
27 | public string DXFRecord { get; set; }
28 | public string AppName { get; set; }
29 | public string ClassName { get; set; }
30 | public Caps? ClassProxyCapabilities { get; set; }
31 | public bool? WasProxy { get; set; }
32 | public bool? IsEntity { get; set; }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/DXFLib/DXFDimStyleRecord.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFDimStyleRecord : DXFRecord
9 | {
10 | public string StyleName { get; set; }
11 | //TODO: weitere Felder unterstützen
12 | }
13 |
14 | class DXFDimStyleRecordParser : DXFRecordParser
15 | {
16 | private DXFDimStyleRecord _record;
17 | protected override DXFRecord currentRecord
18 | {
19 | get { return _record; }
20 | }
21 |
22 | protected override void createRecord(DXFDocument doc)
23 | {
24 | _record = new DXFDimStyleRecord();
25 | doc.Tables.DimStyles.Add(_record);
26 | }
27 |
28 | public override void ParseGroupCode(DXFDocument doc, int groupcode, string value)
29 | {
30 | base.ParseGroupCode(doc, groupcode, value);
31 | if (groupcode == 2)
32 | _record.StyleName = value;
33 | }
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/DXFLib/DXFBlockRecord.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFBlockRecord : DXFRecord
9 | {
10 | public string BlockName { get; set; }
11 | }
12 |
13 | class DXFBlockRecordParser : DXFRecordParser
14 | {
15 | private DXFBlockRecord _currentRecord;
16 | protected override DXFRecord currentRecord
17 | {
18 | get { return _currentRecord; }
19 | }
20 |
21 | protected override void createRecord(DXFDocument doc)
22 | {
23 | _currentRecord = new DXFBlockRecord();
24 | doc.Tables.Blocks.Add(_currentRecord);
25 | }
26 |
27 | public override void ParseGroupCode(DXFDocument doc, int groupcode, string value)
28 | {
29 | base.ParseGroupCode(doc, groupcode, value);
30 | if (groupcode == 2)
31 | {
32 | _currentRecord.BlockName = value;
33 | }
34 | }
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/DXFLib/DXFAppIDRecord.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFAppIDRecord : DXFRecord
9 | {
10 | public string ApplicationName { get; set; }
11 |
12 | }
13 |
14 | class DXFAppIDParser : DXFRecordParser
15 | {
16 | #region ISectionParser Member
17 |
18 | public override void ParseGroupCode(DXFDocument doc, int groupcode, string value)
19 | {
20 | base.ParseGroupCode(doc, groupcode, value);
21 | switch (groupcode)
22 | {
23 | case 2:
24 | _currentRecord.ApplicationName = value;
25 | break;
26 | }
27 | }
28 |
29 | #endregion
30 |
31 | DXFAppIDRecord _currentRecord;
32 | protected override DXFRecord currentRecord
33 | {
34 | get { return _currentRecord; }
35 | }
36 |
37 | protected override void createRecord(DXFDocument doc)
38 | {
39 | _currentRecord = new DXFAppIDRecord();
40 | doc.Tables.AppIDs.Add(_currentRecord);
41 | }
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/DXFLib/DXFBlock.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFBlock : DXFEntity
9 | {
10 | public string BlockName { get; set; }
11 | public int BlockFlags { get; set; }
12 | private DXFPoint basePoint = new DXFPoint();
13 | public DXFPoint BasePoint { get { return basePoint; } }
14 | public string XRef { get; set; }
15 |
16 | public override void ParseGroupCode(int groupcode, string value)
17 | {
18 | base.ParseGroupCode(groupcode, value);
19 | switch (groupcode)
20 | {
21 | case 2:
22 | case 3:
23 | BlockName = value;
24 | break;
25 | case 70:
26 | BlockFlags = int.Parse(value);
27 | break;
28 | case 1:
29 | XRef = value;
30 | break;
31 | case 10:
32 | BasePoint.X = double.Parse(value);
33 | break;
34 | case 20:
35 | basePoint.Y = double.Parse(value);
36 | break;
37 | case 30:
38 | basePoint.Z = double.Parse(value);
39 | break;
40 | }
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/DXFLib/DXFLayerRecord.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFLayerRecord : DXFRecord
9 | {
10 | public string LayerName { get; set; }
11 | public int Color { get; set; }
12 | public string LineType { get; set; }
13 | }
14 |
15 | class DXFLayerRecordParser : DXFRecordParser
16 | {
17 | private DXFLayerRecord _record;
18 | protected override DXFRecord currentRecord
19 | {
20 | get { return _record; }
21 | }
22 |
23 | protected override void createRecord(DXFDocument doc)
24 | {
25 | _record = new DXFLayerRecord();
26 | doc.Tables.Layers.Add(_record);
27 | }
28 |
29 | public override void ParseGroupCode(DXFDocument doc, int groupcode, string value)
30 | {
31 | base.ParseGroupCode(doc, groupcode, value);
32 | switch (groupcode)
33 | {
34 | case 2:
35 | _record.LayerName = value;
36 | break;
37 | case 62:
38 | _record.Color = int.Parse(value);
39 | break;
40 | case 6:
41 | _record.LineType = value;
42 | break;
43 | }
44 | }
45 | }
46 |
47 |
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/DXFLib/DXFRay.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("RAY")]
9 | public class DXFRay : DXFEntity
10 | {
11 | private DXFPoint startpoint = new DXFPoint();
12 | public DXFPoint Start { get { return startpoint; } }
13 |
14 | private DXFPoint direction = new DXFPoint();
15 | public DXFPoint Direction { get { return direction; } }
16 |
17 | public override void ParseGroupCode(int groupcode, string value)
18 | {
19 | base.ParseGroupCode(groupcode, value);
20 | switch (groupcode)
21 | {
22 | case 10:
23 | Start.X = double.Parse(value);
24 | break;
25 | case 20:
26 | Start.Y = double.Parse(value);
27 | break;
28 | case 30:
29 | Start.Z = double.Parse(value);
30 | break;
31 | case 11:
32 | Direction.X = double.Parse(value);
33 | break;
34 | case 21:
35 | Direction.Y = double.Parse(value);
36 | break;
37 | case 31:
38 | Direction.Z = double.Parse(value);
39 | break;
40 | }
41 | }
42 | }
43 |
44 | [Entity("XLINE")]
45 | public class DXFXLine : DXFRay
46 | {
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/DXFLibTests/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die mit einer Assembly verknüpft sind.
8 | [assembly: AssemblyTitle("DXFLibTests")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Microsoft")]
12 | [assembly: AssemblyProduct("DXFLibTests")]
13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
18 | // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("a0fdc2bc-a4ab-4681-8f5e-36cace85a8d0")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | // Sie können alle Werte angeben oder die standardmäßigen Revisions- und Buildnummern
33 | // übernehmen, indem Sie "*" eingeben:
34 | [assembly: AssemblyVersion("1.0.0.0")]
35 | [assembly: AssemblyFileVersion("1.0.0.0")]
36 |
--------------------------------------------------------------------------------
/DXFLib/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // Allgemeine Informationen über eine Assembly werden über die folgenden
6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
7 | // die mit einer Assembly verknüpft sind.
8 | [assembly: AssemblyTitle("DXFLib")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Microsoft")]
12 | [assembly: AssemblyProduct("DXFLib")]
13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
18 | // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
19 | // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
20 | [assembly: ComVisible(false)]
21 |
22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
23 | [assembly: Guid("544e3f16-5baa-4772-9e7b-fac2ca4c079e")]
24 |
25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
26 | //
27 | // Hauptversion
28 | // Nebenversion
29 | // Buildnummer
30 | // Revision
31 | //
32 | // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
33 | // übernehmen, indem Sie "*" eingeben:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/DXFLib/DXF3DFace.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("3DFACE")]
9 | public class DXF3DFace : DXFEntity
10 | {
11 | private DXFPoint[] corners = new DXFPoint[] { new DXFPoint(), new DXFPoint(), new DXFPoint() };
12 | public DXFPoint[] Corners { get { return corners; } }
13 |
14 | [Flags]
15 | public enum FlagsEnum
16 | {
17 | FirstEdgeInvisible = 1,
18 | SecondEdgeInvisible = 2,
19 | ThirdEdgeInvisible = 4,
20 | FourthEdgeInvisible = 8
21 | }
22 |
23 | public FlagsEnum Flags { get; set; }
24 |
25 | public override void ParseGroupCode(int groupcode, string value)
26 | {
27 | base.ParseGroupCode(groupcode, value);
28 | if (groupcode >= 10 && groupcode <= 33)
29 | {
30 | int idx = groupcode % 10;
31 | int component = groupcode / 10;
32 | switch (component)
33 | {
34 | case 1:
35 | Corners[idx].X = double.Parse(value);
36 | break;
37 | case 2:
38 | Corners[idx].Y = double.Parse(value);
39 | break;
40 | case 3:
41 | Corners[idx].Z = double.Parse(value);
42 | break;
43 | }
44 | }
45 | else if (groupcode == 70)
46 | {
47 | Flags = (FlagsEnum)Enum.Parse(typeof(FlagsEnum), value);
48 | }
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/DXFLib/ClassParser.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | class ClassParser:ISectionParser
9 | {
10 | private DXFClass currentClass;
11 | #region ISectionParser Member
12 |
13 | public void ParseGroupCode(DXFDocument doc, int groupcode, string value)
14 | {
15 | switch (groupcode)
16 | {
17 | case 0:
18 | currentClass = new DXFClass();
19 | doc.Classes.Add(currentClass);
20 | break;
21 | case 1:
22 | currentClass.DXFRecord = value;
23 | break;
24 | case 2:
25 | currentClass.ClassName = value;
26 | break;
27 | case 3:
28 | currentClass.AppName = value;
29 | break;
30 | case 90:
31 | currentClass.ClassProxyCapabilities = (DXFClass.Caps)Enum.Parse(typeof(DXFClass.Caps), value);
32 | break;
33 | case 280:
34 | if (int.Parse(value) != 0)
35 | currentClass.WasProxy = true;
36 | else
37 | currentClass.WasProxy = false;
38 | break;
39 | case 281:
40 | if (int.Parse(value) != 0)
41 | currentClass.IsEntity = true;
42 | else
43 | currentClass.IsEntity = false;
44 | break;
45 | }
46 | }
47 |
48 | #endregion
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/DXFLib/DXFCircle.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("CIRCLE")]
9 | public class DXFCircle : DXFEntity
10 | {
11 | public double Thickness { get; set; }
12 | private DXFPoint center = new DXFPoint();
13 | public DXFPoint Center { get { return center; } }
14 |
15 | public double Radius { get; set; }
16 |
17 | private DXFPoint extrusion = new DXFPoint();
18 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
19 |
20 | public override void ParseGroupCode(int groupcode, string value)
21 | {
22 | base.ParseGroupCode(groupcode, value);
23 | switch (groupcode)
24 | {
25 | case 39:
26 | Thickness = double.Parse(value);
27 | break;
28 | case 10:
29 | Center.X = double.Parse(value);
30 | break;
31 | case 20:
32 | Center.Y = double.Parse(value);
33 | break;
34 | case 30:
35 | Center.Z = double.Parse(value);
36 | break;
37 | case 40:
38 | Radius = double.Parse(value);
39 | break;
40 | case 210:
41 | ExtrusionDirection.X = double.Parse(value);
42 | break;
43 | case 220:
44 | ExtrusionDirection.Y = double.Parse(value);
45 | break;
46 | case 230:
47 | ExtrusionDirection.Z = double.Parse(value);
48 | break;
49 | }
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/DXFLib/DXFInsert.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("INSERT")]
9 | public class DXFInsert : DXFEntity
10 | {
11 | public string BlockName { get; set; }
12 | private DXFPoint insertionPoint = new DXFPoint();
13 | public DXFPoint InsertionPoint { get { return insertionPoint; } }
14 | private DXFPoint scaling = new DXFPoint();
15 | public DXFPoint Scaling { get { return scaling; } }
16 | public double? RotationAngle { get; set; }
17 | private DXFPoint extrusionDirection = new DXFPoint();
18 | public DXFPoint ExtrusionDirection { get { return extrusionDirection; } }
19 |
20 | public override void ParseGroupCode(int groupcode, string value)
21 | {
22 | base.ParseGroupCode(groupcode, value);
23 | switch (groupcode)
24 | {
25 | case 2:
26 | BlockName = value;
27 | break;
28 | case 10:
29 | InsertionPoint.X = double.Parse(value);
30 | break;
31 | case 20:
32 | InsertionPoint.Y = double.Parse(value);
33 | break;
34 | case 30:
35 | InsertionPoint.Z = double.Parse(value);
36 | break;
37 | case 41:
38 | Scaling.X = double.Parse(value);
39 | break;
40 | case 42:
41 | Scaling.Y = double.Parse(value);
42 | break;
43 | case 43:
44 | Scaling.Z = double.Parse(value);
45 | break;
46 | }
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/DXFLib/DXFPointEntity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("POINT")]
9 | public class DXFPointEntity : DXFEntity
10 | {
11 | private DXFPoint location = new DXFPoint();
12 | public DXFPoint Location { get { return location; } }
13 |
14 | public double Thickness { get; set; }
15 |
16 | private DXFPoint extrusion = new DXFPoint();
17 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
18 |
19 | public double XAxisAngle { get; set; }
20 |
21 | public override void ParseGroupCode(int groupcode, string value)
22 | {
23 | base.ParseGroupCode(groupcode, value);
24 | switch (groupcode)
25 | {
26 | case 10:
27 | Location.X = double.Parse(value);
28 | break;
29 | case 20:
30 | Location.Y = double.Parse(value);
31 | break;
32 | case 30:
33 | Location.Z = double.Parse(value);
34 | break;
35 | case 39:
36 | Thickness = double.Parse(value);
37 | break;
38 | case 50:
39 | XAxisAngle = double.Parse(value);
40 | break;
41 | case 210:
42 | ExtrusionDirection.X = double.Parse(value);
43 | break;
44 | case 220:
45 | ExtrusionDirection.Y = double.Parse(value);
46 | break;
47 | case 230:
48 | ExtrusionDirection.Z = double.Parse(value);
49 | break;
50 | }
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/DXFLib/DXFSolid.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("SOLID")]
9 | public class DXFSolid : DXFEntity
10 | {
11 | private DXFPoint extrusion = new DXFPoint();
12 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
13 | private DXFPoint[] corners = new DXFPoint[] { new DXFPoint(), new DXFPoint(), new DXFPoint(),new DXFPoint() };
14 | public DXFPoint[] Corners { get { return corners; } }
15 |
16 | public override void ParseGroupCode(int groupcode, string value)
17 | {
18 | base.ParseGroupCode(groupcode, value);
19 | if (groupcode >= 10 && groupcode <= 33)
20 | {
21 | int idx = groupcode % 10;
22 | int component = groupcode / 10;
23 | switch (component)
24 | {
25 | case 1:
26 | Corners[idx].X = double.Parse(value);
27 | break;
28 | case 2:
29 | Corners[idx].Y = double.Parse(value);
30 | break;
31 | case 3:
32 | Corners[idx].Z = double.Parse(value);
33 | break;
34 | }
35 | }
36 |
37 | switch (groupcode)
38 | {
39 | case 210:
40 | ExtrusionDirection.X = double.Parse(value);
41 | break;
42 | case 220:
43 | ExtrusionDirection.Y = double.Parse(value);
44 | break;
45 | case 230:
46 | ExtrusionDirection.Z = double.Parse(value);
47 | break;
48 | }
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/DXFLib.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 10.00
3 | # Visual Studio 2008
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DXFLib", "DXFLib\DXFLib.csproj", "{476FA4C4-FA1D-4A2A-985B-8CBF50F82251}"
5 | EndProject
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DXFLibTests", "DXFLibTests\DXFLibTests.csproj", "{193BF9DD-2857-4AFC-BB21-F1E8EE4E29D7}"
7 | EndProject
8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C43810B4-B2F9-434F-B36E-9E96AB42D93A}"
9 | ProjectSection(SolutionItems) = preProject
10 | DXFLib1.vsmdi = DXFLib1.vsmdi
11 | DXFLib2.vsmdi = DXFLib2.vsmdi
12 | DXFLib3.vsmdi = DXFLib3.vsmdi
13 | DXFLib4.vsmdi = DXFLib4.vsmdi
14 | LocalTestRun.testrunconfig = LocalTestRun.testrunconfig
15 | EndProjectSection
16 | EndProject
17 | Global
18 | GlobalSection(TestCaseManagementSettings) = postSolution
19 | CategoryFile = DXFLib4.vsmdi
20 | EndGlobalSection
21 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
22 | Debug|Any CPU = Debug|Any CPU
23 | Release|Any CPU = Release|Any CPU
24 | EndGlobalSection
25 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
26 | {476FA4C4-FA1D-4A2A-985B-8CBF50F82251}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27 | {476FA4C4-FA1D-4A2A-985B-8CBF50F82251}.Debug|Any CPU.Build.0 = Debug|Any CPU
28 | {476FA4C4-FA1D-4A2A-985B-8CBF50F82251}.Release|Any CPU.ActiveCfg = Release|Any CPU
29 | {476FA4C4-FA1D-4A2A-985B-8CBF50F82251}.Release|Any CPU.Build.0 = Release|Any CPU
30 | {193BF9DD-2857-4AFC-BB21-F1E8EE4E29D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
31 | {193BF9DD-2857-4AFC-BB21-F1E8EE4E29D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
32 | {193BF9DD-2857-4AFC-BB21-F1E8EE4E29D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
33 | {193BF9DD-2857-4AFC-BB21-F1E8EE4E29D7}.Release|Any CPU.Build.0 = Release|Any CPU
34 | EndGlobalSection
35 | GlobalSection(SolutionProperties) = preSolution
36 | HideSolutionNode = FALSE
37 | EndGlobalSection
38 | EndGlobal
39 |
--------------------------------------------------------------------------------
/DXFLib/DXFTrace.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("TRACE")]
9 | public class DXFTrace : DXFEntity
10 | {
11 | private DXFPoint extrusion = new DXFPoint();
12 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
13 | private DXFPoint[] corners = new DXFPoint[] { new DXFPoint(), new DXFPoint(), new DXFPoint() };
14 | public DXFPoint[] Corners { get { return corners; } }
15 |
16 | public double Thickness { get; set; }
17 |
18 | public override void ParseGroupCode(int groupcode, string value)
19 | {
20 | base.ParseGroupCode(groupcode, value);
21 | if (groupcode >= 10 && groupcode <= 33)
22 | {
23 | int idx = groupcode % 10;
24 | int component = groupcode / 10;
25 | switch (component)
26 | {
27 | case 1:
28 | Corners[idx].X = double.Parse(value);
29 | break;
30 | case 2:
31 | Corners[idx].Y = double.Parse(value);
32 | break;
33 | case 3:
34 | Corners[idx].Z = double.Parse(value);
35 | break;
36 | }
37 | }
38 |
39 | switch (groupcode)
40 | {
41 | case 39:
42 | Thickness = double.Parse(value);
43 | break;
44 | case 210:
45 | ExtrusionDirection.X = double.Parse(value);
46 | break;
47 | case 220:
48 | ExtrusionDirection.Y = double.Parse(value);
49 | break;
50 | case 230:
51 | ExtrusionDirection.Z = double.Parse(value);
52 | break;
53 | }
54 | }
55 |
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/DXFLib/DXFLine.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("LINE")]
9 | public class DXFLine : DXFEntity
10 | {
11 | private DXFPoint start = new DXFPoint();
12 | public DXFPoint Start { get { return start; } }
13 |
14 | private DXFPoint end = new DXFPoint();
15 | public DXFPoint End { get { return end; } }
16 |
17 | public double Thickness { get; set; }
18 |
19 | private DXFPoint extrusion = new DXFPoint();
20 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
21 |
22 | public override void ParseGroupCode(int groupcode, string value)
23 | {
24 | base.ParseGroupCode(groupcode, value);
25 | switch (groupcode)
26 | {
27 | case 39:
28 | Thickness = double.Parse(value);
29 | break;
30 | case 10:
31 | Start.X = double.Parse(value);
32 | break;
33 | case 20:
34 | Start.Y = double.Parse(value);
35 | break;
36 | case 30:
37 | Start.Z = double.Parse(value);
38 | break;
39 | case 11:
40 | End.X = double.Parse(value);
41 | break;
42 | case 21:
43 | End.Y = double.Parse(value);
44 | break;
45 | case 31:
46 | End.Z = double.Parse(value);
47 | break;
48 | case 210:
49 | ExtrusionDirection.X = double.Parse(value);
50 | break;
51 | case 220:
52 | ExtrusionDirection.Y = double.Parse(value);
53 | break;
54 | case 230:
55 | ExtrusionDirection.Z = double.Parse(value);
56 | break;
57 |
58 | }
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/DXFLib/DXFArc.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("ARC")]
9 | public class DXFArc : DXFEntity
10 | {
11 | public double Thickness { get; set; }
12 | private DXFPoint center = new DXFPoint();
13 | public DXFPoint Center { get { return center; } }
14 |
15 | public double Radius { get; set; }
16 |
17 | public double StartAngle { get; set; }
18 | public double EndAngle { get; set; }
19 |
20 | private DXFPoint extrusion = new DXFPoint();
21 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
22 |
23 | public override void ParseGroupCode(int groupcode, string value)
24 | {
25 | base.ParseGroupCode(groupcode, value);
26 | switch (groupcode)
27 | {
28 | case 39:
29 | Thickness = double.Parse(value);
30 | break;
31 | case 10:
32 | Center.X = double.Parse(value);
33 | break;
34 | case 20:
35 | Center.Y = double.Parse(value);
36 | break;
37 | case 30:
38 | Center.Z = double.Parse(value);
39 | break;
40 | case 40:
41 | Radius = double.Parse(value);
42 | break;
43 | case 50:
44 | StartAngle = double.Parse(value);
45 | break;
46 | case 51:
47 | EndAngle = double.Parse(value);
48 | break;
49 | case 210:
50 | ExtrusionDirection.X = double.Parse(value);
51 | break;
52 | case 220:
53 | ExtrusionDirection.Y = double.Parse(value);
54 | break;
55 | case 230:
56 | ExtrusionDirection.Z = double.Parse(value);
57 | break;
58 | }
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/DXFLib/DXFTables.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFTables
9 | {
10 | private List appids = new List();
11 | [Table("APPID",typeof(DXFAppIDParser))]
12 | public List AppIDs { get { return appids; } }
13 |
14 | private List blocks = new List();
15 | [Table("BLOCK_RECORD", typeof(DXFBlockRecordParser))]
16 | public List Blocks { get { return blocks; } }
17 |
18 | private List dimstyles = new List();
19 | [Table("DIMSTYLE", typeof(DXFDimStyleRecordParser))]
20 | public List DimStyles { get { return dimstyles; } }
21 |
22 | private List layers = new List();
23 | [Table("LAYER", typeof(DXFLayerRecordParser))]
24 | public List Layers { get { return layers; } }
25 |
26 | private List linetypes = new List();
27 | [Table("LTYPE", typeof(DXFLineTypeRecordParser))]
28 | public List LineTypes { get { return linetypes; } }
29 |
30 | private List styles = new List();
31 | [Table("STYLE", typeof(DXFStyleRecordParser))]
32 | public List Styles { get { return styles; } }
33 |
34 | private List ucs = new List();
35 | [Table("UCS", typeof(DXFUCSRecordParser))]
36 | public List UCS { get { return ucs; } }
37 |
38 | private List views = new List();
39 | [Table("VIEW", typeof(DXFViewRecordParser))]
40 | public List Views { get { return views; } }
41 |
42 | private List vports = new List();
43 | [Table("VPORT", typeof(DXFVPortRecordParser))]
44 | public List VPorts { get { return vports; } }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/DXFLib/DXFEntity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFEntity
9 | {
10 | public string EntityType { get; set; }
11 | public string Handle { get; set; }
12 | private List classhierarchy = new List();
13 | public List ClassHierarchy { get { return classhierarchy; } }
14 | public bool IsInPaperSpace { get; set; }
15 | public string LayerName { get; set; }
16 | public string LineType { get; set; }
17 | public int ColorNumber { get; set; }
18 | public double LineTypeScale { get; set; }
19 | public bool IsInvisible { get; set; }
20 |
21 | public virtual bool HasChildren { get { return false; } }
22 | private List children = new List();
23 | public List Children { get { return children; } }
24 |
25 | public virtual void ParseGroupCode(int groupcode, string value)
26 | {
27 | switch (groupcode)
28 | {
29 | case 0:
30 | EntityType = value;
31 | break;
32 | case 5:
33 | Handle = value;
34 | break;
35 | case 100:
36 | ClassHierarchy.Add(value);
37 | break;
38 | case 67:
39 | IsInPaperSpace = int.Parse(value) == 1;
40 | break;
41 | case 8:
42 | LayerName = value;
43 | break;
44 | case 6:
45 | LineType = value;
46 | break;
47 | case 62:
48 | ColorNumber = int.Parse(value);
49 | break;
50 | case 48:
51 | LineTypeScale = double.Parse(value);
52 | break;
53 | case 60:
54 | IsInvisible = int.Parse(value) == 1;
55 | break;
56 | }
57 | }
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/DXFLib/DXFTolerance.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("TOLERANCE")]
9 | public class DXFTolerance : DXFEntity
10 | {
11 | public string DimensionStyle { get; set; }
12 | private DXFPoint insertion = new DXFPoint();
13 | public DXFPoint InsertionPoint { get { return insertion; } }
14 | private DXFPoint extrusion = new DXFPoint();
15 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
16 | private DXFPoint direction = new DXFPoint();
17 | public DXFPoint Direction { get { return direction; } }
18 |
19 | public override void ParseGroupCode(int groupcode, string value)
20 | {
21 | base.ParseGroupCode(groupcode, value);
22 | switch (groupcode)
23 | {
24 | case 3:
25 | DimensionStyle = value;
26 | break;
27 | case 10:
28 | InsertionPoint.X = double.Parse(value);
29 | break;
30 | case 20:
31 | InsertionPoint.Y = double.Parse(value);
32 | break;
33 | case 30:
34 | InsertionPoint.Z = double.Parse(value);
35 | break;
36 | case 11:
37 | Direction.X = double.Parse(value);
38 | break;
39 | case 21:
40 | Direction.Y = double.Parse(value);
41 | break;
42 | case 31:
43 | Direction.Z = double.Parse(value);
44 | break;
45 | case 210:
46 | ExtrusionDirection.X = double.Parse(value);
47 | break;
48 | case 220:
49 | ExtrusionDirection.Y = double.Parse(value);
50 | break;
51 | case 230:
52 | ExtrusionDirection.Z = double.Parse(value);
53 | break;
54 | }
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/DXFLib/DXFEllipse.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFEllipse : DXFEntity
9 | {
10 | private DXFPoint center = new DXFPoint();
11 | public DXFPoint Center { get { return center; } }
12 |
13 | private DXFPoint mainaxis = new DXFPoint();
14 | public DXFPoint MainAxis { get { return mainaxis; } }
15 |
16 | private DXFPoint extrusion = new DXFPoint();
17 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
18 |
19 | public double AxisRatio { get; set; }
20 |
21 | public double StartParam { get; set; }
22 | public double EndParam { get; set; }
23 |
24 | public override void ParseGroupCode(int groupcode, string value)
25 | {
26 | base.ParseGroupCode(groupcode, value);
27 | switch (groupcode)
28 | {
29 | case 10:
30 | Center.X = double.Parse(value);
31 | break;
32 | case 20:
33 | Center.Y = double.Parse(value);
34 | break;
35 | case 30:
36 | Center.Z = double.Parse(value);
37 | break;
38 | case 11:
39 | MainAxis.X = double.Parse(value);
40 | break;
41 | case 21:
42 | MainAxis.Y = double.Parse(value);
43 | break;
44 | case 31:
45 | MainAxis.Z = double.Parse(value);
46 | break;
47 | case 210:
48 | ExtrusionDirection.X = double.Parse(value);
49 | break;
50 | case 220:
51 | ExtrusionDirection.Y = double.Parse(value);
52 | break;
53 | case 230:
54 | ExtrusionDirection.Z = double.Parse(value);
55 | break;
56 | case 40:
57 | AxisRatio = double.Parse(value);
58 | break;
59 | case 41:
60 | StartParam = double.Parse(value);
61 | break;
62 | case 42:
63 | EndParam = double.Parse(value);
64 | break;
65 | }
66 | }
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/DXFLib/DXFShape.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("SHAPE")]
9 | class DXFShape : DXFEntity
10 | {
11 | public double Thickness { get; set; }
12 | private DXFPoint insertion = new DXFPoint();
13 | public DXFPoint InsertionPoint { get { return insertion; } }
14 | public double Size { get; set; }
15 | public string ShapeName { get; set; }
16 | public double RotationAngle { get; set; }
17 | public double RelativeXScale { get; set; }
18 | public double ObliqueAngle { get; set; }
19 | private DXFPoint extrusion = new DXFPoint();
20 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
21 |
22 | public override void ParseGroupCode(int groupcode, string value)
23 | {
24 | base.ParseGroupCode(groupcode, value);
25 | switch (groupcode)
26 | {
27 | case 39:
28 | Thickness = double.Parse(value);
29 | break;
30 | case 10:
31 | InsertionPoint.X = double.Parse(value);
32 | break;
33 | case 20:
34 | InsertionPoint.Y = double.Parse(value);
35 | break;
36 | case 30:
37 | InsertionPoint.Z = double.Parse(value);
38 | break;
39 | case 40:
40 | Size = double.Parse(value);
41 | break;
42 | case 2:
43 | ShapeName = value;
44 | break;
45 | case 50:
46 | RotationAngle = double.Parse(value);
47 | break;
48 | case 41:
49 | RelativeXScale = double.Parse(value);
50 | break;
51 | case 51:
52 | ObliqueAngle = double.Parse(value);
53 | break;
54 | case 210:
55 | ExtrusionDirection.X = double.Parse(value);
56 | break;
57 | case 220:
58 | ExtrusionDirection.Y = double.Parse(value);
59 | break;
60 | case 230:
61 | ExtrusionDirection.Z = double.Parse(value);
62 | break;
63 | }
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/DXFLib/DXFUCSRecord.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFUCSRecord : DXFRecord
9 | {
10 | public string UCSName { get; set; }
11 | private DXFPoint origin = new DXFPoint();
12 | public DXFPoint Origin { get { return origin; } }
13 | private DXFPoint xaxis=new DXFPoint();
14 | public DXFPoint XAxis { get { return xaxis; } }
15 | private DXFPoint yaxis = new DXFPoint();
16 | public DXFPoint YAxis { get { return yaxis; } }
17 | }
18 |
19 | class DXFUCSRecordParser : DXFRecordParser
20 | {
21 | private DXFUCSRecord _record;
22 | protected override DXFRecord currentRecord
23 | {
24 | get { return _record; }
25 | }
26 |
27 | protected override void createRecord(DXFDocument doc)
28 | {
29 | _record = new DXFUCSRecord();
30 | doc.Tables.UCS.Add(_record);
31 | }
32 |
33 | public override void ParseGroupCode(DXFDocument doc, int groupcode, string value)
34 | {
35 | base.ParseGroupCode(doc, groupcode, value);
36 | switch (groupcode)
37 | {
38 | case 2:
39 | _record.UCSName = value;
40 | break;
41 | case 10:
42 | _record.Origin.X = double.Parse(value);
43 | break;
44 | case 20:
45 | _record.Origin.Y = double.Parse(value);
46 | break;
47 | case 30:
48 | _record.Origin.Z = double.Parse(value);
49 | break;
50 | case 11:
51 | _record.XAxis.X = double.Parse(value);
52 | break;
53 | case 21:
54 | _record.XAxis.Y = double.Parse(value);
55 | break;
56 | case 31:
57 | _record.XAxis.Z = double.Parse(value);
58 | break;
59 | case 12:
60 | _record.YAxis.X = double.Parse(value);
61 | break;
62 | case 22:
63 | _record.YAxis.Y = double.Parse(value);
64 | break;
65 | case 32:
66 | _record.YAxis.Z = double.Parse(value);
67 | break;
68 | }
69 | }
70 | }
71 |
72 | }
73 |
--------------------------------------------------------------------------------
/DXFLib/DXFStyleRecord.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFStyleRecord : DXFRecord
9 | {
10 | public string StyleName { get; set; }
11 | public double FixedHeight { get; set; }
12 | public double WidthFactor { get; set; }
13 | public double ObliqueAngle { get; set; }
14 | [Flags]
15 | public enum TextGenerationFlags
16 | {
17 | MirrorX=2,
18 | MirrorY=4
19 | }
20 |
21 | public TextGenerationFlags GenerationFlags { get; set; }
22 |
23 | public double LastUsedHeight { get; set; }
24 | public string FontFileName { get; set; }
25 | public string BigFontFileName { get; set; }
26 | }
27 |
28 | class DXFStyleRecordParser : DXFRecordParser
29 | {
30 | DXFStyleRecord _record;
31 |
32 | protected override DXFRecord currentRecord
33 | {
34 | get { return _record; }
35 | }
36 |
37 | protected override void createRecord(DXFDocument doc)
38 | {
39 | _record = new DXFStyleRecord();
40 | doc.Tables.Styles.Add(_record);
41 | }
42 |
43 | public override void ParseGroupCode(DXFDocument doc, int groupcode, string value)
44 | {
45 | base.ParseGroupCode(doc, groupcode, value);
46 | switch (groupcode)
47 | {
48 | case 2:
49 | _record.StyleName = value;
50 | break;
51 | case 40:
52 | _record.FixedHeight = double.Parse(value);
53 | break;
54 | case 41:
55 | _record.WidthFactor = double.Parse(value);
56 | break;
57 | case 50:
58 | _record.ObliqueAngle = double.Parse(value);
59 | break;
60 | case 71:
61 | _record.GenerationFlags = (DXFStyleRecord.TextGenerationFlags)Enum.Parse(typeof(DXFStyleRecord.TextGenerationFlags), value);
62 | break;
63 | case 42:
64 | _record.LastUsedHeight = double.Parse(value);
65 | break;
66 | case 3:
67 | _record.FontFileName = value;
68 | break;
69 | case 4:
70 | _record.BigFontFileName = value;
71 | break;
72 | }
73 | }
74 | }
75 |
76 | }
77 |
--------------------------------------------------------------------------------
/DXFLib/BlockParser.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | class BlockParser:ISectionParser
9 | {
10 | #region ISectionParser Member
11 |
12 | private DXFBlock current = null;
13 | private bool parsingBlock = false;
14 | private EntityParser parser = new EntityParser();
15 | private DXFDocument container;
16 | public static List groups = new List();
17 | public void ParseGroupCode(DXFDocument doc, int groupcode, string value)
18 | {
19 | if (groupcode == 0)
20 | {
21 | if (current == null)
22 | groups.Add(value + " OUTSIDE");
23 | else
24 | groups.Add(value);
25 | }
26 | if (current == null)
27 | {
28 | if (groupcode == 0 && value == "BLOCK")
29 | {
30 | current = new DXFBlock();
31 | container = new DXFDocument();
32 | parsingBlock = true;
33 | }
34 | }
35 | else
36 | {
37 | if (parsingBlock)
38 | {
39 | if (groupcode == 0 && value == "ENDBLK")
40 | {
41 | current.Children.AddRange(container.Entities);
42 | doc.Blocks.Add(current);
43 | current = null;
44 | container = null;
45 | }
46 | else if (groupcode == 0)
47 | {
48 | parsingBlock = false;
49 | parser.ParseGroupCode(container, groupcode, value);
50 | }
51 | else
52 | current.ParseGroupCode(groupcode, value);
53 | }
54 | else
55 | {
56 | if (groupcode == 0 && value == "ENDBLK")
57 | {
58 | current.Children.AddRange(container.Entities);
59 | doc.Blocks.Add(current);
60 | current = null;
61 | container = null;
62 | }
63 | else
64 | {
65 | parser.ParseGroupCode(container, groupcode, value);
66 | }
67 | }
68 | }
69 | }
70 |
71 | #endregion
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/DXFLib/EntityParser.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Reflection;
6 |
7 | namespace DXFLib
8 | {
9 | class EntityParser : ISectionParser
10 | {
11 | private Dictionary Entities = new Dictionary();
12 | private DXFEntity currentEntity = null;
13 | private Stack stack = new Stack();
14 | #region ISectionParser Member
15 |
16 | public void ParseGroupCode(DXFDocument doc, int groupcode, string value)
17 | {
18 | if (Entities.Count == 0)
19 | {
20 | foreach (Type t in Assembly.GetCallingAssembly().GetTypes())
21 | {
22 | if (t.IsClass && !t.IsAbstract)
23 | {
24 | object[] attrs = t.GetCustomAttributes(false);
25 | foreach(object attr in attrs)
26 | {
27 | EntityAttribute casted = attr as EntityAttribute;
28 | if (casted != null)
29 | {
30 | Entities.Add(casted.EntityName, t);
31 | }
32 | }
33 | }
34 | }
35 | }
36 | if (groupcode == 0)
37 | {
38 | if (value == "SEQEND")
39 | {
40 | if (stack.Count != 0)
41 | currentEntity = stack.Pop();
42 | }
43 | if (Entities.ContainsKey(value))
44 | {
45 | if (currentEntity!=null && currentEntity.HasChildren)
46 | {
47 | stack.Push(currentEntity);
48 | }
49 | currentEntity = Activator.CreateInstance(Entities[value]) as DXFEntity;
50 | if (stack.Count>0 && stack.Peek().HasChildren)
51 | {
52 | stack.Peek().Children.Add(currentEntity);
53 | }
54 | else
55 | {
56 | doc.Entities.Add(currentEntity);
57 | }
58 | }
59 | else
60 | {
61 | currentEntity = null;
62 | //TODO: warning
63 | }
64 | }
65 | if (currentEntity != null)
66 | {
67 | currentEntity.ParseGroupCode(groupcode, value);
68 | }
69 | }
70 |
71 | #endregion
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/DXFLib/DXFVertex.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("VERTEX")]
9 | public class DXFVertex : DXFEntity
10 | {
11 | private DXFPoint location = new DXFPoint();
12 | public DXFPoint Location { get { return location; } }
13 | public double StartWidth { get; set; }
14 | public double EndWidth { get; set; }
15 | public double Buldge { get; set; }
16 |
17 | [Flags]
18 | public enum FlagsEnum
19 | {
20 | IsExtraVertex = 1,
21 | CurveFitTangentDefined = 2,
22 | NotUsed = 4,
23 | SplineVertexCreatedForSplineFitting = 8,
24 | SplineFrameControlPoint = 16,
25 | PolyLineVertex = 32,
26 | PolyLineMesh = 64,
27 | PolyFaceMesh = 128
28 | }
29 |
30 | public FlagsEnum Flags { get; set; }
31 |
32 | private int[] indices = { 0, 0, 0, 0 };
33 | public int[] PolyfaceIndices { get { return indices; } }
34 |
35 | public double CurveFitTangentDirection { get; set; }
36 |
37 | public override void ParseGroupCode(int groupcode, string value)
38 | {
39 | base.ParseGroupCode(groupcode, value);
40 | switch (groupcode)
41 | {
42 | case 10:
43 | Location.X = double.Parse(value);
44 | break;
45 | case 20:
46 | Location.Y = double.Parse(value);
47 | break;
48 | case 30:
49 | Location.Z = double.Parse(value);
50 | break;
51 | case 40:
52 | StartWidth = double.Parse(value);
53 | break;
54 | case 41:
55 | EndWidth = double.Parse(value);
56 | break;
57 | case 42:
58 | Buldge = double.Parse(value);
59 | break;
60 | case 70:
61 | Flags = (FlagsEnum)Enum.Parse(typeof(FlagsEnum), value);
62 | break;
63 | case 50:
64 | CurveFitTangentDirection = double.Parse(value);
65 | break;
66 | case 71:
67 | case 72:
68 | case 73:
69 | case 74:
70 | {
71 | int idx = groupcode % 10;
72 | idx--;
73 | PolyfaceIndices[idx] = int.Parse(value);
74 | }
75 | break;
76 | }
77 | }
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/DXFLib/DXFGenericEntity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFGenericEntity : DXFEntity
9 | {
10 | public class Entry
11 | {
12 | public int GroupCode { get; set; }
13 | public string Value { get; set; }
14 | public Entry()
15 | {
16 | }
17 |
18 | public Entry(int g, string v)
19 | {
20 | GroupCode = g;
21 | Value = v;
22 | }
23 | }
24 |
25 | private List entries = new List();
26 | public List Entries { get { return entries; } }
27 |
28 | public override void ParseGroupCode(int groupcode, string value)
29 | {
30 | base.ParseGroupCode(groupcode, value);
31 | Entries.Add(new Entry(groupcode, value));
32 | }
33 | }
34 |
35 | [Entity("3DSOLID")]
36 | public class DXF3DSolid : DXFGenericEntity
37 | {
38 | }
39 |
40 | [Entity("ACAD_PROXY_ENTITY")]
41 | public class DXF3DAcadProxy : DXFGenericEntity
42 | {
43 | }
44 |
45 | [Entity("ATTDEF")]
46 | public class DXFAttributeDefinition : DXFGenericEntity
47 | {
48 | }
49 |
50 | [Entity("ATTRIB")]
51 | public class DXFAttribute : DXFGenericEntity
52 | {
53 | }
54 |
55 | [Entity("BODY")]
56 | public class DXFBody : DXFGenericEntity
57 | {
58 | }
59 |
60 | [Entity("DIMENSION")]
61 | public class DXFDimension : DXFGenericEntity
62 | {
63 | }
64 |
65 | [Entity("HATCH")]
66 | public class DXFHatch : DXFGenericEntity
67 | {
68 | }
69 |
70 | [Entity("IMAGE")]
71 | public class DXFImage : DXFGenericEntity
72 | {
73 | }
74 |
75 | [Entity("LEADER")]
76 | public class DXFLeader : DXFGenericEntity
77 | {
78 | }
79 |
80 | [Entity("MLINE")]
81 | public class DXFMLine : DXFGenericEntity
82 | {
83 | }
84 |
85 | [Entity("MTEXT")]
86 | public class DXFMText : DXFGenericEntity
87 | {
88 | }
89 |
90 | [Entity("OLEFRAME")]
91 | public class DXFOleFrame : DXFGenericEntity
92 | {
93 | }
94 |
95 | [Entity("OLE2FRAME")]
96 | public class DXFOle2Frame : DXFGenericEntity
97 | {
98 | }
99 |
100 | [Entity("REGION")]
101 | public class DXFRegion : DXFGenericEntity
102 | {
103 | }
104 |
105 | [Entity("TEXT")]
106 | public class DXFText : DXFGenericEntity
107 | {
108 | }
109 |
110 | [Entity("VIEWPORT")]
111 | public class DXFViewPort : DXFGenericEntity
112 | {
113 | }
114 |
115 | }
116 |
--------------------------------------------------------------------------------
/DXFLibTests/UnitTest1.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Text;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using Microsoft.VisualStudio.TestTools.UnitTesting;
6 | using DXFLib;
7 | using System.IO;
8 |
9 | namespace DXFLibTests
10 | {
11 | ///
12 | /// Zusammenfassungsbeschreibung für UnitTest1
13 | ///
14 | [TestClass]
15 | public class UnitTest1
16 | {
17 | public UnitTest1()
18 | {
19 | //
20 | // TODO: Konstruktorlogik hier hinzufügen
21 | //
22 | }
23 |
24 | private TestContext testContextInstance;
25 |
26 | ///
27 | ///Ruft den Textkontext mit Informationen über
28 | ///den aktuellen Testlauf sowie Funktionalität für diesen auf oder legt diese fest.
29 | ///
30 | public TestContext TestContext
31 | {
32 | get
33 | {
34 | return testContextInstance;
35 | }
36 | set
37 | {
38 | testContextInstance = value;
39 | }
40 | }
41 |
42 | #region Zusätzliche Testattribute
43 | //
44 | // Sie können beim Schreiben der Tests folgende zusätzliche Attribute verwenden:
45 | //
46 | // Verwenden Sie ClassInitialize, um vor Ausführung des ersten Tests in der Klasse Code auszuführen.
47 | // [ClassInitialize()]
48 | // public static void MyClassInitialize(TestContext testContext) { }
49 | //
50 | // Verwenden Sie ClassCleanup, um nach Ausführung aller Tests in einer Klasse Code auszuführen.
51 | // [ClassCleanup()]
52 | // public static void MyClassCleanup() { }
53 | //
54 | // Mit TestInitialize können Sie vor jedem einzelnen Test Code ausführen.
55 | // [TestInitialize()]
56 | // public void MyTestInitialize() { }
57 | //
58 | // Mit TestCleanup können Sie nach jedem einzelnen Test Code ausführen.
59 | // [TestCleanup()]
60 | // public void MyTestCleanup() { }
61 | //
62 | #endregion
63 |
64 | //[TestMethod]
65 | public void TestMethod1()
66 | {
67 | DXFDocument doc = new DXFDocument();
68 | doc.Load(new MemoryStream(Properties.Resources.LaptopStand));
69 | }
70 |
71 | //[TestMethod]
72 | public void TestMethod2()
73 | {
74 | DXFDocument doc = new DXFDocument();
75 | doc.Load(new MemoryStream(Properties.Resources.Test));
76 | }
77 |
78 | //[TestMethod]
79 | public void TestMethod3()
80 | {
81 | DXFDocument doc = new DXFDocument();
82 | doc.Load(new MemoryStream(Properties.Resources.Untitled_2));
83 | }
84 |
85 | [TestMethod]
86 | public void TestMethod4()
87 | {
88 | DXFDocument doc = new DXFDocument();
89 | doc.Load(new MemoryStream(Properties.Resources.Hase));
90 | }
91 |
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/DXFLib/DXFPolyLine.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("POLYLINE")]
9 | public class DXFPolyLine : DXFEntity
10 | {
11 | public double Elevation { get; set; }
12 | public double Thickness { get; set; }
13 | [Flags]
14 | public enum FlagsEnum
15 | {
16 | closed = 1,
17 | CurveFitVerticesAdded = 2,
18 | SplineFitVerticesAdded = 4,
19 | Is3DPolyLine = 8,
20 | Is3DPolyMesh = 16,
21 | MeshIsClosed = 32,
22 | IsPolyFace = 64,
23 | LineTypePatternContinous = 128
24 | }
25 |
26 | public FlagsEnum Flags { get; set; }
27 | public double DefaultStartWidth { get; set; }
28 | public double DefaultEndWidth { get; set; }
29 | public int MVertexCount { get; set; }
30 | public int NVertexCount { get; set; }
31 | public int SurfaceMDensity { get; set; }
32 | public int SurfaceNDensity { get; set; }
33 | public int CurvesAndSmoothSurfaceType { get; set; }
34 |
35 | private DXFPoint extrusion = new DXFPoint();
36 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
37 |
38 | public override bool HasChildren
39 | {
40 | get
41 | {
42 | return true;
43 | }
44 | }
45 |
46 | public override void ParseGroupCode(int groupcode, string value)
47 | {
48 | base.ParseGroupCode(groupcode, value);
49 | switch (groupcode)
50 | {
51 | case 30:
52 | Elevation = double.Parse(value);
53 | break;
54 | case 39:
55 | Thickness = double.Parse(value);
56 | break;
57 | case 70:
58 | Flags = (FlagsEnum)Enum.Parse(typeof(FlagsEnum), value);
59 | break;
60 | case 40:
61 | DefaultStartWidth = double.Parse(value);
62 | break;
63 | case 41:
64 | DefaultEndWidth = double.Parse(value);
65 | break;
66 | case 71:
67 | MVertexCount = int.Parse(value);
68 | break;
69 | case 72:
70 | NVertexCount = int.Parse(value);
71 | break;
72 | case 73:
73 | SurfaceMDensity = int.Parse(value);
74 | break;
75 | case 74:
76 | SurfaceNDensity = int.Parse(value);
77 | break;
78 | case 75:
79 | CurvesAndSmoothSurfaceType = int.Parse(value);
80 | break;
81 | case 210:
82 | ExtrusionDirection.X = double.Parse(value);
83 | break;
84 | case 220:
85 | ExtrusionDirection.Y = double.Parse(value);
86 | break;
87 | case 230:
88 | ExtrusionDirection.Z = double.Parse(value);
89 | break;
90 | }
91 | }
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/DXFLibTests/DXFLibTests.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | Debug
4 | AnyCPU
5 | 9.0.21022
6 | 2.0
7 | {193BF9DD-2857-4AFC-BB21-F1E8EE4E29D7}
8 | Library
9 | Properties
10 | DXFLibTests
11 | DXFLibTests
12 | v3.5
13 | 512
14 | {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | pdbonly
27 | true
28 | bin\Release\
29 | TRACE
30 | prompt
31 | 4
32 |
33 |
34 |
35 |
36 |
37 | 3.5
38 |
39 |
40 |
41 |
42 |
43 | True
44 | True
45 | Resources.resx
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | {476FA4C4-FA1D-4A2A-985B-8CBF50F82251}
55 | DXFLib
56 |
57 |
58 |
59 |
60 | ResXFileCodeGenerator
61 | Resources.Designer.cs
62 | Designer
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
79 |
--------------------------------------------------------------------------------
/DXFLib/DXFViewPortRecord.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFViewRecord : DXFRecord
9 | {
10 | public string ViewPortName { get; set; }
11 | public double Height { get; set; }
12 | public double Width { get; set; }
13 | private DXFPoint center = new DXFPoint();
14 | public DXFPoint Center { get { return center; } }
15 | private DXFPoint direction = new DXFPoint();
16 | public DXFPoint Direction { get { return direction; } }
17 | private DXFPoint target = new DXFPoint();
18 | public DXFPoint Target { get { return target; } }
19 |
20 | public double FrontClippingPlane { get; set; }
21 | public double BackClippingPlane { get; set; }
22 | public double TwistAngle { get; set; }
23 | public double LensLength { get; set; }
24 | public int ViewMode { get; set; }
25 | }
26 |
27 | class DXFViewRecordParser : DXFRecordParser
28 | {
29 | private DXFViewRecord _record;
30 | protected override DXFRecord currentRecord
31 | {
32 | get { return _record; }
33 | }
34 |
35 | protected override void createRecord(DXFDocument doc)
36 | {
37 | _record = new DXFViewRecord();
38 | doc.Tables.Views.Add(_record);
39 | }
40 |
41 | public override void ParseGroupCode(DXFDocument doc, int groupcode, string value)
42 | {
43 | base.ParseGroupCode(doc, groupcode, value);
44 | switch (groupcode)
45 | {
46 | case 2:
47 | _record.ViewPortName = value;
48 | break;
49 | case 40:
50 | _record.Height = double.Parse(value);
51 | break;
52 | case 41:
53 | _record.Width = double.Parse(value);
54 | break;
55 | case 10:
56 | _record.Center.X = double.Parse(value);
57 | break;
58 | case 20:
59 | _record.Center.Y = double.Parse(value);
60 | break;
61 | case 11:
62 | _record.Direction.X = double.Parse(value);
63 | break;
64 | case 21:
65 | _record.Direction.Y = double.Parse(value);
66 | break;
67 | case 31:
68 | _record.Direction.Z = double.Parse(value);
69 | break;
70 | case 12:
71 | _record.Target.X = double.Parse(value);
72 | break;
73 | case 22:
74 | _record.Target.Y = double.Parse(value);
75 | break;
76 | case 32:
77 | _record.Target.Z = double.Parse(value);
78 | break;
79 | case 42:
80 | _record.LensLength = double.Parse(value);
81 | break;
82 | case 43:
83 | _record.FrontClippingPlane = double.Parse(value);
84 | break;
85 | case 44:
86 | _record.BackClippingPlane = double.Parse(value);
87 | break;
88 | case 50:
89 | _record.TwistAngle = double.Parse(value);
90 | break;
91 | case 71:
92 | _record.ViewMode = int.Parse(value);
93 | break;
94 | }
95 | }
96 | }
97 |
98 | }
99 |
--------------------------------------------------------------------------------
/DXFLib/DXFLWPolyLine.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("LWPOLYLINE")]
9 | public class DXFLWPolyLine : DXFEntity
10 | {
11 | public int VertexCount { get; set; }
12 |
13 | [Flags]
14 | public enum FlagsEnum
15 | {
16 | closed = 1,
17 | plinegen = 128
18 | }
19 |
20 | public FlagsEnum Flags { get; set; }
21 |
22 | public double? ConstantWidth { get; set; }
23 | public double Elevation { get; set; }
24 | public double Thickness { get; set; }
25 |
26 | public class Element
27 | {
28 | private DXFPoint vertex = new DXFPoint();
29 | public DXFPoint Vertex { get { return vertex; } }
30 | public double StartWidth { get; set; }
31 | public double EndWidth { get; set; }
32 | public double Bulge { get; set; }
33 | }
34 |
35 | private List elements = new List();
36 | public List Elements { get { return elements; } }
37 |
38 | private Element LastElement
39 | {
40 | get
41 | {
42 | if (Elements.Count == 0)
43 | return null;
44 | return Elements[Elements.Count - 1];
45 | }
46 | set
47 | {
48 | Elements.Add(value);
49 | }
50 | }
51 |
52 | private DXFPoint extrusion = new DXFPoint();
53 | public DXFPoint ExtrusionDirection { get { return extrusion; } }
54 |
55 | public override void ParseGroupCode(int groupcode, string value)
56 | {
57 | base.ParseGroupCode(groupcode, value);
58 | switch (groupcode)
59 | {
60 | case 90:
61 | VertexCount = int.Parse(value);
62 | break;
63 | case 70:
64 | Flags = (FlagsEnum)Enum.Parse(typeof(FlagsEnum), value);
65 | break;
66 | case 43:
67 | ConstantWidth = double.Parse(value);
68 | break;
69 | case 38:
70 | Elevation = double.Parse(value);
71 | break;
72 | case 39:
73 | Thickness = double.Parse(value);
74 | break;
75 | case 10:
76 | if (LastElement == null || LastElement.Vertex.X != null)
77 | LastElement = new Element();
78 | LastElement.Vertex.X = double.Parse(value);
79 | break;
80 | case 20:
81 | if (LastElement == null || LastElement.Vertex.Y != null)
82 | LastElement = new Element();
83 | LastElement.Vertex.Y = double.Parse(value);
84 | break;
85 | case 40:
86 | LastElement.StartWidth = double.Parse(value);
87 | break;
88 | case 41:
89 | LastElement.EndWidth = double.Parse(value);
90 | break;
91 | case 42:
92 | LastElement.Bulge = double.Parse(value);
93 | break;
94 | case 210:
95 | ExtrusionDirection.X = double.Parse(value);
96 | break;
97 | case 220:
98 | ExtrusionDirection.Y = double.Parse(value);
99 | break;
100 | case 230:
101 | ExtrusionDirection.Z = double.Parse(value);
102 | break;
103 | }
104 | }
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/DXFLibTests/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // Dieser Code wurde von einem Tool generiert.
4 | // Laufzeitversion:2.0.50727.4927
5 | //
6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
7 | // der Code erneut generiert wird.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace DXFLibTests.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
17 | ///
18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
19 | // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
21 | // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DXFLibTests.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
51 | /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | internal static byte[] Hase {
64 | get {
65 | object obj = ResourceManager.GetObject("Hase", resourceCulture);
66 | return ((byte[])(obj));
67 | }
68 | }
69 |
70 | internal static byte[] LaptopStand {
71 | get {
72 | object obj = ResourceManager.GetObject("LaptopStand", resourceCulture);
73 | return ((byte[])(obj));
74 | }
75 | }
76 |
77 | internal static byte[] Test {
78 | get {
79 | object obj = ResourceManager.GetObject("Test", resourceCulture);
80 | return ((byte[])(obj));
81 | }
82 | }
83 |
84 | internal static byte[] Untitled_2 {
85 | get {
86 | object obj = ResourceManager.GetObject("Untitled_2", resourceCulture);
87 | return ((byte[])(obj));
88 | }
89 | }
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/DXFLib/DXFLineTypeRecord.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFLineTypeRecord : DXFRecord
9 | {
10 | public string LineTypeName { get; set; }
11 | public string Description { get; set; }
12 | public int AlignmentCode { get; set; }
13 |
14 | [Flags]
15 | public enum ElementFlags
16 | {
17 | None=0,
18 | AbsoluteRotation=1,
19 | IsString=2,
20 | IsShape=4
21 | }
22 |
23 | public class LineTypeElement
24 | {
25 | public double Length { get; set; }
26 | public ElementFlags Flags { get; set; }
27 | public int? ShapeNumber { get; set; }
28 | public string Shape { get; set; }
29 | private List scalings = new List();
30 | public List Scalings { get { return scalings; } }
31 | public double? Rotation { get; set; }
32 | private List xoffsets = new List();
33 | public List XOffsets { get { return xoffsets; } }
34 | private List yoffsets = new List();
35 | public List YOffsets { get { return yoffsets; } }
36 |
37 | public string Text { get; set; }
38 | }
39 |
40 | private List elements = new List();
41 | public List Elements { get { return elements; } }
42 | public int ElementCount { get; set; }
43 | public double PatternLength { get; set; }
44 | }
45 |
46 | class DXFLineTypeRecordParser : DXFRecordParser
47 | {
48 | private DXFLineTypeRecord _record;
49 | private DXFLineTypeRecord.LineTypeElement _subrecord;
50 |
51 | protected override DXFRecord currentRecord
52 | {
53 | get { return _record; }
54 | }
55 |
56 | protected override void createRecord(DXFDocument doc)
57 | {
58 | _record = new DXFLineTypeRecord();
59 | doc.Tables.LineTypes.Add(_record);
60 | }
61 |
62 | public override void ParseGroupCode(DXFDocument doc, int groupcode, string value)
63 | {
64 | base.ParseGroupCode(doc, groupcode, value);
65 | switch (groupcode)
66 | {
67 | case 2:
68 | _record.LineTypeName = value;
69 | break;
70 | case 3:
71 | _record.Description = value;
72 | break;
73 | case 72:
74 | _record.AlignmentCode = int.Parse(value);
75 | break;
76 | case 73:
77 | _record.ElementCount = int.Parse(value);
78 | break;
79 | case 40:
80 | _record.PatternLength = double.Parse(value);
81 | break;
82 | case 49:
83 | _subrecord = new DXFLineTypeRecord.LineTypeElement();
84 | _record.Elements.Add(_subrecord);
85 | _subrecord.Length = double.Parse(value);
86 | break;
87 | case 74:
88 | _subrecord.Flags = (DXFLineTypeRecord.ElementFlags)Enum.Parse(typeof(DXFLineTypeRecord.ElementFlags), value);
89 | break;
90 | case 75:
91 | _subrecord.ShapeNumber = int.Parse(value);
92 | break;
93 | case 340:
94 | _subrecord.Shape = value;
95 | break;
96 | case 46:
97 | _subrecord.Scalings.Add(double.Parse(value));
98 | break;
99 | case 50:
100 | _subrecord.Rotation = double.Parse(value);
101 | break;
102 | case 44:
103 | _subrecord.XOffsets.Add(double.Parse(value));
104 | break;
105 | case 45:
106 | _subrecord.YOffsets.Add(double.Parse(value));
107 | break;
108 | case 9:
109 | _subrecord.Text = value;
110 | break;
111 | }
112 | }
113 | }
114 |
115 | }
116 |
--------------------------------------------------------------------------------
/DXFLib/DXFLib.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | 9.0.21022
7 | 2.0
8 | {476FA4C4-FA1D-4A2A-985B-8CBF50F82251}
9 | Library
10 | Properties
11 | DXFLib
12 | DXFLib
13 | v3.5
14 | 512
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | pdbonly
27 | true
28 | bin\Release\
29 | TRACE
30 | prompt
31 | 4
32 |
33 |
34 |
35 |
36 | 3.5
37 |
38 |
39 | 3.5
40 |
41 |
42 | 3.5
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
104 |
--------------------------------------------------------------------------------
/DXFLib/TableParser.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Reflection;
6 |
7 | namespace DXFLib
8 | {
9 | class TableParser: ISectionParser
10 | {
11 | private Dictionary tablehandlers = new Dictionary();
12 | #region ISectionParser Member
13 |
14 | private ISectionParser currentParser = null;
15 | private bool waitingtableheader = false;
16 | private bool ignoretable = false;
17 | private bool firstrecordfound = false;
18 | public void ParseGroupCode(DXFDocument doc, int groupcode, string value)
19 | {
20 | if (tablehandlers.Count == 0)
21 | {
22 | foreach (PropertyInfo info in doc.Tables.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
23 | {
24 | object[] attrs = info.GetCustomAttributes(true);
25 | foreach (object attr in attrs)
26 | {
27 | TableAttribute casted = attr as TableAttribute;
28 | if (casted != null)
29 | {
30 | tablehandlers[casted.TableName] = (ISectionParser)Activator.CreateInstance(casted.TableParser);
31 | }
32 | }
33 | }
34 | }
35 | if (currentParser == null)
36 | {
37 | if (groupcode == 0 && value.Trim() == "TABLE")
38 | {
39 | waitingtableheader = true;
40 | }
41 | else if (waitingtableheader && groupcode == 2 && !ignoretable)
42 | {
43 | if (tablehandlers.ContainsKey(value.Trim()))
44 | {
45 | currentParser = tablehandlers[value.Trim()];
46 | waitingtableheader = false;
47 | ignoretable = false;
48 | firstrecordfound = false;
49 | }
50 | else
51 | {
52 | //TODO: generate warning
53 | ignoretable = true;
54 | }
55 | }
56 | else if (waitingtableheader && groupcode == 0 && value.Trim() == "ENDTAB")
57 | {
58 | waitingtableheader = false;
59 | ignoretable = false;
60 | }
61 | }
62 | else
63 | {
64 | if (groupcode == 0 && value.Trim() == "ENDTAB")
65 | {
66 | currentParser = null;
67 | }
68 | else
69 | {
70 | if (groupcode == 0)
71 | {
72 | firstrecordfound = true;
73 | }
74 | if (firstrecordfound)
75 | currentParser.ParseGroupCode(doc, groupcode, value);
76 | }
77 | }
78 | }
79 |
80 | #endregion
81 | }
82 |
83 | public class DXFRecord
84 | {
85 | public string Handle { get; set; }
86 | public string DimStyleHandle { get; set; }
87 | List classhierarchy = new List();
88 | public List Classhierarchy { get { return classhierarchy; } }
89 |
90 | public int Flags { get; set; }
91 |
92 | }
93 |
94 | abstract class DXFRecordParser : ISectionParser
95 | {
96 | protected abstract DXFRecord currentRecord { get; }
97 |
98 | protected abstract void createRecord(DXFDocument doc);
99 | #region ISectionParser Member
100 |
101 | public virtual void ParseGroupCode(DXFDocument doc, int groupcode, string value)
102 | {
103 | switch (groupcode)
104 | {
105 | case 0:
106 | createRecord(doc);
107 | break;
108 | case 5:
109 | currentRecord.Handle = value;
110 | break;
111 | case 70:
112 | currentRecord.Flags = int.Parse(value);
113 | break;
114 | case 105:
115 | currentRecord.DimStyleHandle = value;
116 | break;
117 | case 100:
118 | currentRecord.Classhierarchy.Add(value);
119 | break;
120 | }
121 | }
122 |
123 | #endregion
124 | }
125 |
126 |
127 | }
128 |
--------------------------------------------------------------------------------
/DXFLib/ClassDiagram.cd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | EAAIAgAAAQqAAAQAAAAEAQAAQAAAABIAAAAABAAAAAA=
7 | DXFEntity.cs
8 |
9 |
10 |
11 |
12 |
13 | AAAABAAAAAAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAAA=
14 | DXF3DFace.cs
15 |
16 |
17 |
18 |
19 |
20 | CAgIAAAAAAABAAAAAAAAAQAAAAAAAAAABAAIAIAIAAA=
21 | DXFArc.cs
22 |
23 |
24 |
25 |
26 |
27 | CAgIAAAAAAABAAAAAAAAAQAAAAAAAAAABAAAAAAIAAA=
28 | DXFCircle.cs
29 |
30 |
31 |
32 |
33 |
34 | CBgAAAgAAAAAAAAACAAAAQAAAAAAAAAABgAAAAAIAAg=
35 | DXFEllipse.cs
36 |
37 |
38 |
39 |
40 |
41 | CAIAAAACACABAAAgAAAAAQAAAAAAAAAABAAAAAAAAAA=
42 | DXFLine.cs
43 |
44 |
45 |
46 |
47 |
48 | CAAABAEAAAABABQAAAAQAQEAAEAAAAAABAAAAAAAAAA=
49 | DXFLWPolyLine.cs
50 |
51 |
52 |
53 |
54 |
55 | CIAAAAAAAAABAAAAAAIAAQACAAAAAAAABAAAAAAAAAA=
56 | DXFPointEntity.cs
57 |
58 |
59 |
60 |
61 |
62 | CAAABAAAAIhBAAkAAACAAQAABEAAAgAABAAAAAAAAAA=
63 | DXFPolyLine.cs
64 |
65 |
66 |
67 |
68 |
69 | AAAACAAAACAAIAAAACAAAQAAAAAAAAAAAAAAAAAAAAA=
70 | DXFRay.cs
71 |
72 |
73 |
74 |
75 |
76 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
77 | DXFRay.cs
78 |
79 |
80 |
81 |
82 |
83 | CAAAAAAAAAADgAAAAEAAAQAAAAAAAAABBUAAAAAAAAg=
84 | DXFShape.cs
85 |
86 |
87 |
88 |
89 |
90 | CAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAABAAAAAAAAAA=
91 | DXFSolid.cs
92 |
93 |
94 |
95 |
96 |
97 | ACAABAAASAAAIAECBAABAwgYICAIAAEAAAAAAAVAAEA=
98 | DXFSpline.cs
99 |
100 |
101 |
102 |
103 |
104 | CAAAAAAAAAABAAAAQAAAAUAAAAAAAAAABAAAAAAAAAA=
105 | DXFTrace.cs
106 |
107 |
108 |
109 |
110 |
111 | AADARAAEIAAABAAAAAIAAQACAAAAAAAAAAAAAAAAAAA=
112 | DXFVertex.cs
113 |
114 |
115 |
116 |
117 |
118 | CAAAAAAAAAECAAEhAAAAAQAAAAACAAAAAAAAAAAAAAg=
119 | DXFInsert.cs
120 |
121 |
122 |
123 |
--------------------------------------------------------------------------------
/DXFLib/DXFDocument.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.IO;
6 | using System.Threading;
7 | using System.Globalization;
8 |
9 | namespace DXFLib
10 | {
11 | public class DXFDocument
12 | {
13 | private DXFHeader header = new DXFHeader();
14 | public DXFHeader Header { get { return header; } }
15 | private List classes = new List();
16 | public List Classes { get { return classes; } }
17 | private List blocks = new List();
18 | public List Blocks { get { return blocks; } }
19 | private DXFTables tables = new DXFTables();
20 | public DXFTables Tables { get { return tables; } }
21 | private List entities = new List();
22 | public List Entities { get { return entities; } }
23 |
24 | public DXFDocument()
25 | {
26 |
27 | }
28 |
29 | public void Load(string filename)
30 | {
31 | FileStream stream = new FileStream(filename, FileMode.Open);
32 | Load(stream);
33 | stream.Close();
34 | }
35 |
36 | private enum LoadState
37 | {
38 | OutsideSection,
39 | InSection
40 | }
41 |
42 | public event EventHandler OnFileVersionIncompatible;
43 |
44 | public void Load(Stream file)
45 | {
46 | CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
47 | Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
48 | bool versionwarningsent = false;
49 |
50 | Dictionary sectionparsers = new Dictionary();
51 |
52 | sectionparsers["HEADER"] = new HeaderParser();
53 | sectionparsers["CLASSES"] = new ClassParser();
54 | sectionparsers["TABLES"] = new TableParser();
55 | sectionparsers["ENTITIES"] = new EntityParser();
56 | sectionparsers["BLOCKS"] = new BlockParser();
57 | ISectionParser currentParser = null;
58 |
59 | TextReader reader = new StreamReader(file);
60 | LoadState state = LoadState.OutsideSection;
61 | int? groupcode;
62 | string value;
63 | reader.ReadDXFEntry(out groupcode, out value);
64 | while (groupcode != null)
65 | {
66 | switch (state)
67 | {
68 | case LoadState.OutsideSection:
69 | if (groupcode == 0 && value.Trim() == "SECTION")
70 | {
71 | state = LoadState.InSection;
72 | reader.ReadDXFEntry(out groupcode, out value);
73 | if (groupcode != 2)
74 | throw new Exception("Sektion gefunden aber keinen Namen zur Sektion");
75 | value = value.Trim();
76 | if (sectionparsers.ContainsKey(value))
77 | currentParser = sectionparsers[value];
78 | }
79 | break;
80 | case LoadState.InSection:
81 | if (groupcode == 0 && value.Trim() == "ENDSEC")
82 | {
83 | state = LoadState.OutsideSection;
84 | //after each section check wether the File Version is set
85 | if (Header.AutoCADVersion != null &&
86 | Header.AutoCADVersion != "AC1014")
87 | {
88 | if (!versionwarningsent)
89 | {
90 | try
91 | {
92 | if (OnFileVersionIncompatible != null)
93 | OnFileVersionIncompatible(this, EventArgs.Empty);
94 |
95 | }
96 | catch (Exception)
97 | {
98 |
99 | }
100 | versionwarningsent = true;
101 | }
102 | }
103 | }
104 | else
105 | {
106 | if (currentParser != null)
107 | {
108 | currentParser.ParseGroupCode(this, (int)groupcode, value);
109 | }
110 | }
111 | break;
112 | default:
113 | break;
114 | }
115 | reader.ReadDXFEntry(out groupcode, out value);
116 | }
117 | if (state == LoadState.InSection)
118 | throw new Exception("Dateiende erreicht aber immer noch offene Sektion vorhanden");
119 | Thread.CurrentThread.CurrentCulture = currentCulture;
120 | }
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/DXFLib/HeaderParser.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Reflection;
6 |
7 | namespace DXFLib
8 | {
9 | class HeaderParser: ISectionParser
10 | {
11 | private Dictionary fields = new Dictionary();
12 | #region ISectionParser Member
13 |
14 | PropertyInfo currentVar = null;
15 | public void ParseGroupCode(DXFDocument doc, int groupcode, string value)
16 | {
17 | if (fields.Count == 0)
18 | {
19 | Type header = doc.Header.GetType();
20 | foreach (PropertyInfo info in header.GetProperties(BindingFlags.Public | BindingFlags.Instance))
21 | {
22 | if (info.CanWrite && info.CanRead)
23 | {
24 | object[] attrs = info.GetCustomAttributes(true);
25 | foreach (object attr in attrs)
26 | {
27 | HeaderAttribute casted = attr as HeaderAttribute;
28 | if (casted != null)
29 | {
30 | fields[casted.Name] = info;
31 | }
32 | }
33 | }
34 | }
35 | }
36 |
37 | if (groupcode == 9)
38 | {
39 | string name = value.Trim();
40 | if (fields.ContainsKey(name))
41 | {
42 | currentVar = fields[name];
43 | }
44 | else
45 | {
46 | currentVar = null;
47 | }
48 | }
49 | else if(currentVar!=null)
50 | {
51 | //at first we need to differentiate the types: nullable vs string and nullable vs rest
52 | if (currentVar.PropertyType.Equals(typeof(string)))
53 | {
54 | currentVar.SetValue(doc.Header, value, null);
55 | }
56 | else if (currentVar.PropertyType.IsGenericType && currentVar.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
57 | {
58 | Type boxedType = currentVar.PropertyType.GetGenericArguments()[0];
59 | if(boxedType.Equals(typeof(int)))
60 | {
61 | int? parsed;
62 | if (value.ToLower().Contains('a') ||
63 | value.ToLower().Contains('b') ||
64 | value.ToLower().Contains('c') ||
65 | value.ToLower().Contains('d') ||
66 | value.ToLower().Contains('e') ||
67 | value.ToLower().Contains('f'))
68 | {
69 | parsed = int.Parse(value, System.Globalization.NumberStyles.HexNumber);
70 | }
71 | else
72 | parsed = int.Parse(value, System.Globalization.NumberStyles.Any);
73 | currentVar.SetValue(doc.Header, parsed, null);
74 | }
75 | else if(boxedType.Equals(typeof(double)))
76 | {
77 | double? parsed = double.Parse(value);
78 | currentVar.SetValue(doc.Header, parsed, null);
79 | }
80 | else if (boxedType.Equals(typeof(bool)))
81 | {
82 | int? parsed = int.Parse(value);
83 | if (parsed != 0)
84 | currentVar.SetValue(doc.Header, (bool?)true, null);
85 | else
86 | currentVar.SetValue(doc.Header, (bool?)false, null);
87 | }
88 | else if (boxedType.IsEnum)
89 | {
90 | object parsed = Enum.Parse(boxedType, value);
91 | currentVar.SetValue(doc.Header, parsed, null);
92 | }
93 | }
94 | else if (currentVar.PropertyType.Equals(typeof(DXFPoint)))
95 | {
96 | DXFPoint p = (DXFPoint)currentVar.GetValue(doc.Header, null);
97 | if (p == null)
98 | {
99 | p = new DXFPoint();
100 | currentVar.SetValue(doc.Header, p, null);
101 | }
102 | switch (groupcode)
103 | {
104 | case 10:
105 | p.X = double.Parse(value);
106 | break;
107 | case 20:
108 | p.Y = double.Parse(value);
109 | break;
110 | case 30:
111 | p.Z = double.Parse(value);
112 | break;
113 | default:
114 | break;
115 | }
116 | }
117 | }
118 | }
119 |
120 | #endregion
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/DXFLib/DXFSpline.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | [Entity("SPLINE")]
9 | public class DXFSpline : DXFEntity
10 | {
11 | private DXFPoint normal = new DXFPoint();
12 | public DXFPoint Normal { get { return normal; } }
13 |
14 | [Flags]
15 | public enum FlagsEnum
16 | {
17 | Closed = 1,
18 | Periodic = 2,
19 | Rational = 4,
20 | Planar = 8,
21 | Linear = 16
22 | }
23 | public FlagsEnum Flags { get; set; }
24 |
25 | public int Degree { get; set; }
26 | public int KnotCount { get; set; }
27 | public int ControlPointCount { get; set; }
28 | public int FitPointCount { get; set; }
29 |
30 | public double KnotTolerance { get; set; }
31 | public double ControlPointTolerance { get; set; }
32 | public double FitPointTolerance { get; set; }
33 |
34 | private DXFPoint starttangent = new DXFPoint();
35 | public DXFPoint StartTangent { get { return starttangent; } }
36 |
37 | private DXFPoint endtangent = new DXFPoint();
38 | public DXFPoint EndTangent { get { return endtangent; } }
39 |
40 | private List knotvalues = new List();
41 | public List KnotValues { get { return knotvalues; } }
42 |
43 | public double Weight { get; set; }
44 |
45 | private List controlpoints = new List();
46 | public List ControlPoints { get { return controlpoints; } }
47 |
48 | private List fitpoints = new List();
49 | public List FitPoints { get { return fitpoints; } }
50 |
51 | private DXFPoint LastControlPoint
52 | {
53 | get
54 | {
55 | if (ControlPoints.Count == 0) return null;
56 | return ControlPoints[ControlPoints.Count - 1];
57 | }
58 | set
59 | {
60 | ControlPoints.Add(value);
61 | }
62 | }
63 |
64 | private DXFPoint LastFitPoint
65 | {
66 | get
67 | {
68 | if (FitPoints.Count == 0) return null;
69 | return FitPoints[FitPoints.Count - 1];
70 | }
71 | set
72 | {
73 | FitPoints.Add(value);
74 | }
75 | }
76 |
77 | public override void ParseGroupCode(int groupcode, string value)
78 | {
79 | base.ParseGroupCode(groupcode, value);
80 | switch (groupcode)
81 | {
82 | case 210:
83 | Normal.X = double.Parse(value);
84 | break;
85 | case 220:
86 | Normal.Y = double.Parse(value);
87 | break;
88 | case 230:
89 | Normal.Z = double.Parse(value);
90 | break;
91 | case 70:
92 | Flags = (FlagsEnum)Enum.Parse(typeof(FlagsEnum), value);
93 | break;
94 | case 71:
95 | Degree = int.Parse(value);
96 | break;
97 | case 72:
98 | KnotCount = int.Parse(value);
99 | break;
100 | case 73:
101 | ControlPointCount = int.Parse(value);
102 | break;
103 | case 74:
104 | FitPointCount = int.Parse(value);
105 | break;
106 | case 42:
107 | KnotTolerance = double.Parse(value);
108 | break;
109 | case 43:
110 | ControlPointTolerance = double.Parse(value);
111 | break;
112 | case 44:
113 | FitPointTolerance = double.Parse(value);
114 | break;
115 | case 12:
116 | StartTangent.X = double.Parse(value);
117 | break;
118 | case 22:
119 | StartTangent.Y = double.Parse(value);
120 | break;
121 | case 32:
122 | StartTangent.Z = double.Parse(value);
123 | break;
124 | case 13:
125 | EndTangent.X = double.Parse(value);
126 | break;
127 | case 23:
128 | EndTangent.Y = double.Parse(value);
129 | break;
130 | case 33:
131 | EndTangent.Z = double.Parse(value);
132 | break;
133 | case 40:
134 | KnotValues.Add(double.Parse(value));
135 | break;
136 | case 41:
137 | Weight = double.Parse(value);
138 | break;
139 | case 10:
140 | if (LastControlPoint==null || LastControlPoint.X != null)
141 | LastControlPoint = new DXFPoint();
142 | LastControlPoint.X = double.Parse(value);
143 | break;
144 | case 20:
145 | if (LastControlPoint == null || LastControlPoint.Y != null)
146 | LastControlPoint = new DXFPoint();
147 | LastControlPoint.Y = double.Parse(value);
148 | break;
149 | case 30:
150 | if (LastControlPoint == null || LastControlPoint.Z != null)
151 | LastControlPoint = new DXFPoint();
152 | LastControlPoint.Z = double.Parse(value);
153 | break;
154 | case 11:
155 | if (LastFitPoint == null || LastFitPoint.X != null)
156 | LastFitPoint = new DXFPoint();
157 | LastFitPoint.X = double.Parse(value);
158 | break;
159 | case 21:
160 | if (LastFitPoint == null || LastFitPoint.Y != null)
161 | LastFitPoint = new DXFPoint();
162 | LastFitPoint.Y = double.Parse(value);
163 | break;
164 | case 31:
165 | if (LastFitPoint == null || LastFitPoint.Z != null)
166 | LastFitPoint = new DXFPoint();
167 | LastFitPoint.Z = double.Parse(value);
168 | break;
169 | }
170 | }
171 | }
172 | }
173 |
--------------------------------------------------------------------------------
/DXFLib/DXFVPortRecord.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFVPortRecord : DXFRecord
9 | {
10 | public string VPortName { get; set; }
11 | private DXFPoint lowerleft = new DXFPoint();
12 | public DXFPoint LowerLeftCorner { get { return lowerleft; } }
13 | private DXFPoint upperright = new DXFPoint();
14 | public DXFPoint UpperRightCorner { get { return upperright; } }
15 | private DXFPoint center = new DXFPoint();
16 | public DXFPoint Center { get { return center; } }
17 | private DXFPoint snapbase = new DXFPoint();
18 | public DXFPoint SnapBase { get { return snapbase; } }
19 | private DXFPoint snapspacing = new DXFPoint();
20 | public DXFPoint SnapSpacing { get { return snapspacing; } }
21 | private DXFPoint gridspacing = new DXFPoint();
22 | public DXFPoint GridSpacing { get { return gridspacing; } }
23 | private DXFPoint direction = new DXFPoint();
24 | public DXFPoint Direction { get { return direction; } }
25 | private DXFPoint target = new DXFPoint();
26 | public DXFPoint Target { get { return target; } }
27 |
28 | public double Height { get; set; }
29 | public double AspectRatio { get; set; }
30 | public double LensLength { get; set; }
31 | public double FrontClippingPlane { get; set; }
32 | public double BackClippingPlane { get; set; }
33 | public double SnapRotationAngle { get; set; }
34 | public double TwistAngle { get; set; }
35 | public int ViewMode { get; set; }
36 | public int CircleZoomPercent { get; set; }
37 | public int FastZoomSetting { get; set; }
38 | public int UCSICONSetting { get; set; }
39 | public int SnapEnabled { get; set; }
40 | public int GridEnabled { get; set; }
41 | public int SnapStyle { get; set; }
42 | public int SnapIsoPair { get; set; }
43 |
44 | }
45 |
46 | class DXFVPortRecordParser : DXFRecordParser
47 | {
48 | private DXFVPortRecord _record;
49 | protected override DXFRecord currentRecord
50 | {
51 | get { return _record; }
52 | }
53 |
54 | protected override void createRecord(DXFDocument doc)
55 | {
56 | _record = new DXFVPortRecord();
57 | doc.Tables.VPorts.Add(_record);
58 | }
59 |
60 | public override void ParseGroupCode(DXFDocument doc, int groupcode, string value)
61 | {
62 | base.ParseGroupCode(doc, groupcode, value);
63 | switch (groupcode)
64 | {
65 | case 2:
66 | _record.VPortName = value;
67 | break;
68 | case 10:
69 | _record.LowerLeftCorner.X = double.Parse(value);
70 | break;
71 | case 20:
72 | _record.LowerLeftCorner.Y = double.Parse(value);
73 | break;
74 | case 11:
75 | _record.UpperRightCorner.X = double.Parse(value);
76 | break;
77 | case 21:
78 | _record.UpperRightCorner.Y = double.Parse(value);
79 | break;
80 | case 12:
81 | _record.Center.X = double.Parse(value);
82 | break;
83 | case 22:
84 | _record.Center.Y = double.Parse(value);
85 | break;
86 | case 13:
87 | _record.SnapBase.X = double.Parse(value);
88 | break;
89 | case 23:
90 | _record.SnapBase.Y = double.Parse(value);
91 | break;
92 | case 14:
93 | _record.SnapSpacing.X = double.Parse(value);
94 | break;
95 | case 24:
96 | _record.SnapSpacing.Y = double.Parse(value);
97 | break;
98 | case 15:
99 | _record.GridSpacing.X = double.Parse(value);
100 | break;
101 | case 25:
102 | _record.GridSpacing.Y = double.Parse(value);
103 | break;
104 | case 16:
105 | _record.Direction.X = double.Parse(value);
106 | break;
107 | case 26:
108 | _record.Direction.Y = double.Parse(value);
109 | break;
110 | case 36:
111 | _record.Direction.Z = double.Parse(value);
112 | break;
113 | case 17:
114 | _record.Target.X = double.Parse(value);
115 | break;
116 | case 27:
117 | _record.Target.Y = double.Parse(value);
118 | break;
119 | case 37:
120 | _record.Target.Z = double.Parse(value);
121 | break;
122 | case 40:
123 | _record.Height = double.Parse(value);
124 | break;
125 | case 41:
126 | _record.AspectRatio = double.Parse(value);
127 | break;
128 | case 42:
129 | _record.LensLength = double.Parse(value);
130 | break;
131 | case 43:
132 | _record.FrontClippingPlane = double.Parse(value);
133 | break;
134 | case 44:
135 | _record.BackClippingPlane = double.Parse(value);
136 | break;
137 | case 50:
138 | _record.SnapRotationAngle = double.Parse(value);
139 | break;
140 | case 51:
141 | _record.TwistAngle = double.Parse(value);
142 | break;
143 | case 71:
144 | _record.ViewMode = int.Parse(value);
145 | break;
146 | case 72:
147 | _record.CircleZoomPercent = int.Parse(value);
148 | break;
149 | case 73:
150 | _record.FastZoomSetting = int.Parse(value);
151 | break;
152 | case 74:
153 | _record.UCSICONSetting = int.Parse(value);
154 | break;
155 | case 75:
156 | _record.SnapEnabled = int.Parse(value);
157 | break;
158 | case 76:
159 | _record.GridEnabled = int.Parse(value);
160 | break;
161 | case 77:
162 | _record.SnapStyle = int.Parse(value);
163 | break;
164 | case 78:
165 | _record.SnapIsoPair = int.Parse(value);
166 | break;
167 | }
168 | }
169 | }
170 |
171 | }
172 |
--------------------------------------------------------------------------------
/DXFLibTests/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\Resources\Hase.dxf;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
123 |
124 |
125 | ..\Resources\LaptopStand.dxf;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
126 |
127 |
128 | ..\Resources\Test.dxf;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
129 |
130 |
131 | ..\Resources\Untitled-2.dxf;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
132 |
133 |
--------------------------------------------------------------------------------
/DXFLibTests/AuthoringTests.txt:
--------------------------------------------------------------------------------
1 | ==========================================================================
2 | Visual Studio Team System: Übersicht über das Erstellen und Durchführen von Tests
3 | ==========================================================================
4 |
5 | In dieser Übersicht werden die Features zum Erstellen und Durchführen von Tests in
6 | Visual Studio Team System und Visual Studio Team Edition for Software Testers beschrieben.
7 |
8 | Öffnen von Tests
9 | -------------
10 | Wenn Sie einen Test öffnen möchten, öffnen Sie ein Testprojekt oder eine
11 | Testmetadatendatei (eine Datei mit der Erweiterung .vsmdi), die die Definition des Tests enthält. Sie finden Testprojekte und
12 | Metadatendateien im Projektmappen-Explorer.
13 |
14 | Anzeigen von Tests
15 | -------------
16 | Um anzuzeigen, welche Tests verfügbar sind, öffnen Sie das Fenster "Testansicht". Oderwenn Sie Team Edition for Software Testers installiert haben, können Sie auch
17 | das Testlisten-Editorfenster zum Anzeigen der Tests öffnen.
18 |
19 | Klicken Sie zum Öffnen des Fensters "Testansicht" auf das Menü "Test", zeigen Sie auf "Windows", und
20 | klicken Sie dann auf "Testansicht". Klicken Sie zum Öffnen des Fensters "Testlisten-Editor" (sofern Sie
21 | Team Edition for Software Testers installiert haben) auf "Test", zeigen Sie auf "Windows",
22 | und klicken Sie dann auf "Testlisten-Editor".
23 |
24 | Durchführen von Tests
25 | -------------
26 | Sie können Tests im Fenster "Testansicht" und im Fenster "Testlisten-Editor" durchführen.
27 | Anweisungen zum Öffnen dieser Fenster finden Sie unter "Anzeigen von Tests". Wenn ein oder mehrere im Fenster
28 | "Testansicht" angezeigte Tests durchgeführt werden sollen, markieren Sie diese Tests zunächst in
29 | diesem Fenster. Wenn Sie mehrere Tests markieren möchten, klicken Sie bei gedrückter UMSCHALT- oder STRG-TASTE
30 | auf die Tests. Klicken Sie anschließend auf der Symbolleiste im Fenster "Testansicht" auf die
31 | Schaltfläche "Tests durchführen".
32 |
33 | Wenn Sie Visual Studio Team Edition for Software Testers installiert haben, können Sie auch
34 | das Fenster "Testlisten-Editor" zum Durchführen von Tests verwenden. Wenn Sie Tests im Testlisten-Editor ausführen möchten,
35 | aktivieren Sie das Kontrollkästchen neben dem jeweils durchzuführenden Test. Klicken Sie anschließend
36 | auf der Symbolleiste im Fenster "Testlisten-Editor" auf die Schaltfläche "Tests durchführen".
37 |
38 | Anzeigen von Testergebnissen
39 | --------------------
40 | Wenn Sie einen oder mehrere Tests durchführen, werden die Ergebnisse der durchgeführten Tests
41 | im Fenster "Testergebnisse" angezeigt. Jeder einzelne Test wird in einer separaten
42 | Zeile angezeigt, sodass sein Status erkennbar ist. In der oberen Hälfte des Fensters
43 | befindet sich eine eingebettete Statusleiste. Die Leiste enthält
44 | eine Zusammenfassung von Details zum gesamten Testlauf.
45 |
46 | Zum Anzeigen von ausführlicheren Informationen zu einem bestimmten Testergebnis doppelklicken Sie im
47 | Fenster "Testergebnisse" auf das Ergebnis. Hierdurch wird ein Fenster geöffnet, in dem weitere Informationen
48 | zu dem bestimmten Testergebnis angezeigt werden, z. B. alle im Test zurückgegebenen
49 | Fehlermeldungen.
50 |
51 | Ändern der Art der Testdurchführung
52 | -----------------------------------
53 | Beim Durchführen eines oder mehrerer Tests wird eine Reihe von Einstellungen verwendet,
54 | die bestimmen, auf welche Weise diese Tests durchgeführt werden. Diese Einstellungen sind in einer Konfigurationsdatei für Testläufe
55 | enthalten.
56 |
57 | Im Folgenden ist eine Liste mit einigen der Änderungen aufgeführt, die an einer Testlauf-Konfigurationsdatei vorgenommen
58 | werden können:
59 |
60 | – Ändern des Benennungsschemas für jeden Testlauf.
61 | – Ändern des Testcontrollers, auf dem die Tests durchgeführt werden, sodass Tests
62 | remote durchgeführt werden können.
63 | – Erfassen von Codeabdeckungsdaten für den zu testenden Code, sodass ersichtlich wird,
64 | welche Codezeilen durch die Tests abgedeckt werden.
65 | - Aktivieren und Deaktivieren der Testbereitstellung.
66 | – Angeben zusätzlicher, vor dem Ausführen der Tests bereitzustellender Dateien.
67 | – Auswählen eines anderen Hosts (ASP.NET) zum Durchführen von ASP.NET-Komponententests.
68 | – Auswählen eines anderen Hosts, des Testhosts für intelligente Geräte, zum Durchführen von Komponententests für intelligente Geräte.
69 | – Festlegen verschiedener Eigenschaften für die Test-Agents, die die Tests durchführen.
70 | – Ausführen benutzerdefinierter Skripts zum Anfang und Ende jedes Testlaufs, sodass die
71 | Testumgebung für jeden Testlauf genau nach Wunsch eingerichtet werden kann.
72 | – Festlegen von Zeitlimits für Tests und Testläufe.
73 | – Festlegen der verwendbaren Browser und der Anzahl der Wiederholungen von Webtests im
74 | Testlauf.
75 |
76 | Standardmäßig wird eine Konfigurationsdatei für Testläufe immer dann erstellt, wenn Sie ein
77 | neues Testprojekt erstellen. Änderungen an dieser Datei können Sie vornehmen, indem Sie im
78 | Projektmappen-Explorer auf die Datei doppelklicken und dann die Einstellungen ändern. (Konfigurationsdateien für Testläufe
79 | besitzen die Erweiterung ".testrunconfig".)
80 |
81 | Eine Projektmappe kann mehrere Konfigurationsdateien für Testläufe enthalten. Nur in einer dieser
82 | Dateien (der "aktiven" Konfigurationsdatei für Testläufe) werden
83 | die Einstellungen bestimmt, die gegenwärtig für Testläufe verwendet werden. Sie wählen
84 | die aktive Konfigurationsdatei für Testläufe aus, indem Sie im Menü "Test" auf
85 | "Aktive Testlaufkonfiguration auswählen" klicken.
86 |
87 | -------------------------------------------------------------------------------
88 |
89 | Testtypen
90 | ----------
91 | Bei Verwendung von Visual Studio Team Edition for Software Testers können Sie verschiedene
92 | Testtypen erstellen:
93 |
94 | Komponententest: Erstellen Sie mithilfe eines Komponententests einen programmgesteuerten Test in C++, Visual C# oder
95 | Visual Basic, der Quellcode ausführt. Ein Komponententest ruft die Methoden einer
96 | Klasse auf, übergibt passende Parameter und überprüft, ob der zurückgegebene Wert
97 | Ihren Erwartungen entspricht.
98 | Es stehen drei spezielle Varianten von Komponententests zur Verfügung:
99 | – Datengesteuerte Komponententests werden erstellt, wenn Sie einen Komponententest so konfigurieren, dass er
100 | für jede Zeile einer Datenquelle erneut aufgerufen wird. Die Daten jeder Zeile
101 | werden für den Komponententest als Eingabedaten verwendet.
102 | – ASP.NET-Komponententests sind Komponententests, bei denen Code in einer ASP.NET-Webanwendung
103 | ausgeführt wird.
104 | - Komponententests für intelligente Geräte sind Komponententests, die für ein intelligentes Gerät
105 | oder einen Emulator bereitgestellt werden und dann vom Testhost für intelligente Geräte ausgeführt werden.
106 |
107 | Webtest: Webtests bestehen aus einer geordneten Folge von HTTP-Anforderungen, die
108 | in einer Browsersitzung von Microsoft Internet Explorer aufgezeichnet werden. Sie können festlegen, dass
109 | der Test über bestimmte Details zu den angeforderten Seiten oder Websites informiert, beispielsweise
110 | ob eine bestimmte Seite eine angegebene Zeichenfolge enthält.
111 |
112 | Auslastungstest: Ein Auslastungstest wird zum Kapseln von nicht manuellen Tests wie
113 | Komponententests, Webtests und generischen Tests sowie zum anschließenden Durchführen der Tests durch
114 | virtuelle Benutzer verwendet. Beim Durchführen dieser Tests unter Last werden Testergebnisse,
115 | einschließlich Leistungsindikatoren und weiterer Indikatoren, in Tabellen und Diagrammen generiert.
116 |
117 | Generischer Test: Ein generischer Test ist ein vorhandenes Programm, das umschlossen ist, damit es
118 | in Visual Studio als Test funktioniert. Im Folgenden sind Beispiele für Tests oder Programme aufgeführt, die
119 | in generische Tests umgewandelt werden können:
120 | – Ein vorhandener Test, der mithilfe von Prozessbeendigungscodes darüber informiert, ob der
121 | Test erfolgreich war. 0 (null) bedeutet, dass der Test erfolgreich war. Jeder andere Wert bedeutet,
122 | dass ein Fehler aufgetreten ist.
123 | – Ein allgemeines Programm, durch das während eines Testszenarios bestimmte Funktionen verfügbar sind.
124 | – Ein Test oder Programm, bei dem eine spezielle XML-Datei (eine "Ergebniszusammenfassungsdatei") verwendet wird,
125 | um detaillierte Ergebnisse zu übermitteln.
126 |
127 | Manueller Test: Dieser Testtyp wird verwendet, wenn die Testaufgaben
128 | von einem Testingenieur durchgeführt werden sollen und nicht von einem automatischen Skript.
129 |
130 | Testreihe: Verwenden Sie eine Testreihe zum Durchführen mehrerer Tests in einer
131 | von Ihnen angegebenen Reihenfolge.
132 |
133 | -------------------------------------------------------------------------------
134 |
135 |
--------------------------------------------------------------------------------
/DXFLib/DXFHeader.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace DXFLib
7 | {
8 | public class DXFHeader
9 | {
10 | [Header("$ACADMAINTVER")]
11 | public int? MaintenanceVersionNumber { get; set; }
12 |
13 | [Header("$ACADVER")]
14 | public string AutoCADVersion { get; set; }
15 |
16 | [Header("$ANGBASE")]
17 | public double? AngleBase { get; set; }
18 |
19 | public enum Direction
20 | {
21 | CounterClockWise=0,
22 | ClockWise=1
23 | }
24 |
25 | [Header("$ANGDIR")]
26 | public Direction? AngleDirection { get; set; }
27 |
28 | [Header("$ATTDIA")]
29 | public bool? AttributeDialogs { get; set; }
30 |
31 | public enum AttribVisibility
32 | {
33 | None = 0,
34 | Normal = 1,
35 | All = 2
36 | }
37 |
38 | [Header("$ATTMODE")]
39 | public AttribVisibility? AttributeVisibility { get; set; }
40 |
41 | [Header("$ATTREQ")]
42 | public bool? RequestAttributesDuringInsert { get; set; }
43 |
44 | [Header("$AUINTS")]
45 | public int? AngleUnits { get; set; }
46 |
47 | [Header("$AUPREC")]
48 | public int? AngleUnitPrecision { get; set; }
49 |
50 | [Header("$BLIPMODE")]
51 | public int? BlipMode { get; set; }
52 |
53 | public enum ColorEntity
54 | {
55 | ByBlock = 0,
56 | ByLayer = 256
57 | }
58 |
59 | [Header("$CECOLOR")]
60 | public ColorEntity? CurrentEntityColor { get; set; }
61 |
62 | [Header("$CELTSCALE")]
63 | public double? CurrentEntityLinetypeScale { get; set; }
64 |
65 | [Header("$CELTYPE")]
66 | public string EntityLinetypeName { get; set; }
67 |
68 | [Header("$CHAMFERA")]
69 | public double? FirstChamferDistance { get; set; }
70 |
71 | [Header("$CHAMFERB")]
72 | public double? SecondChamferDistance { get; set; }
73 |
74 | [Header("$CHAMFERC")]
75 | public double? ChamferLength { get; set; }
76 |
77 | [Header("$CHAMFERD")]
78 | public double? ChamferAngle { get; set; }
79 |
80 | [Header("$CLAYER")]
81 | public string CurrentLayer { get; set; }
82 |
83 | public enum MultilineJustification
84 | {
85 | Top = 0,
86 | Middle = 1,
87 | Bottom = 2
88 | }
89 |
90 | [Header("$CMLJUST")]
91 | public MultilineJustification? CurrentMultilineJustification { get; set; }
92 |
93 | [Header("$CMLSCALE")]
94 | public double? CurrentMultilineScale { get; set; }
95 |
96 | [Header("$CMLSTYLE")]
97 | public string CurrentMultilineStyle { get; set; }
98 |
99 | public enum CoordinateDisplay
100 | {
101 | Static = 0,
102 | UpdateContinuous = 1,
103 | DLessAFormat = 2
104 | }
105 |
106 | [Header("$COORDS")]
107 | public CoordinateDisplay? CoordinateUpdateSetting { get; set; }
108 |
109 | public enum DeletePolicy
110 | {
111 | Deleted = 0,
112 | Retained = 1
113 | }
114 |
115 | [Header("$DELOBJ")]
116 | public DeletePolicy? DeletionPolicy { get; set; }
117 |
118 | [Header("$DIMALT")]
119 | public int? AlternateUnitConversionIfNonzero { get; set; }
120 |
121 | [Header("$DIMALTD")]
122 | public int? AlternateUnitDecimalPlaces { get; set; }
123 |
124 | [Header("$DIMALTF")]
125 | public double? AlternateUnitScaleFactor { get; set; }
126 |
127 | [Header("$DIMALTTD")]
128 | public int? AlternateUnitToleranceDecimals { get; set; }
129 |
130 | public enum SuppressionZeroPolicy
131 | {
132 | SuppressZeroFeetKeepInches = 0,
133 | IncludeZeroFeetKeepInchs = 1,
134 | IncludeZeroFeetSuppressInches = 2,
135 | IncludeZeroInchesSupressFeet = 3
136 | }
137 |
138 | [Header("$DIMALTTZ")]
139 | public SuppressionZeroPolicy? AlternateUnitSuppressionPolicyForTolerances { get; set; }
140 |
141 | public enum UnitType
142 | {
143 | Scientific = 1,
144 | Decimal = 2,
145 | Engineering = 3,
146 | ArchitecturalStacked = 4,
147 | FractionalStacked = 5,
148 | Architectural = 6,
149 | Fractional = 7
150 | }
151 |
152 | [Header("$DIMALTU")]
153 | public UnitType? AlternateUnitFormat { get; set; }
154 |
155 | [Header("$DIMALTZ")]
156 | public SuppressionZeroPolicy? ALternateUnitSuppressionPolicyForValues { get; set; }
157 |
158 | [Header("$DIMAPOST")]
159 | public string AlternateUnitSuffix { get; set; }
160 |
161 | public enum EntityGroupingPolicy
162 | {
163 | CreateAssociations = 1,
164 | DrawIndividual = 0
165 | }
166 |
167 | [Header("$DIMASO")]
168 | public EntityGroupingPolicy? EntityGrouping { get; set; }
169 |
170 | [Header("$DIMASZ")]
171 | public double? DimensioningArrowSize { get; set; }
172 |
173 | public enum Angletype
174 | {
175 | DecimalDegree = 0,
176 | DegreeMinutesSeconds = 1,
177 | Gradians = 2,
178 | Radians = 3,
179 | SurveyoursUnits = 4
180 | }
181 |
182 | [Header("$DIMAUNIT")]
183 | public Angletype? AlternateUnitAngleType { get; set; }
184 |
185 | [Header("$DIMBLK")]
186 | public string ArrowBlockName { get; set; }
187 |
188 | [Header("$DIMBLK1")]
189 | public string FirstArrowBlockName { get; set; }
190 |
191 | [Header("$DIMBLK2")]
192 | public string SecondArrowBlockName { get; set; }
193 |
194 | [Header("$DIMCEN")]
195 | public double? MarkLinesSizeCenter { get; set; }
196 |
197 | [Header("$DIMCLRD")]
198 | public int? DimensionLineColor { get; set; }
199 |
200 | [Header("$DIMCLRE")]
201 | public int? DimensionExtensionLineColor { get; set; }
202 |
203 | [Header("$DIMCLRT")]
204 | public string DimensionLineTextColor { get; set; }
205 |
206 | [Header("$DIMDEC")]
207 | public int? ToleranceDecimalsForPrimaryunit { get; set; }
208 |
209 | [Header("$DIMDLE")]
210 | public double? DimensionLineExtension { get; set; }
211 |
212 | [Header("$DIMDLI")]
213 | public double? DimensionLineIncrement { get; set; }
214 |
215 | [Header("$DIMEXE")]
216 | public double? ExtensionLineExtension { get; set; }
217 |
218 | [Header("$DIMEXO")]
219 | public double? ExtensionLineOffset { get; set; }
220 |
221 | [Header("$DIMFIT")]
222 | public int? TextAndArrowPlacement { get; set; }
223 |
224 | [Header("$DIMGAP")]
225 | public double? DimensionLineGap { get; set; }
226 |
227 | public enum TextPositionings
228 | {
229 | AboveDimensionLineAndCenterJustifiedBetweenExtensionLines = 0,
230 | AboveDimensionLineAndNextToFirstExtensionLine = 1,
231 | AboveDimensionLineAndNextToSecondExtensionLine = 2,
232 | AboveAndCenterJustifiedToFirstExtensionLine = 3,
233 | AboveAndCenterJustifiedToSecondExtensionLine = 4
234 | }
235 |
236 | [Header("$DIMJUST")]
237 | public TextPositionings? HorizontalTextPosition { get; set; }
238 |
239 | [Header("$DIMLFAC")]
240 | public double? LinearMeasurementScaleFactor { get; set; }
241 |
242 | [Header("$DIMLIM")]
243 | public int? DimensionLimitsIfNonZero { get; set; }
244 |
245 | [Header("$DIMPOST")]
246 | public string DimensionSuffix { get; set; }
247 |
248 | [Header("$DIMRND")]
249 | public double? DimensionDistanceRounding { get; set; }
250 |
251 | [Header("$DIMSAH")]
252 | public int? UseSeparateArrowsBlocksIfNonZero { get; set; }
253 |
254 | [Header("$DIMSCALE")]
255 | public double? DimensioningScale { get; set; }
256 |
257 | public enum SuppressionSettings
258 | {
259 | NotSuppressed = 0,
260 | Suppressed = 1
261 | }
262 |
263 | [Header("$DIMSD1")]
264 | public SuppressionSettings? SuppressionOfFirstExtensionLine { get; set; }
265 |
266 | [Header("$DIMSD2")]
267 | public SuppressionSettings? SuppressionOfSecondExtensionLine { get; set; }
268 |
269 | [Header("$DIMSE1")]
270 | public int? SuppressFirstExtensionLineIfNonZero { get; set; }
271 |
272 | [Header("$DIMSE2")]
273 | public int? SuppressSecondExtensionLineIfNonZero { get; set; }
274 |
275 | public enum DraggingPolicy
276 | {
277 | RecomputeDimensionsWhileDragging = 0,
278 | DragOriginalImage = 1
279 | }
280 |
281 | [Header("$DIMSHO")]
282 | public DraggingPolicy? DraggingSettings { get; set; }
283 |
284 | [Header("$DIMSOXD")]
285 | public int? SuppressOutsideExtensionLinesIfNonZero { get; set; }
286 |
287 | [Header("$DIMSTYLE")]
288 | public string DimensionStyleName { get; set; }
289 |
290 | [Header("$DIMTAD")]
291 | public int? TextAboveDimensionLineIfNonZero { get; set; }
292 |
293 | [Header("$DIMTDEC")]
294 | public int? NumberOfDimensionToleranceDecimals { get; set; }
295 |
296 | [Header("$DIMTFAC")]
297 | public double? DimensionToleranceScaleFactor { get; set; }
298 |
299 | [Header("$DIMTIH")]
300 | public int? TextInsideHorizontalIfNonZero { get; set; }
301 |
302 | [Header("$DIMTIX")]
303 | public int? ForceTextInsideExtensionsIfNonZero { get; set; }
304 |
305 | [Header("$DIMTM")]
306 | public double? MinusTolerance { get; set; }
307 |
308 | [Header("$DIMTOFL")]
309 | public int? IfTextOutsideExtensionsForceLineExtensionsBetweenExtensionsIfNonZero { get; set; }
310 |
311 | [Header("$DIMTOH")]
312 | public int? TextOutsideHorizontalIfNonZero { get; set; }
313 |
314 | [Header("$DIMTOL")]
315 | public int? DimensionTolerancesGeneratedIfNonZero { get; set; }
316 |
317 | [Header("$DIMTOLJ")]
318 | public MultilineJustification? ToleranceJustification { get; set; }
319 |
320 | [Header("$DIMTP")]
321 | public double? PlusTolerance { get; set; }
322 |
323 | [Header("$DIMTSZ")]
324 | public double? DimensioningTickSize { get; set; }
325 |
326 | [Header("$DIMTVP")]
327 | public double? TextVerticalPosition { get; set; }
328 |
329 | [Header("$DIMTXSTY")]
330 | public string DimensionTextStyle { get; set; }
331 |
332 | [Header("$DIMTXT")]
333 | public double? DimensionTextHeight { get; set; }
334 |
335 | [Header("$DIMTZIN")]
336 | public SuppressionZeroPolicy? SuppressionOfZerosForToleranceValues { get; set; }
337 |
338 | [Header("$DIMUNIT")]
339 | public UnitType? DimensionUnitType { get; set; }
340 |
341 | public enum CursorControl
342 | {
343 | OnlyDimensionLine = 0,
344 | TextAndDimensionLine = 1
345 | }
346 |
347 | [Header("$DIMUPT")]
348 | public CursorControl? CursorSetting { get; set; }
349 |
350 | [Header("$DIMZIN")]
351 | public SuppressionZeroPolicy? SuppressionOfZerosForPrimaryUnitValues { get; set; }
352 |
353 | public enum DisplaySilhouettePolicy
354 | {
355 | DontDraw = 0,
356 | Draw = 1
357 | }
358 |
359 | [Header("$DISPSILH")]
360 | public DisplaySilhouettePolicy? DisplaySilhoutteInGridMode { get; set; }
361 |
362 | public enum DraggingMode
363 | {
364 | off = 0,
365 | on = 1,
366 | auto = 2
367 | }
368 |
369 | [Header("$DRAGMODE")]
370 | public DraggingMode? DraggingEnabled { get; set; }
371 |
372 | [Header("$DWGCODEPAGE")]
373 | public string CodePage { get; set; }
374 |
375 | [Header("$ELEVATION")]
376 | public double? Elevation { get; set; }
377 |
378 | [Header("$EXTMAX")]
379 | public DXFPoint DrawingExtendsUpperRight { get; set; }
380 |
381 | [Header("$EXTMIN")]
382 | public DXFPoint DrawingExtendsLowerRight { get; set; }
383 |
384 | [Header("$FILLETRAD")]
385 | public double? FilletRadius { get; set; }
386 |
387 | [Header("$FILLMODE")]
388 | public int? FillModeIfNonZero { get; set; }
389 |
390 | [Header("$HANDLING")]
391 | public int? NextAvailableHandle { get; set; }
392 |
393 | [Header("$HANDSEED")]
394 | public string HandleSeed { get; set; }
395 |
396 | [Header("$INSBASE")]
397 | public DXFPoint InsertionBase { get; set; }
398 |
399 | [Header("$LIMCHECK")]
400 | public int? CheckLimitsIfNonZero { get; set; }
401 |
402 | [Header("$LIMMAX")]
403 | public DXFPoint LimitsUpperRight { get; set; }
404 |
405 | [Header("$LIMMIN")]
406 | public DXFPoint LimitsLowerLeft { get; set; }
407 |
408 | [Header("$LTSCALE")]
409 | public double? LineTypeScale { get; set; }
410 |
411 | [Header("$LUNITS")]
412 | public int? UnitsForCoordinatesAndDistances { get; set; }
413 |
414 | [Header("$LUPREC")]
415 | public int? UnitPrecisionForCoordinatesAndDistances { get; set; }
416 |
417 | [Header("$MAXACTVP")]
418 | public int MaximumNumberOfViewPorts { get; set; }
419 |
420 | public enum DrawingUnits
421 | {
422 | English = 0,
423 | Metric = 1
424 | }
425 |
426 | [Header("$MEASUREMENT")]
427 | public DrawingUnits? MeasurementUnits { get; set; }
428 |
429 | [Header("$MENU")]
430 | public string MenuFileName { get; set; }
431 |
432 | [Header("$MIRRTEXT")]
433 | public int? MirrorTextIfNonZero { get; set; }
434 |
435 | [Header("$ORTHOMODE")]
436 | public int? OrthogonalModeOnIfNonZero { get; set; }
437 |
438 | [Header("$OSMODE")]
439 | public int? RunningObjectSnapModes { get; set; }
440 |
441 | [Header("$PDMODE")]
442 | public int? PointDisplayMode { get; set; }
443 |
444 | [Header("$PDSIZE")]
445 | public double? PointDisplaySize { get; set; }
446 |
447 | [Header("$PELEVATION")]
448 | public double? PaperElevation { get; set; }
449 |
450 | [Header("$PEXTMAX")]
451 | public DXFPoint PaperExtensionUpperRight { get; set; }
452 |
453 | [Header("$PEXTMIN")]
454 | public DXFPoint PaperExtensionLowerLeft { get; set; }
455 |
456 | public enum SelectionPolicy
457 | {
458 | NoGroupingAtAll = 0,
459 | GroupSelection = 1,
460 | AssociativeHatchSelection = 2,
461 | Both = 3
462 | }
463 |
464 | [Header("$PICKSTYLE")]
465 | public SelectionPolicy? SelectionBehaviour { get; set; }
466 |
467 | [Header("$PINSBASE")]
468 | public DXFPoint PaperSpaceInsertionBase { get; set; }
469 |
470 | [Header("$PLIMCHECK")]
471 | public int? PaperSpaceLimitCheckingIfNonZero { get; set; }
472 |
473 | [Header("$PLIMMAX")]
474 | public DXFPoint PaperSpaceUpperRightLimit { get; set; }
475 |
476 | [Header("$PLIMMIN")]
477 | public DXFPoint PaperSpaceLowerLeftLimit { get; set; }
478 |
479 | public enum PolyLineGeneration
480 | {
481 | EachVertexADash = 0,
482 | ContinousPatternAroundVertices = 1
483 | }
484 |
485 | [Header("$PLINEGEN")]
486 | public PolyLineGeneration? PolyLineBehaviour { get; set; }
487 |
488 | [Header("$PLINEWID")]
489 | public double? PolyLineWidth { get; set; }
490 |
491 | [Header("$PROXYGRAPHICS")]
492 | public int? ProxyGraphics { get; set; }
493 |
494 | public enum LinetypeScaling
495 | {
496 | ViewportScaling = 0,
497 | NoScaling = 1
498 | }
499 |
500 | [Header("$PSLTSCALE")]
501 | public LinetypeScaling? PaperSpaceLinetypeScaling { get; set; }
502 |
503 | [Header("$PUCSNAME")]
504 | public string PaperSpaceUCSName { get; set; }
505 |
506 | [Header("$PUCSORG")]
507 | public DXFPoint PaperSpaceUCSOrigin { get; set; }
508 |
509 | [Header("$PUCSXDIR")]
510 | public DXFPoint PaperSpaceUCSXAxis { get; set; }
511 |
512 | [Header("$PUCSYDIR")]
513 | public DXFPoint PaperSpaceUCSYAxis { get; set; }
514 |
515 | [Header("$QTEXTMODE")]
516 | public int? QuickTextModeIfNonZero { get; set; }
517 |
518 | [Header("$REGENMODE")]
519 | public int? RegenAutoIfNonZero { get; set; }
520 |
521 | public enum ShadingOptions
522 | {
523 | ShadeFaces = 0,
524 | ShadeFacesHighlightEdgesInBlack = 1,
525 | DontFillFacesAndEdgesInEntityColor = 2,
526 | FacesInEntityColorEdgesInBlack = 3
527 | }
528 |
529 | [Header("$SHADEDGE")]
530 | public ShadingOptions? ShadingSettings { get; set; }
531 |
532 | [Header("$SHADEDIF")]
533 | public int? ShadingAmbientLight { get; set; }
534 |
535 | [Header("$SKETCHINC")]
536 | public double SketchRecordIncrement { get; set; }
537 |
538 | [Header("$SKPOLY")]
539 | public int? SketchLinesIfZeroPolylinesIfOne { get; set; }
540 |
541 | [Header("$SPLFRAME")]
542 | public int? DrawSplineControlPolygonIfOne { get; set; }
543 |
544 | [Header("$SPLINESEGS")]
545 | public int? NumberOfLineSegmentsPerSplinePatch { get; set; }
546 |
547 | [Header("$SPLINETYPE")]
548 | public int? SplineTypeForPEDITSpline { get; set; }
549 |
550 | [Header("$SURFTAB1")]
551 | public int? NumberOfMeshTabulationsInFirstDirection { get; set; }
552 |
553 | [Header("$SURFTAB2")]
554 | public int? NumberOfMeshTabulationsInSecondDirection { get; set; }
555 |
556 | [Header("$SURFTYPE")]
557 | public int? SurfaceTypeForPEDITSmooth { get; set; }
558 |
559 | [Header("$SURFU")]
560 | public int? SurfaceDensityForPEDITSmoothInM { get; set; }
561 |
562 | [Header("$SURFV")]
563 | public int? SurfaceDensityForPEDITSmoothInN { get; set; }
564 |
565 | [Header("$TDCREATE")]
566 | public double? CreationDate { get; set; }
567 |
568 | [Header("$TDINDWG")]
569 | public double? TotalEditingTime { get; set; }
570 |
571 | [Header("$TDUPDATE")]
572 | public double? UpdateDate { get; set; }
573 |
574 | [Header("$TDUSRTIMER")]
575 | public double? UserElapsedTimer { get; set; }
576 |
577 | [Header("$TEXTSIZE")]
578 | public double? DefaultTextSize { get; set; }
579 |
580 | [Header("$TEXTSTYLE")]
581 | public string DefaultTextStyle { get; set; }
582 |
583 | [Header("$THICKNESS")]
584 | public double? Thickness { get; set; }
585 |
586 | [Header("$TILEMODE")]
587 | public int? ReleaseCompatibilityTileModeIfOne { get; set; }
588 |
589 | [Header("$TRACEWID")]
590 | public double? TraceWidth { get; set; }
591 |
592 | [Header("$TREEDEPTH")]
593 | public int? MaximumDepthOfSpatialIndex { get; set; }
594 |
595 | [Header("$UCSNAME")]
596 | public string UCSName { get; set; }
597 |
598 | [Header("$UCSORG")]
599 | public DXFPoint UCSOrigin { get; set; }
600 |
601 | [Header("$UCSXDIR")]
602 | public DXFPoint UCSXAxis { get; set; }
603 |
604 | [Header("$UCSYDIR")]
605 | public DXFPoint UCSYAxis { get; set; }
606 |
607 | [Header("$UNITMODE")]
608 | public int? UnitMode { get; set; }
609 |
610 | [Header("$USERI1")]
611 | public int? UserInt1 { get; set; }
612 |
613 | [Header("$USERI2")]
614 | public int? UserInt2 { get; set; }
615 |
616 | [Header("$USERI3")]
617 | public int? UserInt3 { get; set; }
618 |
619 | [Header("$USERI4")]
620 | public int? UserInt4 { get; set; }
621 |
622 | [Header("$USERI5")]
623 | public int? UserInt5 { get; set; }
624 |
625 | [Header("$USERR1")]
626 | public double? UserReal1 { get; set; }
627 |
628 | [Header("$USERR2")]
629 | public double? UserReal2 { get; set; }
630 |
631 | [Header("$USERR3")]
632 | public double? UserReal3 { get; set; }
633 |
634 | [Header("$USERR4")]
635 | public double? UserReal4 { get; set; }
636 |
637 | [Header("$USERR5")]
638 | public double? UserReal5 { get; set; }
639 |
640 | [Header("$USRTIMER")]
641 | public int? UserTimerEnabledIfOne { get; set; }
642 |
643 | [Header("$VISRETAIN")]
644 | public int? RetainVisibleXRefDependendVisibilitySettingsIfOne { get; set; }
645 |
646 | [Header("$WORLDVIEW")]
647 | public int? SetUCSToWCSDuringVIEWIfOne { get; set; }
648 |
649 | }
650 | }
651 |
--------------------------------------------------------------------------------
/DXFLibTests/Resources/Test.dxf:
--------------------------------------------------------------------------------
1 | 0
2 | SECTION
3 | 2
4 | HEADER
5 | 9
6 | $ACADVER
7 | 1
8 | AC1014
9 | 9
10 | $ACADMAINTVER
11 | 70
12 | 9
13 | 9
14 | $DWGCODEPAGE
15 | 3
16 | ASCII
17 | 9
18 | $INSBASE
19 | 10
20 | 0.0
21 | 20
22 | 0.0
23 | 30
24 | 0.0
25 | 9
26 | $EXTMIN
27 | 10
28 | 1.000000000000000E+20
29 | 20
30 | 1.000000000000000E+20
31 | 30
32 | 1.000000000000000E+20
33 | 9
34 | $EXTMAX
35 | 10
36 | -1.000000000000000E+20
37 | 20
38 | -1.000000000000000E+20
39 | 30
40 | -1.000000000000000E+20
41 | 9
42 | $LIMMIN
43 | 10
44 | 0.0
45 | 20
46 | 0.0
47 | 9
48 | $LIMMAX
49 | 10
50 | 12.0
51 | 20
52 | 9.0
53 | 9
54 | $ORTHOMODE
55 | 70
56 | 0
57 | 9
58 | $REGENMODE
59 | 70
60 | 1
61 | 9
62 | $FILLMODE
63 | 70
64 | 1
65 | 9
66 | $QTEXTMODE
67 | 70
68 | 0
69 | 9
70 | $MIRRTEXT
71 | 70
72 | 1
73 | 9
74 | $DRAGMODE
75 | 70
76 | 2
77 | 9
78 | $LTSCALE
79 | 40
80 | 1.0
81 | 9
82 | $OSMODE
83 | 70
84 | 37
85 | 9
86 | $ATTMODE
87 | 70
88 | 1
89 | 9
90 | $TEXTSIZE
91 | 40
92 | 0.2
93 | 9
94 | $TRACEWID
95 | 40
96 | 0.05
97 | 9
98 | $TEXTSTYLE
99 | 7
100 | STANDARD
101 | 9
102 | $CLAYER
103 | 8
104 | 0
105 | 9
106 | $CELTYPE
107 | 6
108 | BYLAYER
109 | 9
110 | $CECOLOR
111 | 62
112 | 256
113 | 9
114 | $CELTSCALE
115 | 40
116 | 1.0
117 | 9
118 | $DELOBJ
119 | 70
120 | 1
121 | 9
122 | $DISPSILH
123 | 70
124 | 0
125 | 9
126 | $DIMSCALE
127 | 40
128 | 1.0
129 | 9
130 | $DIMASZ
131 | 40
132 | 0.18
133 | 9
134 | $DIMEXO
135 | 40
136 | 0.0625
137 | 9
138 | $DIMDLI
139 | 40
140 | 0.38
141 | 9
142 | $DIMRND
143 | 40
144 | 0.0
145 | 9
146 | $DIMDLE
147 | 40
148 | 0.0
149 | 9
150 | $DIMEXE
151 | 40
152 | 0.18
153 | 9
154 | $DIMTP
155 | 40
156 | 0.0
157 | 9
158 | $DIMTM
159 | 40
160 | 0.0
161 | 9
162 | $DIMTXT
163 | 40
164 | 0.18
165 | 9
166 | $DIMCEN
167 | 40
168 | 0.09
169 | 9
170 | $DIMTSZ
171 | 40
172 | 0.0
173 | 9
174 | $DIMTOL
175 | 70
176 | 0
177 | 9
178 | $DIMLIM
179 | 70
180 | 0
181 | 9
182 | $DIMTIH
183 | 70
184 | 1
185 | 9
186 | $DIMTOH
187 | 70
188 | 1
189 | 9
190 | $DIMSE1
191 | 70
192 | 0
193 | 9
194 | $DIMSE2
195 | 70
196 | 0
197 | 9
198 | $DIMTAD
199 | 70
200 | 0
201 | 9
202 | $DIMZIN
203 | 70
204 | 0
205 | 9
206 | $DIMBLK
207 | 1
208 |
209 | 9
210 | $DIMASO
211 | 70
212 | 1
213 | 9
214 | $DIMSHO
215 | 70
216 | 1
217 | 9
218 | $DIMPOST
219 | 1
220 |
221 | 9
222 | $DIMAPOST
223 | 1
224 |
225 | 9
226 | $DIMALT
227 | 70
228 | 0
229 | 9
230 | $DIMALTD
231 | 70
232 | 2
233 | 9
234 | $DIMALTF
235 | 40
236 | 25.4
237 | 9
238 | $DIMLFAC
239 | 40
240 | 1.0
241 | 9
242 | $DIMTOFL
243 | 70
244 | 0
245 | 9
246 | $DIMTVP
247 | 40
248 | 0.0
249 | 9
250 | $DIMTIX
251 | 70
252 | 0
253 | 9
254 | $DIMSOXD
255 | 70
256 | 0
257 | 9
258 | $DIMSAH
259 | 70
260 | 0
261 | 9
262 | $DIMBLK1
263 | 1
264 |
265 | 9
266 | $DIMBLK2
267 | 1
268 |
269 | 9
270 | $DIMSTYLE
271 | 2
272 | STANDARD
273 | 9
274 | $DIMCLRD
275 | 70
276 | 0
277 | 9
278 | $DIMCLRE
279 | 70
280 | 0
281 | 9
282 | $DIMCLRT
283 | 70
284 | 0
285 | 9
286 | $DIMTFAC
287 | 40
288 | 1.0
289 | 9
290 | $DIMGAP
291 | 40
292 | 0.09
293 | 9
294 | $DIMJUST
295 | 70
296 | 0
297 | 9
298 | $DIMSD1
299 | 70
300 | 0
301 | 9
302 | $DIMSD2
303 | 70
304 | 0
305 | 9
306 | $DIMTOLJ
307 | 70
308 | 1
309 | 9
310 | $DIMTZIN
311 | 70
312 | 0
313 | 9
314 | $DIMALTZ
315 | 70
316 | 0
317 | 9
318 | $DIMALTTZ
319 | 70
320 | 0
321 | 9
322 | $DIMFIT
323 | 70
324 | 3
325 | 9
326 | $DIMUPT
327 | 70
328 | 0
329 | 9
330 | $DIMUNIT
331 | 70
332 | 2
333 | 9
334 | $DIMDEC
335 | 70
336 | 4
337 | 9
338 | $DIMTDEC
339 | 70
340 | 4
341 | 9
342 | $DIMALTU
343 | 70
344 | 2
345 | 9
346 | $DIMALTTD
347 | 70
348 | 2
349 | 9
350 | $DIMTXSTY
351 | 7
352 | STANDARD
353 | 9
354 | $DIMAUNIT
355 | 70
356 | 0
357 | 9
358 | $LUNITS
359 | 70
360 | 2
361 | 9
362 | $LUPREC
363 | 70
364 | 4
365 | 9
366 | $SKETCHINC
367 | 40
368 | 0.1
369 | 9
370 | $FILLETRAD
371 | 40
372 | 0.5
373 | 9
374 | $AUNITS
375 | 70
376 | 0
377 | 9
378 | $AUPREC
379 | 70
380 | 0
381 | 9
382 | $MENU
383 | 1
384 | .
385 | 9
386 | $ELEVATION
387 | 40
388 | 0.0
389 | 9
390 | $PELEVATION
391 | 40
392 | 0.0
393 | 9
394 | $THICKNESS
395 | 40
396 | 0.0
397 | 9
398 | $LIMCHECK
399 | 70
400 | 0
401 | 9
402 | $CHAMFERA
403 | 40
404 | 0.5
405 | 9
406 | $CHAMFERB
407 | 40
408 | 0.5
409 | 9
410 | $CHAMFERC
411 | 40
412 | 1.0
413 | 9
414 | $CHAMFERD
415 | 40
416 | 0.0
417 | 9
418 | $SKPOLY
419 | 70
420 | 0
421 | 9
422 | $TDCREATE
423 | 40
424 | 2455259.832997685
425 | 9
426 | $TDUPDATE
427 | 40
428 | 2455259.832997697
429 | 9
430 | $TDINDWG
431 | 40
432 | 0.0000000116
433 | 9
434 | $TDUSRTIMER
435 | 40
436 | 0.0000000116
437 | 9
438 | $USRTIMER
439 | 70
440 | 1
441 | 9
442 | $ANGBASE
443 | 50
444 | 0.0
445 | 9
446 | $ANGDIR
447 | 70
448 | 0
449 | 9
450 | $PDMODE
451 | 70
452 | 0
453 | 9
454 | $PDSIZE
455 | 40
456 | 0.0
457 | 9
458 | $PLINEWID
459 | 40
460 | 0.0
461 | 9
462 | $COORDS
463 | 70
464 | 1
465 | 9
466 | $SPLFRAME
467 | 70
468 | 0
469 | 9
470 | $SPLINETYPE
471 | 70
472 | 6
473 | 9
474 | $SPLINESEGS
475 | 70
476 | 8
477 | 9
478 | $ATTDIA
479 | 70
480 | 0
481 | 9
482 | $ATTREQ
483 | 70
484 | 1
485 | 9
486 | $HANDLING
487 | 70
488 | 1
489 | 9
490 | $HANDSEED
491 | 5
492 | 81
493 | 9
494 | $SURFTAB1
495 | 70
496 | 6
497 | 9
498 | $SURFTAB2
499 | 70
500 | 6
501 | 9
502 | $SURFTYPE
503 | 70
504 | 6
505 | 9
506 | $SURFU
507 | 70
508 | 6
509 | 9
510 | $SURFV
511 | 70
512 | 6
513 | 9
514 | $UCSNAME
515 | 2
516 |
517 | 9
518 | $UCSORG
519 | 10
520 | 0.0
521 | 20
522 | 0.0
523 | 30
524 | 0.0
525 | 9
526 | $UCSXDIR
527 | 10
528 | 1.0
529 | 20
530 | 0.0
531 | 30
532 | 0.0
533 | 9
534 | $UCSYDIR
535 | 10
536 | 0.0
537 | 20
538 | 1.0
539 | 30
540 | 0.0
541 | 9
542 | $PUCSNAME
543 | 2
544 |
545 | 9
546 | $PUCSORG
547 | 10
548 | 0.0
549 | 20
550 | 0.0
551 | 30
552 | 0.0
553 | 9
554 | $PUCSXDIR
555 | 10
556 | 1.0
557 | 20
558 | 0.0
559 | 30
560 | 0.0
561 | 9
562 | $PUCSYDIR
563 | 10
564 | 0.0
565 | 20
566 | 1.0
567 | 30
568 | 0.0
569 | 9
570 | $USERI1
571 | 70
572 | 0
573 | 9
574 | $USERI2
575 | 70
576 | 0
577 | 9
578 | $USERI3
579 | 70
580 | 0
581 | 9
582 | $USERI4
583 | 70
584 | 0
585 | 9
586 | $USERI5
587 | 70
588 | 0
589 | 9
590 | $USERR1
591 | 40
592 | 0.0
593 | 9
594 | $USERR2
595 | 40
596 | 0.0
597 | 9
598 | $USERR3
599 | 40
600 | 0.0
601 | 9
602 | $USERR4
603 | 40
604 | 0.0
605 | 9
606 | $USERR5
607 | 40
608 | 0.0
609 | 9
610 | $WORLDVIEW
611 | 70
612 | 1
613 | 9
614 | $SHADEDGE
615 | 70
616 | 3
617 | 9
618 | $SHADEDIF
619 | 70
620 | 70
621 | 9
622 | $TILEMODE
623 | 70
624 | 1
625 | 9
626 | $MAXACTVP
627 | 70
628 | 64
629 | 9
630 | $PINSBASE
631 | 10
632 | 0.0
633 | 20
634 | 0.0
635 | 30
636 | 0.0
637 | 9
638 | $PLIMCHECK
639 | 70
640 | 0
641 | 9
642 | $PEXTMIN
643 | 10
644 | 1.000000000000000E+20
645 | 20
646 | 1.000000000000000E+20
647 | 30
648 | 1.000000000000000E+20
649 | 9
650 | $PEXTMAX
651 | 10
652 | -1.000000000000000E+20
653 | 20
654 | -1.000000000000000E+20
655 | 30
656 | -1.000000000000000E+20
657 | 9
658 | $PLIMMIN
659 | 10
660 | 0.0
661 | 20
662 | 0.0
663 | 9
664 | $PLIMMAX
665 | 10
666 | 12.0
667 | 20
668 | 9.0
669 | 9
670 | $UNITMODE
671 | 70
672 | 0
673 | 9
674 | $VISRETAIN
675 | 70
676 | 1
677 | 9
678 | $PLINEGEN
679 | 70
680 | 0
681 | 9
682 | $PSLTSCALE
683 | 70
684 | 1
685 | 9
686 | $TREEDEPTH
687 | 70
688 | 3020
689 | 9
690 | $PICKSTYLE
691 | 70
692 | 1
693 | 9
694 | $CMLSTYLE
695 | 2
696 | STANDARD
697 | 9
698 | $CMLJUST
699 | 70
700 | 0
701 | 9
702 | $CMLSCALE
703 | 40
704 | 1.0
705 | 9
706 | $PROXYGRAPHICS
707 | 70
708 | 1
709 | 9
710 | $MEASUREMENT
711 | 70
712 | 0
713 | 0
714 | ENDSEC
715 | 0
716 | SECTION
717 | 2
718 | CLASSES
719 | 0
720 | CLASS
721 | 1
722 | ACDBDICTIONARYWDFLT
723 | 2
724 | AcDbDictionaryWithDefault
725 | 3
726 | ObjectDBX Classes
727 | 90
728 | 0
729 | 280
730 | 0
731 | 281
732 | 0
733 | 0
734 | CLASS
735 | 1
736 | VISUALSTYLE
737 | 2
738 | AcDbVisualStyle
739 | 3
740 | ObjectDBX Classes
741 | 90
742 | 4095
743 | 280
744 | 0
745 | 281
746 | 0
747 | 0
748 | CLASS
749 | 1
750 | XRECORD
751 | 2
752 | AcDbXrecord
753 | 3
754 | AutoCAD 2000
755 | 90
756 | 0
757 | 280
758 | 0
759 | 281
760 | 0
761 | 0
762 | CLASS
763 | 1
764 | LWPOLYLINE
765 | 2
766 | AcDbPolyline
767 | 3
768 | AutoCAD 2000
769 | 90
770 | 0
771 | 280
772 | 0
773 | 281
774 | 1
775 | 0
776 | CLASS
777 | 1
778 | HATCH
779 | 2
780 | AcDbHatch
781 | 3
782 | AutoCAD 2000
783 | 90
784 | 0
785 | 280
786 | 0
787 | 281
788 | 1
789 | 0
790 | CLASS
791 | 1
792 | ACDBPLACEHOLDER
793 | 2
794 | AcDbPlaceHolder
795 | 3
796 | ObjectDBX Classes
797 | 90
798 | 0
799 | 280
800 | 0
801 | 281
802 | 0
803 | 0
804 | CLASS
805 | 1
806 | LAYOUT
807 | 2
808 | AcDbLayout
809 | 3
810 | ObjectDBX Classes
811 | 90
812 | 0
813 | 280
814 | 0
815 | 281
816 | 0
817 | 0
818 | ENDSEC
819 | 0
820 | SECTION
821 | 2
822 | TABLES
823 | 0
824 | TABLE
825 | 2
826 | VPORT
827 | 5
828 | 8
829 | 330
830 | 0
831 | 100
832 | AcDbSymbolTable
833 | 70
834 | 1
835 | 0
836 | VPORT
837 | 5
838 | 29
839 | 330
840 | 8
841 | 100
842 | AcDbSymbolTableRecord
843 | 100
844 | AcDbViewportTableRecord
845 | 2
846 | *ACTIVE
847 | 70
848 | 0
849 | 10
850 | 0.0
851 | 20
852 | 0.0
853 | 11
854 | 1.0
855 | 21
856 | 1.0
857 | 12
858 | 0.0
859 | 22
860 | 0.0
861 | 13
862 | 0.0
863 | 23
864 | 0.0
865 | 14
866 | 0.5
867 | 24
868 | 0.5
869 | 15
870 | 0.5
871 | 25
872 | 0.5
873 | 16
874 | 0.0
875 | 26
876 | 0.0
877 | 36
878 | 1.0
879 | 17
880 | 306.0
881 | 27
882 | 396.0
883 | 37
884 | 0.0
885 | 40
886 | 792.0
887 | 41
888 | 0.7727272727272727
889 | 42
890 | 50.0
891 | 43
892 | 0.0
893 | 44
894 | 0.0
895 | 50
896 | 0.0
897 | 51
898 | 0.0
899 | 71
900 | 0
901 | 72
902 | 100
903 | 73
904 | 1
905 | 74
906 | 3
907 | 75
908 | 0
909 | 76
910 | 0
911 | 77
912 | 0
913 | 78
914 | 0
915 | 0
916 | ENDTAB
917 | 0
918 | TABLE
919 | 2
920 | LTYPE
921 | 5
922 | 5
923 | 330
924 | 0
925 | 100
926 | AcDbSymbolTable
927 | 70
928 | 1
929 | 0
930 | LTYPE
931 | 5
932 | 14
933 | 330
934 | 5
935 | 100
936 | AcDbSymbolTableRecord
937 | 100
938 | AcDbLinetypeTableRecord
939 | 2
940 | BYBLOCK
941 | 70
942 | 0
943 | 3
944 |
945 | 72
946 | 65
947 | 73
948 | 0
949 | 40
950 | 0.0
951 | 0
952 | LTYPE
953 | 5
954 | 15
955 | 330
956 | 5
957 | 100
958 | AcDbSymbolTableRecord
959 | 100
960 | AcDbLinetypeTableRecord
961 | 2
962 | BYLAYER
963 | 70
964 | 0
965 | 3
966 |
967 | 72
968 | 65
969 | 73
970 | 0
971 | 40
972 | 0.0
973 | 0
974 | LTYPE
975 | 5
976 | 16
977 | 330
978 | 5
979 | 100
980 | AcDbSymbolTableRecord
981 | 100
982 | AcDbLinetypeTableRecord
983 | 2
984 | CONTINUOUS
985 | 70
986 | 0
987 | 3
988 | Solid line
989 | 72
990 | 65
991 | 73
992 | 0
993 | 40
994 | 0.0
995 | 0
996 | ENDTAB
997 | 0
998 | TABLE
999 | 2
1000 | LAYER
1001 | 5
1002 | 2
1003 | 330
1004 | 0
1005 | 100
1006 | AcDbSymbolTable
1007 | 70
1008 | 2
1009 | 0
1010 | LAYER
1011 | 5
1012 | 10
1013 | 330
1014 | 2
1015 | 100
1016 | AcDbSymbolTableRecord
1017 | 100
1018 | AcDbLayerTableRecord
1019 | 2
1020 | 0
1021 | 70
1022 | 0
1023 | 62
1024 | 7
1025 | 6
1026 | CONTINUOUS
1027 | 0
1028 | LAYER
1029 | 5
1030 | 3B
1031 | 330
1032 | 2
1033 | 100
1034 | AcDbSymbolTableRecord
1035 | 100
1036 | AcDbLayerTableRecord
1037 | 2
1038 | LAYER_1
1039 | 70
1040 | 0
1041 | 62
1042 | 7
1043 | 6
1044 | CONTINUOUS
1045 | 0
1046 | ENDTAB
1047 | 0
1048 | TABLE
1049 | 2
1050 | STYLE
1051 | 5
1052 | 3
1053 | 330
1054 | 0
1055 | 100
1056 | AcDbSymbolTable
1057 | 70
1058 | 1
1059 | 0
1060 | STYLE
1061 | 5
1062 | 11
1063 | 330
1064 | 3
1065 | 100
1066 | AcDbSymbolTableRecord
1067 | 100
1068 | AcDbTextStyleTableRecord
1069 | 2
1070 | STANDARD
1071 | 70
1072 | 0
1073 | 40
1074 | 0.0
1075 | 41
1076 | 1.0
1077 | 50
1078 | 0.0
1079 | 71
1080 | 0
1081 | 42
1082 | 0.2
1083 | 3
1084 | txt
1085 | 4
1086 |
1087 | 0
1088 | ENDTAB
1089 | 0
1090 | TABLE
1091 | 2
1092 | VIEW
1093 | 5
1094 | 6
1095 | 330
1096 | 0
1097 | 100
1098 | AcDbSymbolTable
1099 | 70
1100 | 0
1101 | 0
1102 | ENDTAB
1103 | 0
1104 | TABLE
1105 | 2
1106 | UCS
1107 | 5
1108 | 7
1109 | 330
1110 | 0
1111 | 100
1112 | AcDbSymbolTable
1113 | 70
1114 | 0
1115 | 0
1116 | ENDTAB
1117 | 0
1118 | TABLE
1119 | 2
1120 | APPID
1121 | 5
1122 | 9
1123 | 330
1124 | 0
1125 | 100
1126 | AcDbSymbolTable
1127 | 70
1128 | 1
1129 | 0
1130 | APPID
1131 | 5
1132 | 12
1133 | 330
1134 | 9
1135 | 100
1136 | AcDbSymbolTableRecord
1137 | 100
1138 | AcDbRegAppTableRecord
1139 | 2
1140 | ACAD
1141 | 70
1142 | 0
1143 | 0
1144 | ENDTAB
1145 | 0
1146 | TABLE
1147 | 2
1148 | DIMSTYLE
1149 | 5
1150 | A
1151 | 330
1152 | 0
1153 | 100
1154 | AcDbSymbolTable
1155 | 70
1156 | 1
1157 | 0
1158 | DIMSTYLE
1159 | 105
1160 | 27
1161 | 330
1162 | A
1163 | 100
1164 | AcDbSymbolTableRecord
1165 | 100
1166 | AcDbDimStyleTableRecord
1167 | 2
1168 | STANDARD
1169 | 70
1170 | 0
1171 | 3
1172 |
1173 | 4
1174 |
1175 | 5
1176 |
1177 | 6
1178 |
1179 | 7
1180 |
1181 | 40
1182 | 1.0
1183 | 41
1184 | 0.18
1185 | 42
1186 | 0.0625
1187 | 43
1188 | 0.38
1189 | 44
1190 | 0.18
1191 | 45
1192 | 0.0
1193 | 46
1194 | 0.0
1195 | 47
1196 | 0.0
1197 | 48
1198 | 0.0
1199 | 140
1200 | 0.18
1201 | 141
1202 | 0.09
1203 | 142
1204 | 0.0
1205 | 143
1206 | 25.4
1207 | 144
1208 | 1.0
1209 | 145
1210 | 0.0
1211 | 146
1212 | 1.0
1213 | 147
1214 | 0.09
1215 | 71
1216 | 0
1217 | 72
1218 | 0
1219 | 73
1220 | 1
1221 | 74
1222 | 1
1223 | 75
1224 | 0
1225 | 76
1226 | 0
1227 | 77
1228 | 0
1229 | 78
1230 | 0
1231 | 170
1232 | 0
1233 | 171
1234 | 2
1235 | 172
1236 | 0
1237 | 173
1238 | 0
1239 | 174
1240 | 0
1241 | 175
1242 | 0
1243 | 176
1244 | 0
1245 | 177
1246 | 0
1247 | 178
1248 | 0
1249 | 270
1250 | 2
1251 | 271
1252 | 4
1253 | 272
1254 | 4
1255 | 273
1256 | 2
1257 | 274
1258 | 2
1259 | 340
1260 | 11
1261 | 275
1262 | 0
1263 | 280
1264 | 0
1265 | 281
1266 | 0
1267 | 282
1268 | 0
1269 | 283
1270 | 1
1271 | 284
1272 | 0
1273 | 285
1274 | 0
1275 | 286
1276 | 0
1277 | 287
1278 | 3
1279 | 288
1280 | 0
1281 | 0
1282 | ENDTAB
1283 | 0
1284 | TABLE
1285 | 2
1286 | BLOCK_RECORD
1287 | 5
1288 | 1
1289 | 330
1290 | 0
1291 | 100
1292 | AcDbSymbolTable
1293 | 70
1294 | 3
1295 | 0
1296 | BLOCK_RECORD
1297 | 5
1298 | 1F
1299 | 330
1300 | 1
1301 | 100
1302 | AcDbSymbolTableRecord
1303 | 100
1304 | AcDbBlockTableRecord
1305 | 2
1306 | *MODEL_SPACE
1307 | 0
1308 | BLOCK_RECORD
1309 | 5
1310 | 1B
1311 | 330
1312 | 1
1313 | 100
1314 | AcDbSymbolTableRecord
1315 | 100
1316 | AcDbBlockTableRecord
1317 | 2
1318 | *PAPER_SPACE
1319 | 0
1320 | BLOCK_RECORD
1321 | 5
1322 | 3C
1323 | 330
1324 | 1
1325 | 100
1326 | AcDbSymbolTableRecord
1327 | 100
1328 | AcDbBlockTableRecord
1329 | 2
1330 | BLOCK_2
1331 | 0
1332 | BLOCK_RECORD
1333 | 5
1334 | 54
1335 | 330
1336 | 1
1337 | 100
1338 | AcDbSymbolTableRecord
1339 | 100
1340 | AcDbBlockTableRecord
1341 | 2
1342 | BLOCK_3
1343 | 0
1344 | ENDTAB
1345 | 0
1346 | ENDSEC
1347 | 0
1348 | SECTION
1349 | 2
1350 | BLOCKS
1351 | 0
1352 | BLOCK
1353 | 5
1354 | 20
1355 | 330
1356 | 1F
1357 | 100
1358 | AcDbEntity
1359 | 8
1360 | 0
1361 | 100
1362 | AcDbBlockBegin
1363 | 2
1364 | *MODEL_SPACE
1365 | 70
1366 | 0
1367 | 71
1368 | 0
1369 | 10
1370 | 0.0
1371 | 20
1372 | 0.0
1373 | 30
1374 | 0.0
1375 | 3
1376 | *MODEL_SPACE
1377 | 1
1378 |
1379 | 0
1380 | ENDBLK
1381 | 5
1382 | 21
1383 | 330
1384 | 1F
1385 | 100
1386 | AcDbEntity
1387 | 8
1388 | 0
1389 | 100
1390 | AcDbBlockEnd
1391 | 0
1392 | BLOCK
1393 | 5
1394 | 1C
1395 | 330
1396 | 1B
1397 | 100
1398 | AcDbEntity
1399 | 67
1400 | 1
1401 | 8
1402 | 0
1403 | 100
1404 | AcDbBlockBegin
1405 | 2
1406 | *PAPER_SPACE
1407 | 70
1408 | 0
1409 | 71
1410 | 0
1411 | 10
1412 | 0.0
1413 | 20
1414 | 0.0
1415 | 30
1416 | 0.0
1417 | 3
1418 | *PAPER_SPACE
1419 | 1
1420 |
1421 | 0
1422 | ENDBLK
1423 | 5
1424 | 1D
1425 | 330
1426 | 1B
1427 | 100
1428 | AcDbEntity
1429 | 67
1430 | 1
1431 | 8
1432 | 0
1433 | 100
1434 | AcDbBlockEnd
1435 | 0
1436 | BLOCK
1437 | 5
1438 | 3E
1439 | 330
1440 | 3C
1441 | 100
1442 | AcDbEntity
1443 | 8
1444 | 0
1445 | 100
1446 | AcDbBlockBegin
1447 | 2
1448 | BLOCK_2
1449 | 70
1450 | 0
1451 | 71
1452 | 0
1453 | 10
1454 | 0.0
1455 | 20
1456 | 0.0
1457 | 30
1458 | 0.0
1459 | 3
1460 | BLOCK_2
1461 | 1
1462 |
1463 | 0
1464 | POLYLINE
1465 | 5
1466 | 40
1467 | 330
1468 | 3C
1469 | 100
1470 | AcDbEntity
1471 | 8
1472 | LAYER_1
1473 | 62
1474 | 250
1475 | 100
1476 | AcDb2dPolyline
1477 | 66
1478 | 1
1479 | 10
1480 | 0.0
1481 | 20
1482 | 0.0
1483 | 30
1484 | 0.0
1485 | 0
1486 | VERTEX
1487 | 5
1488 | 41
1489 | 330
1490 | 40
1491 | 100
1492 | AcDbEntity
1493 | 8
1494 | LAYER_1
1495 | 62
1496 | 250
1497 | 100
1498 | AcDbVertex
1499 | 100
1500 | AcDb2dVertex
1501 | 10
1502 | 72.4287109375
1503 | 20
1504 | 728.09521484375
1505 | 30
1506 | 0.0
1507 | 0
1508 | VERTEX
1509 | 5
1510 | 42
1511 | 330
1512 | 40
1513 | 100
1514 | AcDbEntity
1515 | 8
1516 | LAYER_1
1517 | 62
1518 | 250
1519 | 100
1520 | AcDbVertex
1521 | 100
1522 | AcDb2dVertex
1523 | 10
1524 | 320.0478515625
1525 | 20
1526 | 707.85693359375
1527 | 30
1528 | 0.0
1529 | 0
1530 | SEQEND
1531 | 5
1532 | 43
1533 | 330
1534 | 40
1535 | 100
1536 | AcDbEntity
1537 | 8
1538 | LAYER_1
1539 | 0
1540 | POLYLINE
1541 | 5
1542 | 44
1543 | 330
1544 | 3C
1545 | 100
1546 | AcDbEntity
1547 | 8
1548 | LAYER_1
1549 | 62
1550 | 250
1551 | 100
1552 | AcDb2dPolyline
1553 | 66
1554 | 1
1555 | 10
1556 | 0.0
1557 | 20
1558 | 0.0
1559 | 30
1560 | 0.0
1561 | 0
1562 | VERTEX
1563 | 5
1564 | 45
1565 | 330
1566 | 44
1567 | 100
1568 | AcDbEntity
1569 | 8
1570 | LAYER_1
1571 | 62
1572 | 250
1573 | 100
1574 | AcDbVertex
1575 | 100
1576 | AcDb2dVertex
1577 | 10
1578 | 320.0478515625
1579 | 20
1580 | 707.85693359375
1581 | 30
1582 | 0.0
1583 | 0
1584 | VERTEX
1585 | 5
1586 | 46
1587 | 330
1588 | 44
1589 | 100
1590 | AcDbEntity
1591 | 8
1592 | LAYER_1
1593 | 62
1594 | 250
1595 | 100
1596 | AcDbVertex
1597 | 100
1598 | AcDb2dVertex
1599 | 10
1600 | 247.4287109375
1601 | 20
1602 | 561.4287109375
1603 | 30
1604 | 0.0
1605 | 0
1606 | SEQEND
1607 | 5
1608 | 47
1609 | 330
1610 | 44
1611 | 100
1612 | AcDbEntity
1613 | 8
1614 | LAYER_1
1615 | 0
1616 | POLYLINE
1617 | 5
1618 | 48
1619 | 330
1620 | 3C
1621 | 100
1622 | AcDbEntity
1623 | 8
1624 | LAYER_1
1625 | 62
1626 | 250
1627 | 100
1628 | AcDb2dPolyline
1629 | 66
1630 | 1
1631 | 10
1632 | 0.0
1633 | 20
1634 | 0.0
1635 | 30
1636 | 0.0
1637 | 0
1638 | VERTEX
1639 | 5
1640 | 49
1641 | 330
1642 | 48
1643 | 100
1644 | AcDbEntity
1645 | 8
1646 | LAYER_1
1647 | 62
1648 | 250
1649 | 100
1650 | AcDbVertex
1651 | 100
1652 | AcDb2dVertex
1653 | 10
1654 | 247.4287109375
1655 | 20
1656 | 561.4287109375
1657 | 30
1658 | 0.0
1659 | 0
1660 | VERTEX
1661 | 5
1662 | 4A
1663 | 330
1664 | 48
1665 | 100
1666 | AcDbEntity
1667 | 8
1668 | LAYER_1
1669 | 62
1670 | 250
1671 | 100
1672 | AcDbVertex
1673 | 100
1674 | AcDb2dVertex
1675 | 10
1676 | 209.33349609375
1677 | 20
1678 | 648.33349609375
1679 | 30
1680 | 0.0
1681 | 0
1682 | SEQEND
1683 | 5
1684 | 4B
1685 | 330
1686 | 48
1687 | 100
1688 | AcDbEntity
1689 | 8
1690 | LAYER_1
1691 | 0
1692 | POLYLINE
1693 | 5
1694 | 4C
1695 | 330
1696 | 3C
1697 | 100
1698 | AcDbEntity
1699 | 8
1700 | LAYER_1
1701 | 62
1702 | 250
1703 | 100
1704 | AcDb2dPolyline
1705 | 66
1706 | 1
1707 | 10
1708 | 0.0
1709 | 20
1710 | 0.0
1711 | 30
1712 | 0.0
1713 | 0
1714 | VERTEX
1715 | 5
1716 | 4D
1717 | 330
1718 | 4C
1719 | 100
1720 | AcDbEntity
1721 | 8
1722 | LAYER_1
1723 | 62
1724 | 250
1725 | 100
1726 | AcDbVertex
1727 | 100
1728 | AcDb2dVertex
1729 | 10
1730 | 209.33349609375
1731 | 20
1732 | 648.33349609375
1733 | 30
1734 | 0.0
1735 | 0
1736 | VERTEX
1737 | 5
1738 | 4E
1739 | 330
1740 | 4C
1741 | 100
1742 | AcDbEntity
1743 | 8
1744 | LAYER_1
1745 | 62
1746 | 250
1747 | 100
1748 | AcDbVertex
1749 | 100
1750 | AcDb2dVertex
1751 | 10
1752 | 90.28564453125
1753 | 20
1754 | 707.85693359375
1755 | 30
1756 | 0.0
1757 | 0
1758 | SEQEND
1759 | 5
1760 | 4F
1761 | 330
1762 | 4C
1763 | 100
1764 | AcDbEntity
1765 | 8
1766 | LAYER_1
1767 | 0
1768 | POLYLINE
1769 | 5
1770 | 50
1771 | 330
1772 | 3C
1773 | 100
1774 | AcDbEntity
1775 | 8
1776 | LAYER_1
1777 | 62
1778 | 250
1779 | 100
1780 | AcDb2dPolyline
1781 | 66
1782 | 1
1783 | 10
1784 | 0.0
1785 | 20
1786 | 0.0
1787 | 30
1788 | 0.0
1789 | 0
1790 | VERTEX
1791 | 5
1792 | 51
1793 | 330
1794 | 50
1795 | 100
1796 | AcDbEntity
1797 | 8
1798 | LAYER_1
1799 | 62
1800 | 250
1801 | 100
1802 | AcDbVertex
1803 | 100
1804 | AcDb2dVertex
1805 | 10
1806 | 72.4287109375
1807 | 20
1808 | 728.09521484375
1809 | 30
1810 | 0.0
1811 | 0
1812 | VERTEX
1813 | 5
1814 | 52
1815 | 330
1816 | 50
1817 | 100
1818 | AcDbEntity
1819 | 8
1820 | LAYER_1
1821 | 62
1822 | 250
1823 | 100
1824 | AcDbVertex
1825 | 100
1826 | AcDb2dVertex
1827 | 10
1828 | 90.28564453125
1829 | 20
1830 | 707.85693359375
1831 | 30
1832 | 0.0
1833 | 0
1834 | SEQEND
1835 | 5
1836 | 53
1837 | 330
1838 | 50
1839 | 100
1840 | AcDbEntity
1841 | 8
1842 | LAYER_1
1843 | 0
1844 | ENDBLK
1845 | 5
1846 | 3F
1847 | 330
1848 | 3C
1849 | 100
1850 | AcDbEntity
1851 | 8
1852 | 0
1853 | 100
1854 | AcDbBlockEnd
1855 | 0
1856 | BLOCK
1857 | 5
1858 | 56
1859 | 330
1860 | 54
1861 | 100
1862 | AcDbEntity
1863 | 8
1864 | 0
1865 | 100
1866 | AcDbBlockBegin
1867 | 2
1868 | BLOCK_3
1869 | 70
1870 | 0
1871 | 71
1872 | 0
1873 | 10
1874 | 0.0
1875 | 20
1876 | 0.0
1877 | 30
1878 | 0.0
1879 | 3
1880 | BLOCK_3
1881 | 1
1882 |
1883 | 0
1884 | POLYLINE
1885 | 5
1886 | 58
1887 | 330
1888 | 54
1889 | 100
1890 | AcDbEntity
1891 | 8
1892 | LAYER_1
1893 | 62
1894 | 250
1895 | 100
1896 | AcDb2dPolyline
1897 | 66
1898 | 1
1899 | 10
1900 | 0.0
1901 | 20
1902 | 0.0
1903 | 30
1904 | 0.0
1905 | 0
1906 | VERTEX
1907 | 5
1908 | 59
1909 | 330
1910 | 58
1911 | 100
1912 | AcDbEntity
1913 | 8
1914 | LAYER_1
1915 | 62
1916 | 250
1917 | 100
1918 | AcDbVertex
1919 | 100
1920 | AcDb2dVertex
1921 | 10
1922 | 354.5712890625
1923 | 20
1924 | 330.4765625
1925 | 30
1926 | 0.0
1927 | 0
1928 | VERTEX
1929 | 5
1930 | 5A
1931 | 330
1932 | 58
1933 | 100
1934 | AcDbEntity
1935 | 8
1936 | LAYER_1
1937 | 62
1938 | 250
1939 | 100
1940 | AcDbVertex
1941 | 100
1942 | AcDb2dVertex
1943 | 10
1944 | 106.9521484375
1945 | 20
1946 | 330.4765625
1947 | 30
1948 | 0.0
1949 | 0
1950 | VERTEX
1951 | 5
1952 | 5B
1953 | 330
1954 | 58
1955 | 100
1956 | AcDbEntity
1957 | 8
1958 | LAYER_1
1959 | 62
1960 | 250
1961 | 100
1962 | AcDbVertex
1963 | 100
1964 | AcDb2dVertex
1965 | 10
1966 | 106.9521484375
1967 | 20
1968 | 447.14306640625
1969 | 30
1970 | 0.0
1971 | 0
1972 | VERTEX
1973 | 5
1974 | 5C
1975 | 330
1976 | 58
1977 | 100
1978 | AcDbEntity
1979 | 8
1980 | LAYER_1
1981 | 62
1982 | 250
1983 | 100
1984 | AcDbVertex
1985 | 100
1986 | AcDb2dVertex
1987 | 10
1988 | 354.5712890625
1989 | 20
1990 | 447.14306640625
1991 | 30
1992 | 0.0
1993 | 0
1994 | VERTEX
1995 | 5
1996 | 5D
1997 | 330
1998 | 58
1999 | 100
2000 | AcDbEntity
2001 | 8
2002 | LAYER_1
2003 | 62
2004 | 250
2005 | 100
2006 | AcDbVertex
2007 | 100
2008 | AcDb2dVertex
2009 | 10
2010 | 354.5712890625
2011 | 20
2012 | 330.4765625
2013 | 30
2014 | 0.0
2015 | 0
2016 | SEQEND
2017 | 5
2018 | 5E
2019 | 330
2020 | 58
2021 | 100
2022 | AcDbEntity
2023 | 8
2024 | LAYER_1
2025 | 0
2026 | ENDBLK
2027 | 5
2028 | 57
2029 | 330
2030 | 54
2031 | 100
2032 | AcDbEntity
2033 | 8
2034 | 0
2035 | 100
2036 | AcDbBlockEnd
2037 | 0
2038 | ENDSEC
2039 | 0
2040 | SECTION
2041 | 2
2042 | ENTITIES
2043 | 0
2044 | INSERT
2045 | 5
2046 | 3D
2047 | 330
2048 | 1F
2049 | 100
2050 | AcDbEntity
2051 | 8
2052 | LAYER_1
2053 | 100
2054 | AcDbBlockReference
2055 | 2
2056 | BLOCK_2
2057 | 10
2058 | 0.0
2059 | 20
2060 | 0.0
2061 | 30
2062 | 0.0
2063 | 0
2064 | INSERT
2065 | 5
2066 | 55
2067 | 330
2068 | 1F
2069 | 100
2070 | AcDbEntity
2071 | 8
2072 | LAYER_1
2073 | 100
2074 | AcDbBlockReference
2075 | 2
2076 | BLOCK_3
2077 | 10
2078 | 0.0
2079 | 20
2080 | 0.0
2081 | 30
2082 | 0.0
2083 | 0
2084 | SPLINE
2085 | 5
2086 | 5F
2087 | 330
2088 | 1F
2089 | 100
2090 | AcDbEntity
2091 | 8
2092 | LAYER_1
2093 | 62
2094 | 250
2095 | 100
2096 | AcDbSpline
2097 | 210
2098 | 0.0
2099 | 220
2100 | 0.0
2101 | 230
2102 | 1.0
2103 | 70
2104 | 11
2105 | 71
2106 | 3
2107 | 72
2108 | 17
2109 | 73
2110 | 13
2111 | 74
2112 | 0
2113 | 42
2114 | 0.0000000001
2115 | 43
2116 | 0.0000000001
2117 | 40
2118 | 0.0
2119 | 40
2120 | 0.0
2121 | 40
2122 | 0.0
2123 | 40
2124 | 0.0
2125 | 40
2126 | 1.0
2127 | 40
2128 | 1.0
2129 | 40
2130 | 1.0
2131 | 40
2132 | 2.0
2133 | 40
2134 | 2.0
2135 | 40
2136 | 2.0
2137 | 40
2138 | 3.0
2139 | 40
2140 | 3.0
2141 | 40
2142 | 3.0
2143 | 40
2144 | 4.0
2145 | 40
2146 | 4.0
2147 | 40
2148 | 4.0
2149 | 40
2150 | 4.0
2151 | 10
2152 | 526.0
2153 | 20
2154 | 536.4287109375
2155 | 30
2156 | 0.0
2157 | 10
2158 | 526.0
2159 | 20
2160 | 504.869140625
2161 | 30
2162 | 0.0
2163 | 10
2164 | 500.416015625
2165 | 20
2166 | 479.28564453125
2167 | 30
2168 | 0.0
2169 | 10
2170 | 468.8564453125
2171 | 20
2172 | 479.28564453125
2173 | 30
2174 | 0.0
2175 | 10
2176 | 437.2978515625
2177 | 20
2178 | 479.28564453125
2179 | 30
2180 | 0.0
2181 | 10
2182 | 411.7138671875
2183 | 20
2184 | 504.869140625
2185 | 30
2186 | 0.0
2187 | 10
2188 | 411.7138671875
2189 | 20
2190 | 536.4287109375
2191 | 30
2192 | 0.0
2193 | 10
2194 | 411.7138671875
2195 | 20
2196 | 567.9873046875
2197 | 30
2198 | 0.0
2199 | 10
2200 | 437.2978515625
2201 | 20
2202 | 593.5712890625
2203 | 30
2204 | 0.0
2205 | 10
2206 | 468.8564453125
2207 | 20
2208 | 593.5712890625
2209 | 30
2210 | 0.0
2211 | 10
2212 | 500.416015625
2213 | 20
2214 | 593.5712890625
2215 | 30
2216 | 0.0
2217 | 10
2218 | 526.0
2219 | 20
2220 | 567.9873046875
2221 | 30
2222 | 0.0
2223 | 10
2224 | 526.0
2225 | 20
2226 | 536.4287109375
2227 | 30
2228 | 0.0
2229 | 0
2230 | ENDSEC
2231 | 0
2232 | SECTION
2233 | 2
2234 | OBJECTS
2235 | 0
2236 | DICTIONARY
2237 | 5
2238 | C
2239 | 330
2240 | 0
2241 | 100
2242 | AcDbDictionary
2243 | 3
2244 | ACAD_GROUP
2245 | 350
2246 | D
2247 | 3
2248 | ACAD_LAYOUT
2249 | 350
2250 | 1A
2251 | 3
2252 | ACAD_MLINESTYLE
2253 | 350
2254 | 17
2255 | 3
2256 | ACAD_PLOTSETTINGS
2257 | 350
2258 | 19
2259 | 3
2260 | ACAD_TABLESTYLE
2261 | 350
2262 | 80
2263 | 3
2264 | ACAD_VISUALSTYLE
2265 | 350
2266 | 2A
2267 | 3
2268 | ACDBHEADERROUNDTRIPXREC
2269 | 350
2270 | 60
2271 | 0
2272 | DICTIONARY
2273 | 5
2274 | D
2275 | 102
2276 | {ACAD_REACTORS
2277 | 330
2278 | C
2279 | 102
2280 | }
2281 | 330
2282 | C
2283 | 100
2284 | AcDbDictionary
2285 | 0
2286 | DICTIONARY
2287 | 5
2288 | 1A
2289 | 102
2290 | {ACAD_REACTORS
2291 | 330
2292 | C
2293 | 102
2294 | }
2295 | 330
2296 | C
2297 | 100
2298 | AcDbDictionary
2299 | 0
2300 | DICTIONARY
2301 | 5
2302 | 17
2303 | 102
2304 | {ACAD_REACTORS
2305 | 330
2306 | C
2307 | 102
2308 | }
2309 | 330
2310 | C
2311 | 100
2312 | AcDbDictionary
2313 | 3
2314 | STANDARD
2315 | 350
2316 | 18
2317 | 0
2318 | DICTIONARY
2319 | 5
2320 | 19
2321 | 102
2322 | {ACAD_REACTORS
2323 | 330
2324 | C
2325 | 102
2326 | }
2327 | 330
2328 | C
2329 | 100
2330 | AcDbDictionary
2331 | 0
2332 | DICTIONARY
2333 | 5
2334 | 80
2335 | 102
2336 | {ACAD_REACTORS
2337 | 330
2338 | C
2339 | 102
2340 | }
2341 | 330
2342 | C
2343 | 100
2344 | AcDbDictionary
2345 | 0
2346 | DICTIONARY
2347 | 5
2348 | 2A
2349 | 102
2350 | {ACAD_REACTORS
2351 | 330
2352 | C
2353 | 102
2354 | }
2355 | 330
2356 | C
2357 | 100
2358 | AcDbDictionary
2359 | 3
2360 | 2DWIREFRAME
2361 | 350
2362 | 2F
2363 | 3
2364 | 3DWIREFRAME
2365 | 350
2366 | 30
2367 | 3
2368 | 3D_HIDDEN
2369 | 350
2370 | 31
2371 | 3
2372 | BASIC
2373 | 350
2374 | 32
2375 | 3
2376 | BRIGHTEN
2377 | 350
2378 | 36
2379 | 3
2380 | COLORCHANGE
2381 | 350
2382 | 3A
2383 | 3
2384 | CONCEPTUAL
2385 | 350
2386 | 34
2387 | 3
2388 | DIM
2389 | 350
2390 | 35
2391 | 3
2392 | FACEPATTERN
2393 | 350
2394 | 39
2395 | 3
2396 | FLAT
2397 | 350
2398 | 2B
2399 | 3
2400 | FLATWITHEDGES
2401 | 350
2402 | 2C
2403 | 3
2404 | GOURAUD
2405 | 350
2406 | 2D
2407 | 3
2408 | GOURAUDWITHEDGES
2409 | 350
2410 | 2E
2411 | 3
2412 | LINEPATTERN
2413 | 350
2414 | 38
2415 | 3
2416 | REALISTIC
2417 | 350
2418 | 33
2419 | 3
2420 | THICKEN
2421 | 350
2422 | 37
2423 | 0
2424 | DICTIONARY
2425 | 5
2426 | 60
2427 | 102
2428 | {ACAD_REACTORS
2429 | 330
2430 | C
2431 | 102
2432 | }
2433 | 330
2434 | C
2435 | 100
2436 | AcDbDictionary
2437 | 3
2438 | CEPSNTYPE
2439 | 350
2440 | 69
2441 | 3
2442 | DIMSTYLEDATA
2443 | 350
2444 | 7F
2445 | 3
2446 | FINGERPRINTGUID
2447 | 350
2448 | 6A
2449 | 3
2450 | HYPERLINKBASE
2451 | 350
2452 | 63
2453 | 3
2454 | INSUNITS
2455 | 350
2456 | 68
2457 | 3
2458 | LAYOUTDICT
2459 | 350
2460 | 65
2461 | 3
2462 | LWETCUNION
2463 | 350
2464 | 67
2465 | 3
2466 | PLOTSETDICT
2467 | 350
2468 | 66
2469 | 3
2470 | PSVPSCALE
2471 | 350
2472 | 6C
2473 | 3
2474 | PUCSBASE
2475 | 350
2476 | 6F
2477 | 3
2478 | PUCSORGBACK
2479 | 350
2480 | 75
2481 | 3
2482 | PUCSORGBOTTOM
2483 | 350
2484 | 71
2485 | 3
2486 | PUCSORGFRONT
2487 | 350
2488 | 74
2489 | 3
2490 | PUCSORGLEFT
2491 | 350
2492 | 72
2493 | 3
2494 | PUCSORGRIGHT
2495 | 350
2496 | 73
2497 | 3
2498 | PUCSORGTOP
2499 | 350
2500 | 70
2501 | 3
2502 | PUCSORTHOREF
2503 | 350
2504 | 6D
2505 | 3
2506 | PUCSORTHOVIEW
2507 | 350
2508 | 6E
2509 | 3
2510 | STYLESHEET
2511 | 350
2512 | 64
2513 | 3
2514 | TSTACKALIGN
2515 | 350
2516 | 61
2517 | 3
2518 | TSTACKSIZE
2519 | 350
2520 | 62
2521 | 3
2522 | UCSBASE
2523 | 350
2524 | 78
2525 | 3
2526 | UCSORGBACK
2527 | 350
2528 | 7E
2529 | 3
2530 | UCSORGBOTTOM
2531 | 350
2532 | 7A
2533 | 3
2534 | UCSORGFRONT
2535 | 350
2536 | 7D
2537 | 3
2538 | UCSORGLEFT
2539 | 350
2540 | 7B
2541 | 3
2542 | UCSORGRIGHT
2543 | 350
2544 | 7C
2545 | 3
2546 | UCSORGTOP
2547 | 350
2548 | 79
2549 | 3
2550 | UCSORTHOREF
2551 | 350
2552 | 76
2553 | 3
2554 | UCSORTHOVIEW
2555 | 350
2556 | 77
2557 | 3
2558 | VERSIONGUID
2559 | 350
2560 | 6B
2561 | 0
2562 | MLINESTYLE
2563 | 5
2564 | 18
2565 | 102
2566 | {ACAD_REACTORS
2567 | 330
2568 | 17
2569 | 102
2570 | }
2571 | 330
2572 | 17
2573 | 100
2574 | AcDbMlineStyle
2575 | 2
2576 | Standard
2577 | 70
2578 | 0
2579 | 3
2580 |
2581 | 62
2582 | 256
2583 | 51
2584 | 90.0
2585 | 52
2586 | 90.0
2587 | 71
2588 | 2
2589 | 49
2590 | 0.5
2591 | 62
2592 | 256
2593 | 6
2594 | BYLAYER
2595 | 49
2596 | -0.5
2597 | 62
2598 | 256
2599 | 6
2600 | BYLAYER
2601 | 0
2602 | VISUALSTYLE
2603 | 5
2604 | 2F
2605 | 102
2606 | {ACAD_REACTORS
2607 | 330
2608 | 2A
2609 | 102
2610 | }
2611 | 330
2612 | 2A
2613 | 100
2614 | AcDbVisualStyle
2615 | 2
2616 | 2dWireframe
2617 | 70
2618 | 4
2619 | 71
2620 | 0
2621 | 72
2622 | 2
2623 | 73
2624 | 0
2625 | 90
2626 | 0
2627 | 40
2628 | -0.6
2629 | 41
2630 | -30.0
2631 | 62
2632 | 5
2633 | 63
2634 | 7
2635 | 74
2636 | 1
2637 | 91
2638 | 4
2639 | 64
2640 | 7
2641 | 65
2642 | 257
2643 | 75
2644 | 1
2645 | 175
2646 | 1
2647 | 42
2648 | 1.0
2649 | 92
2650 | 0
2651 | 66
2652 | 257
2653 | 43
2654 | 1.0
2655 | 76
2656 | 1
2657 | 77
2658 | 6
2659 | 78
2660 | 2
2661 | 67
2662 | 7
2663 | 79
2664 | 5
2665 | 170
2666 | 0
2667 | 171
2668 | 0
2669 | 290
2670 | 0
2671 | 174
2672 | 0
2673 | 93
2674 | 1
2675 | 44
2676 | 0.0
2677 | 173
2678 | 0
2679 | 291
2680 | 0
2681 | 45
2682 | 0.0
2683 | 1001
2684 | ACAD
2685 | 1000
2686 | AcDbSavedByObjectVersion
2687 | 1070
2688 | 0
2689 | 0
2690 | VISUALSTYLE
2691 | 5
2692 | 30
2693 | 102
2694 | {ACAD_REACTORS
2695 | 330
2696 | 2A
2697 | 102
2698 | }
2699 | 330
2700 | 2A
2701 | 100
2702 | AcDbVisualStyle
2703 | 2
2704 | 3dWireframe
2705 | 70
2706 | 5
2707 | 71
2708 | 0
2709 | 72
2710 | 2
2711 | 73
2712 | 0
2713 | 90
2714 | 0
2715 | 40
2716 | -0.6
2717 | 41
2718 | -30.0
2719 | 62
2720 | 5
2721 | 63
2722 | 7
2723 | 74
2724 | 1
2725 | 91
2726 | 4
2727 | 64
2728 | 7
2729 | 65
2730 | 257
2731 | 75
2732 | 1
2733 | 175
2734 | 1
2735 | 42
2736 | 1.0
2737 | 92
2738 | 0
2739 | 66
2740 | 257
2741 | 43
2742 | 1.0
2743 | 76
2744 | 1
2745 | 77
2746 | 6
2747 | 78
2748 | 2
2749 | 67
2750 | 7
2751 | 79
2752 | 5
2753 | 170
2754 | 0
2755 | 171
2756 | 0
2757 | 290
2758 | 0
2759 | 174
2760 | 0
2761 | 93
2762 | 1
2763 | 44
2764 | 0.0
2765 | 173
2766 | 0
2767 | 291
2768 | 0
2769 | 45
2770 | 0.0
2771 | 1001
2772 | ACAD
2773 | 1000
2774 | AcDbSavedByObjectVersion
2775 | 1070
2776 | 0
2777 | 0
2778 | VISUALSTYLE
2779 | 5
2780 | 31
2781 | 102
2782 | {ACAD_REACTORS
2783 | 330
2784 | 2A
2785 | 102
2786 | }
2787 | 330
2788 | 2A
2789 | 100
2790 | AcDbVisualStyle
2791 | 2
2792 | 3D Hidden
2793 | 70
2794 | 6
2795 | 71
2796 | 1
2797 | 72
2798 | 2
2799 | 73
2800 | 2
2801 | 90
2802 | 0
2803 | 40
2804 | -0.6
2805 | 41
2806 | -30.0
2807 | 62
2808 | 5
2809 | 63
2810 | 7
2811 | 74
2812 | 2
2813 | 91
2814 | 2
2815 | 64
2816 | 7
2817 | 65
2818 | 257
2819 | 75
2820 | 2
2821 | 175
2822 | 1
2823 | 42
2824 | 40.0
2825 | 92
2826 | 0
2827 | 66
2828 | 257
2829 | 43
2830 | 1.0
2831 | 76
2832 | 1
2833 | 77
2834 | 6
2835 | 78
2836 | 2
2837 | 67
2838 | 7
2839 | 79
2840 | 3
2841 | 170
2842 | 0
2843 | 171
2844 | 0
2845 | 290
2846 | 0
2847 | 174
2848 | 0
2849 | 93
2850 | 1
2851 | 44
2852 | 0.0
2853 | 173
2854 | 0
2855 | 291
2856 | 0
2857 | 45
2858 | 0.0
2859 | 1001
2860 | ACAD
2861 | 1000
2862 | AcDbSavedByObjectVersion
2863 | 1070
2864 | 0
2865 | 0
2866 | VISUALSTYLE
2867 | 5
2868 | 32
2869 | 102
2870 | {ACAD_REACTORS
2871 | 330
2872 | 2A
2873 | 102
2874 | }
2875 | 330
2876 | 2A
2877 | 100
2878 | AcDbVisualStyle
2879 | 2
2880 | Basic
2881 | 70
2882 | 7
2883 | 71
2884 | 1
2885 | 72
2886 | 0
2887 | 73
2888 | 1
2889 | 90
2890 | 0
2891 | 40
2892 | -0.6
2893 | 41
2894 | -30.0
2895 | 62
2896 | 5
2897 | 63
2898 | 7
2899 | 74
2900 | 0
2901 | 91
2902 | 4
2903 | 64
2904 | 7
2905 | 65
2906 | 257
2907 | 75
2908 | 1
2909 | 175
2910 | 1
2911 | 42
2912 | 1.0
2913 | 92
2914 | 8
2915 | 66
2916 | 7
2917 | 43
2918 | 1.0
2919 | 76
2920 | 1
2921 | 77
2922 | 6
2923 | 78
2924 | 2
2925 | 67
2926 | 7
2927 | 79
2928 | 5
2929 | 170
2930 | 0
2931 | 171
2932 | 0
2933 | 290
2934 | 0
2935 | 174
2936 | 0
2937 | 93
2938 | 1
2939 | 44
2940 | 0.0
2941 | 173
2942 | 0
2943 | 291
2944 | 1
2945 | 45
2946 | 0.0
2947 | 1001
2948 | ACAD
2949 | 1000
2950 | AcDbSavedByObjectVersion
2951 | 1070
2952 | 0
2953 | 0
2954 | VISUALSTYLE
2955 | 5
2956 | 36
2957 | 102
2958 | {ACAD_REACTORS
2959 | 330
2960 | 2A
2961 | 102
2962 | }
2963 | 330
2964 | 2A
2965 | 100
2966 | AcDbVisualStyle
2967 | 2
2968 | Brighten
2969 | 70
2970 | 12
2971 | 71
2972 | 2
2973 | 72
2974 | 2
2975 | 73
2976 | 0
2977 | 90
2978 | 0
2979 | 40
2980 | -0.6
2981 | 41
2982 | -30.0
2983 | 62
2984 | 5
2985 | 63
2986 | 7
2987 | 74
2988 | 1
2989 | 91
2990 | 4
2991 | 64
2992 | 7
2993 | 65
2994 | 257
2995 | 75
2996 | 1
2997 | 175
2998 | 1
2999 | 42
3000 | 1.0
3001 | 92
3002 | 8
3003 | 66
3004 | 7
3005 | 43
3006 | 1.0
3007 | 76
3008 | 1
3009 | 77
3010 | 6
3011 | 78
3012 | 2
3013 | 67
3014 | 7
3015 | 79
3016 | 5
3017 | 170
3018 | 0
3019 | 171
3020 | 0
3021 | 290
3022 | 0
3023 | 174
3024 | 0
3025 | 93
3026 | 1
3027 | 44
3028 | 50.0
3029 | 173
3030 | 0
3031 | 291
3032 | 1
3033 | 45
3034 | 0.0
3035 | 1001
3036 | ACAD
3037 | 1000
3038 | AcDbSavedByObjectVersion
3039 | 1070
3040 | 0
3041 | 0
3042 | VISUALSTYLE
3043 | 5
3044 | 3A
3045 | 102
3046 | {ACAD_REACTORS
3047 | 330
3048 | 2A
3049 | 102
3050 | }
3051 | 330
3052 | 2A
3053 | 100
3054 | AcDbVisualStyle
3055 | 2
3056 | ColorChange
3057 | 70
3058 | 16
3059 | 71
3060 | 2
3061 | 72
3062 | 2
3063 | 73
3064 | 3
3065 | 90
3066 | 0
3067 | 40
3068 | -0.6
3069 | 41
3070 | -30.0
3071 | 62
3072 | 5
3073 | 63
3074 | 8
3075 | 74
3076 | 1
3077 | 91
3078 | 4
3079 | 64
3080 | 7
3081 | 65
3082 | 257
3083 | 75
3084 | 1
3085 | 175
3086 | 1
3087 | 42
3088 | 1.0
3089 | 92
3090 | 8
3091 | 66
3092 | 8
3093 | 43
3094 | 1.0
3095 | 76
3096 | 1
3097 | 77
3098 | 6
3099 | 78
3100 | 2
3101 | 67
3102 | 7
3103 | 79
3104 | 5
3105 | 170
3106 | 0
3107 | 171
3108 | 0
3109 | 290
3110 | 0
3111 | 174
3112 | 0
3113 | 93
3114 | 1
3115 | 44
3116 | 0.0
3117 | 173
3118 | 0
3119 | 291
3120 | 1
3121 | 45
3122 | 0.0
3123 | 1001
3124 | ACAD
3125 | 1000
3126 | AcDbSavedByObjectVersion
3127 | 1070
3128 | 0
3129 | 0
3130 | VISUALSTYLE
3131 | 5
3132 | 34
3133 | 102
3134 | {ACAD_REACTORS
3135 | 330
3136 | 2A
3137 | 102
3138 | }
3139 | 330
3140 | 2A
3141 | 100
3142 | AcDbVisualStyle
3143 | 2
3144 | Conceptual
3145 | 70
3146 | 9
3147 | 71
3148 | 3
3149 | 72
3150 | 2
3151 | 73
3152 | 0
3153 | 90
3154 | 0
3155 | 40
3156 | -0.6
3157 | 41
3158 | -30.0
3159 | 62
3160 | 5
3161 | 63
3162 | 7
3163 | 74
3164 | 2
3165 | 91
3166 | 2
3167 | 64
3168 | 7
3169 | 65
3170 | 257
3171 | 75
3172 | 1
3173 | 175
3174 | 1
3175 | 42
3176 | 40.0
3177 | 92
3178 | 8
3179 | 66
3180 | 7
3181 | 43
3182 | 1.0
3183 | 76
3184 | 1
3185 | 77
3186 | 6
3187 | 78
3188 | 2
3189 | 67
3190 | 7
3191 | 79
3192 | 3
3193 | 170
3194 | 0
3195 | 171
3196 | 0
3197 | 290
3198 | 0
3199 | 174
3200 | 0
3201 | 93
3202 | 1
3203 | 44
3204 | 0.0
3205 | 173
3206 | 0
3207 | 291
3208 | 0
3209 | 45
3210 | 0.0
3211 | 1001
3212 | ACAD
3213 | 1000
3214 | AcDbSavedByObjectVersion
3215 | 1070
3216 | 0
3217 | 0
3218 | VISUALSTYLE
3219 | 5
3220 | 35
3221 | 102
3222 | {ACAD_REACTORS
3223 | 330
3224 | 2A
3225 | 102
3226 | }
3227 | 330
3228 | 2A
3229 | 100
3230 | AcDbVisualStyle
3231 | 2
3232 | Dim
3233 | 70
3234 | 11
3235 | 71
3236 | 2
3237 | 72
3238 | 2
3239 | 73
3240 | 0
3241 | 90
3242 | 0
3243 | 40
3244 | -0.6
3245 | 41
3246 | -30.0
3247 | 62
3248 | 5
3249 | 63
3250 | 7
3251 | 74
3252 | 1
3253 | 91
3254 | 4
3255 | 64
3256 | 7
3257 | 65
3258 | 257
3259 | 75
3260 | 1
3261 | 175
3262 | 1
3263 | 42
3264 | 1.0
3265 | 92
3266 | 8
3267 | 66
3268 | 7
3269 | 43
3270 | 1.0
3271 | 76
3272 | 1
3273 | 77
3274 | 6
3275 | 78
3276 | 2
3277 | 67
3278 | 7
3279 | 79
3280 | 5
3281 | 170
3282 | 0
3283 | 171
3284 | 0
3285 | 290
3286 | 0
3287 | 174
3288 | 0
3289 | 93
3290 | 1
3291 | 44
3292 | -50.0
3293 | 173
3294 | 0
3295 | 291
3296 | 1
3297 | 45
3298 | 0.0
3299 | 1001
3300 | ACAD
3301 | 1000
3302 | AcDbSavedByObjectVersion
3303 | 1070
3304 | 0
3305 | 0
3306 | VISUALSTYLE
3307 | 5
3308 | 39
3309 | 102
3310 | {ACAD_REACTORS
3311 | 330
3312 | 2A
3313 | 102
3314 | }
3315 | 330
3316 | 2A
3317 | 100
3318 | AcDbVisualStyle
3319 | 2
3320 | Facepattern
3321 | 70
3322 | 15
3323 | 71
3324 | 2
3325 | 72
3326 | 2
3327 | 73
3328 | 0
3329 | 90
3330 | 0
3331 | 40
3332 | -0.6
3333 | 41
3334 | -30.0
3335 | 62
3336 | 5
3337 | 63
3338 | 7
3339 | 74
3340 | 1
3341 | 91
3342 | 4
3343 | 64
3344 | 7
3345 | 65
3346 | 257
3347 | 75
3348 | 1
3349 | 175
3350 | 1
3351 | 42
3352 | 1.0
3353 | 92
3354 | 8
3355 | 66
3356 | 7
3357 | 43
3358 | 1.0
3359 | 76
3360 | 1
3361 | 77
3362 | 6
3363 | 78
3364 | 2
3365 | 67
3366 | 7
3367 | 79
3368 | 5
3369 | 170
3370 | 0
3371 | 171
3372 | 0
3373 | 290
3374 | 0
3375 | 174
3376 | 0
3377 | 93
3378 | 1
3379 | 44
3380 | 0.0
3381 | 173
3382 | 0
3383 | 291
3384 | 1
3385 | 45
3386 | 0.0
3387 | 1001
3388 | ACAD
3389 | 1000
3390 | AcDbSavedByObjectVersion
3391 | 1070
3392 | 0
3393 | 0
3394 | VISUALSTYLE
3395 | 5
3396 | 2B
3397 | 102
3398 | {ACAD_REACTORS
3399 | 330
3400 | 2A
3401 | 102
3402 | }
3403 | 330
3404 | 2A
3405 | 100
3406 | AcDbVisualStyle
3407 | 2
3408 | Flat
3409 | 70
3410 | 0
3411 | 71
3412 | 2
3413 | 72
3414 | 1
3415 | 73
3416 | 1
3417 | 90
3418 | 2
3419 | 40
3420 | -0.6
3421 | 41
3422 | 30.0
3423 | 62
3424 | 5
3425 | 63
3426 | 7
3427 | 74
3428 | 0
3429 | 91
3430 | 4
3431 | 64
3432 | 7
3433 | 65
3434 | 257
3435 | 75
3436 | 1
3437 | 175
3438 | 1
3439 | 42
3440 | 1.0
3441 | 92
3442 | 8
3443 | 66
3444 | 7
3445 | 43
3446 | 1.0
3447 | 76
3448 | 1
3449 | 77
3450 | 6
3451 | 78
3452 | 2
3453 | 67
3454 | 7
3455 | 79
3456 | 5
3457 | 170
3458 | 0
3459 | 171
3460 | 0
3461 | 290
3462 | 0
3463 | 174
3464 | 0
3465 | 93
3466 | 13
3467 | 44
3468 | 0.0
3469 | 173
3470 | 0
3471 | 291
3472 | 1
3473 | 45
3474 | 0.0
3475 | 1001
3476 | ACAD
3477 | 1000
3478 | AcDbSavedByObjectVersion
3479 | 1070
3480 | 0
3481 | 0
3482 | VISUALSTYLE
3483 | 5
3484 | 2C
3485 | 102
3486 | {ACAD_REACTORS
3487 | 330
3488 | 2A
3489 | 102
3490 | }
3491 | 330
3492 | 2A
3493 | 100
3494 | AcDbVisualStyle
3495 | 2
3496 | FlatWithEdges
3497 | 70
3498 | 1
3499 | 71
3500 | 2
3501 | 72
3502 | 1
3503 | 73
3504 | 1
3505 | 90
3506 | 2
3507 | 40
3508 | -0.6
3509 | 41
3510 | 30.0
3511 | 62
3512 | 5
3513 | 63
3514 | 7
3515 | 74
3516 | 1
3517 | 91
3518 | 4
3519 | 64
3520 | 7
3521 | 65
3522 | 257
3523 | 75
3524 | 1
3525 | 175
3526 | 1
3527 | 42
3528 | 1.0
3529 | 92
3530 | 0
3531 | 66
3532 | 257
3533 | 43
3534 | 1.0
3535 | 76
3536 | 1
3537 | 77
3538 | 6
3539 | 78
3540 | 2
3541 | 67
3542 | 7
3543 | 79
3544 | 5
3545 | 170
3546 | 0
3547 | 171
3548 | 0
3549 | 290
3550 | 0
3551 | 174
3552 | 0
3553 | 93
3554 | 13
3555 | 44
3556 | 0.0
3557 | 173
3558 | 0
3559 | 291
3560 | 1
3561 | 45
3562 | 0.0
3563 | 1001
3564 | ACAD
3565 | 1000
3566 | AcDbSavedByObjectVersion
3567 | 1070
3568 | 0
3569 | 0
3570 | VISUALSTYLE
3571 | 5
3572 | 2D
3573 | 102
3574 | {ACAD_REACTORS
3575 | 330
3576 | 2A
3577 | 102
3578 | }
3579 | 330
3580 | 2A
3581 | 100
3582 | AcDbVisualStyle
3583 | 2
3584 | Gouraud
3585 | 70
3586 | 2
3587 | 71
3588 | 2
3589 | 72
3590 | 2
3591 | 73
3592 | 1
3593 | 90
3594 | 2
3595 | 40
3596 | -0.6
3597 | 41
3598 | 30.0
3599 | 62
3600 | 5
3601 | 63
3602 | 7
3603 | 74
3604 | 0
3605 | 91
3606 | 4
3607 | 64
3608 | 7
3609 | 65
3610 | 257
3611 | 75
3612 | 1
3613 | 175
3614 | 1
3615 | 42
3616 | 1.0
3617 | 92
3618 | 0
3619 | 66
3620 | 7
3621 | 43
3622 | 1.0
3623 | 76
3624 | 1
3625 | 77
3626 | 6
3627 | 78
3628 | 2
3629 | 67
3630 | 7
3631 | 79
3632 | 5
3633 | 170
3634 | 0
3635 | 171
3636 | 0
3637 | 290
3638 | 0
3639 | 174
3640 | 0
3641 | 93
3642 | 13
3643 | 44
3644 | 0.0
3645 | 173
3646 | 0
3647 | 291
3648 | 1
3649 | 45
3650 | 0.0
3651 | 1001
3652 | ACAD
3653 | 1000
3654 | AcDbSavedByObjectVersion
3655 | 1070
3656 | 0
3657 | 0
3658 | VISUALSTYLE
3659 | 5
3660 | 2E
3661 | 102
3662 | {ACAD_REACTORS
3663 | 330
3664 | 2A
3665 | 102
3666 | }
3667 | 330
3668 | 2A
3669 | 100
3670 | AcDbVisualStyle
3671 | 2
3672 | GouraudWithEdges
3673 | 70
3674 | 3
3675 | 71
3676 | 2
3677 | 72
3678 | 2
3679 | 73
3680 | 1
3681 | 90
3682 | 2
3683 | 40
3684 | -0.6
3685 | 41
3686 | 30.0
3687 | 62
3688 | 5
3689 | 63
3690 | 7
3691 | 74
3692 | 1
3693 | 91
3694 | 4
3695 | 64
3696 | 7
3697 | 65
3698 | 257
3699 | 75
3700 | 1
3701 | 175
3702 | 1
3703 | 42
3704 | 1.0
3705 | 92
3706 | 0
3707 | 66
3708 | 257
3709 | 43
3710 | 1.0
3711 | 76
3712 | 1
3713 | 77
3714 | 6
3715 | 78
3716 | 2
3717 | 67
3718 | 7
3719 | 79
3720 | 5
3721 | 170
3722 | 0
3723 | 171
3724 | 0
3725 | 290
3726 | 0
3727 | 174
3728 | 0
3729 | 93
3730 | 13
3731 | 44
3732 | 0.0
3733 | 173
3734 | 0
3735 | 291
3736 | 1
3737 | 45
3738 | 0.0
3739 | 1001
3740 | ACAD
3741 | 1000
3742 | AcDbSavedByObjectVersion
3743 | 1070
3744 | 0
3745 | 0
3746 | VISUALSTYLE
3747 | 5
3748 | 38
3749 | 102
3750 | {ACAD_REACTORS
3751 | 330
3752 | 2A
3753 | 102
3754 | }
3755 | 330
3756 | 2A
3757 | 100
3758 | AcDbVisualStyle
3759 | 2
3760 | Linepattern
3761 | 70
3762 | 14
3763 | 71
3764 | 2
3765 | 72
3766 | 2
3767 | 73
3768 | 0
3769 | 90
3770 | 0
3771 | 40
3772 | -0.6
3773 | 41
3774 | -30.0
3775 | 62
3776 | 5
3777 | 63
3778 | 7
3779 | 74
3780 | 1
3781 | 91
3782 | 4
3783 | 64
3784 | 7
3785 | 65
3786 | 257
3787 | 75
3788 | 7
3789 | 175
3790 | 7
3791 | 42
3792 | 1.0
3793 | 92
3794 | 8
3795 | 66
3796 | 7
3797 | 43
3798 | 1.0
3799 | 76
3800 | 1
3801 | 77
3802 | 6
3803 | 78
3804 | 2
3805 | 67
3806 | 7
3807 | 79
3808 | 5
3809 | 170
3810 | 0
3811 | 171
3812 | 0
3813 | 290
3814 | 0
3815 | 174
3816 | 0
3817 | 93
3818 | 1
3819 | 44
3820 | 0.0
3821 | 173
3822 | 0
3823 | 291
3824 | 1
3825 | 45
3826 | 0.0
3827 | 1001
3828 | ACAD
3829 | 1000
3830 | AcDbSavedByObjectVersion
3831 | 1070
3832 | 0
3833 | 0
3834 | VISUALSTYLE
3835 | 5
3836 | 33
3837 | 102
3838 | {ACAD_REACTORS
3839 | 330
3840 | 2A
3841 | 102
3842 | }
3843 | 330
3844 | 2A
3845 | 100
3846 | AcDbVisualStyle
3847 | 2
3848 | Realistic
3849 | 70
3850 | 8
3851 | 71
3852 | 2
3853 | 72
3854 | 2
3855 | 73
3856 | 0
3857 | 90
3858 | 0
3859 | 40
3860 | -0.6
3861 | 41
3862 | -30.0
3863 | 62
3864 | 5
3865 | 63
3866 | 7
3867 | 74
3868 | 1
3869 | 91
3870 | 0
3871 | 64
3872 | 7
3873 | 65
3874 | 257
3875 | 75
3876 | 1
3877 | 175
3878 | 1
3879 | 42
3880 | 1.0
3881 | 92
3882 | 8
3883 | 66
3884 | 8
3885 | 43
3886 | 1.0
3887 | 76
3888 | 1
3889 | 77
3890 | 6
3891 | 78
3892 | 2
3893 | 67
3894 | 7
3895 | 79
3896 | 5
3897 | 170
3898 | 0
3899 | 171
3900 | 0
3901 | 290
3902 | 0
3903 | 174
3904 | 0
3905 | 93
3906 | 13
3907 | 44
3908 | 0.0
3909 | 173
3910 | 0
3911 | 291
3912 | 0
3913 | 45
3914 | 0.0
3915 | 1001
3916 | ACAD
3917 | 1000
3918 | AcDbSavedByObjectVersion
3919 | 1070
3920 | 0
3921 | 0
3922 | VISUALSTYLE
3923 | 5
3924 | 37
3925 | 102
3926 | {ACAD_REACTORS
3927 | 330
3928 | 2A
3929 | 102
3930 | }
3931 | 330
3932 | 2A
3933 | 100
3934 | AcDbVisualStyle
3935 | 2
3936 | Thicken
3937 | 70
3938 | 13
3939 | 71
3940 | 2
3941 | 72
3942 | 2
3943 | 73
3944 | 0
3945 | 90
3946 | 0
3947 | 40
3948 | -0.6
3949 | 41
3950 | -30.0
3951 | 62
3952 | 5
3953 | 63
3954 | 7
3955 | 74
3956 | 1
3957 | 91
3958 | 4
3959 | 64
3960 | 7
3961 | 65
3962 | 257
3963 | 75
3964 | 1
3965 | 175
3966 | 1
3967 | 42
3968 | 1.0
3969 | 92
3970 | 12
3971 | 66
3972 | 7
3973 | 43
3974 | 1.0
3975 | 76
3976 | 1
3977 | 77
3978 | 6
3979 | 78
3980 | 2
3981 | 67
3982 | 7
3983 | 79
3984 | 5
3985 | 170
3986 | 0
3987 | 171
3988 | 0
3989 | 290
3990 | 0
3991 | 174
3992 | 0
3993 | 93
3994 | 1
3995 | 44
3996 | 0.0
3997 | 173
3998 | 0
3999 | 291
4000 | 1
4001 | 45
4002 | 0.0
4003 | 1001
4004 | ACAD
4005 | 1000
4006 | AcDbSavedByObjectVersion
4007 | 1070
4008 | 0
4009 | 0
4010 | XRECORD
4011 | 5
4012 | 69
4013 | 102
4014 | {ACAD_REACTORS
4015 | 330
4016 | 60
4017 | 102
4018 | }
4019 | 330
4020 | 60
4021 | 100
4022 | AcDbXrecord
4023 | 90
4024 | 0
4025 | 0
4026 | XRECORD
4027 | 5
4028 | 7F
4029 | 102
4030 | {ACAD_REACTORS
4031 | 330
4032 | 60
4033 | 102
4034 | }
4035 | 330
4036 | 60
4037 | 100
4038 | AcDbXrecord
4039 | 1000
4040 | DSTYLE
4041 | 1002
4042 | {
4043 | 1070
4044 | 340
4045 | 340
4046 | 11
4047 | 1002
4048 | }
4049 | 0
4050 | XRECORD
4051 | 5
4052 | 6A
4053 | 102
4054 | {ACAD_REACTORS
4055 | 330
4056 | 60
4057 | 102
4058 | }
4059 | 330
4060 | 60
4061 | 100
4062 | AcDbXrecord
4063 | 1
4064 | {7E772C73-C404-8BB7-5213-EE26D4430708}
4065 | 0
4066 | XRECORD
4067 | 5
4068 | 63
4069 | 102
4070 | {ACAD_REACTORS
4071 | 330
4072 | 60
4073 | 102
4074 | }
4075 | 330
4076 | 60
4077 | 100
4078 | AcDbXrecord
4079 | 1
4080 |
4081 | 0
4082 | XRECORD
4083 | 5
4084 | 68
4085 | 102
4086 | {ACAD_REACTORS
4087 | 330
4088 | 60
4089 | 102
4090 | }
4091 | 330
4092 | 60
4093 | 100
4094 | AcDbXrecord
4095 | 90
4096 | 1
4097 | 0
4098 | XRECORD
4099 | 5
4100 | 65
4101 | 102
4102 | {ACAD_REACTORS
4103 | 330
4104 | 60
4105 | 102
4106 | }
4107 | 330
4108 | 60
4109 | 100
4110 | AcDbXrecord
4111 | 340
4112 | 1A
4113 | 0
4114 | XRECORD
4115 | 5
4116 | 67
4117 | 102
4118 | {ACAD_REACTORS
4119 | 330
4120 | 60
4121 | 102
4122 | }
4123 | 330
4124 | 60
4125 | 100
4126 | AcDbXrecord
4127 | 90
4128 | 10269
4129 | 0
4130 | XRECORD
4131 | 5
4132 | 66
4133 | 102
4134 | {ACAD_REACTORS
4135 | 330
4136 | 60
4137 | 102
4138 | }
4139 | 330
4140 | 60
4141 | 100
4142 | AcDbXrecord
4143 | 340
4144 | 19
4145 | 0
4146 | XRECORD
4147 | 5
4148 | 6C
4149 | 102
4150 | {ACAD_REACTORS
4151 | 330
4152 | 60
4153 | 102
4154 | }
4155 | 330
4156 | 60
4157 | 100
4158 | AcDbXrecord
4159 | 40
4160 | 0.0
4161 | 0
4162 | XRECORD
4163 | 5
4164 | 6F
4165 | 102
4166 | {ACAD_REACTORS
4167 | 330
4168 | 60
4169 | 102
4170 | }
4171 | 330
4172 | 60
4173 | 100
4174 | AcDbXrecord
4175 | 340
4176 | 0
4177 | 0
4178 | XRECORD
4179 | 5
4180 | 75
4181 | 102
4182 | {ACAD_REACTORS
4183 | 330
4184 | 60
4185 | 102
4186 | }
4187 | 330
4188 | 60
4189 | 100
4190 | AcDbXrecord
4191 | 10
4192 | 0.0
4193 | 20
4194 | 0.0
4195 | 30
4196 | 0.0
4197 | 0
4198 | XRECORD
4199 | 5
4200 | 71
4201 | 102
4202 | {ACAD_REACTORS
4203 | 330
4204 | 60
4205 | 102
4206 | }
4207 | 330
4208 | 60
4209 | 100
4210 | AcDbXrecord
4211 | 10
4212 | 0.0
4213 | 20
4214 | 0.0
4215 | 30
4216 | 0.0
4217 | 0
4218 | XRECORD
4219 | 5
4220 | 74
4221 | 102
4222 | {ACAD_REACTORS
4223 | 330
4224 | 60
4225 | 102
4226 | }
4227 | 330
4228 | 60
4229 | 100
4230 | AcDbXrecord
4231 | 10
4232 | 0.0
4233 | 20
4234 | 0.0
4235 | 30
4236 | 0.0
4237 | 0
4238 | XRECORD
4239 | 5
4240 | 72
4241 | 102
4242 | {ACAD_REACTORS
4243 | 330
4244 | 60
4245 | 102
4246 | }
4247 | 330
4248 | 60
4249 | 100
4250 | AcDbXrecord
4251 | 10
4252 | 0.0
4253 | 20
4254 | 0.0
4255 | 30
4256 | 0.0
4257 | 0
4258 | XRECORD
4259 | 5
4260 | 73
4261 | 102
4262 | {ACAD_REACTORS
4263 | 330
4264 | 60
4265 | 102
4266 | }
4267 | 330
4268 | 60
4269 | 100
4270 | AcDbXrecord
4271 | 10
4272 | 0.0
4273 | 20
4274 | 0.0
4275 | 30
4276 | 0.0
4277 | 0
4278 | XRECORD
4279 | 5
4280 | 70
4281 | 102
4282 | {ACAD_REACTORS
4283 | 330
4284 | 60
4285 | 102
4286 | }
4287 | 330
4288 | 60
4289 | 100
4290 | AcDbXrecord
4291 | 10
4292 | 0.0
4293 | 20
4294 | 0.0
4295 | 30
4296 | 0.0
4297 | 0
4298 | XRECORD
4299 | 5
4300 | 6D
4301 | 102
4302 | {ACAD_REACTORS
4303 | 330
4304 | 60
4305 | 102
4306 | }
4307 | 330
4308 | 60
4309 | 100
4310 | AcDbXrecord
4311 | 340
4312 | 0
4313 | 0
4314 | XRECORD
4315 | 5
4316 | 6E
4317 | 102
4318 | {ACAD_REACTORS
4319 | 330
4320 | 60
4321 | 102
4322 | }
4323 | 330
4324 | 60
4325 | 100
4326 | AcDbXrecord
4327 | 70
4328 | 0
4329 | 0
4330 | XRECORD
4331 | 5
4332 | 64
4333 | 102
4334 | {ACAD_REACTORS
4335 | 330
4336 | 60
4337 | 102
4338 | }
4339 | 330
4340 | 60
4341 | 100
4342 | AcDbXrecord
4343 | 1
4344 |
4345 | 0
4346 | XRECORD
4347 | 5
4348 | 61
4349 | 102
4350 | {ACAD_REACTORS
4351 | 330
4352 | 60
4353 | 102
4354 | }
4355 | 330
4356 | 60
4357 | 100
4358 | AcDbXrecord
4359 | 90
4360 | 1
4361 | 0
4362 | XRECORD
4363 | 5
4364 | 62
4365 | 102
4366 | {ACAD_REACTORS
4367 | 330
4368 | 60
4369 | 102
4370 | }
4371 | 330
4372 | 60
4373 | 100
4374 | AcDbXrecord
4375 | 90
4376 | 70
4377 | 0
4378 | XRECORD
4379 | 5
4380 | 78
4381 | 102
4382 | {ACAD_REACTORS
4383 | 330
4384 | 60
4385 | 102
4386 | }
4387 | 330
4388 | 60
4389 | 100
4390 | AcDbXrecord
4391 | 340
4392 | 0
4393 | 0
4394 | XRECORD
4395 | 5
4396 | 7E
4397 | 102
4398 | {ACAD_REACTORS
4399 | 330
4400 | 60
4401 | 102
4402 | }
4403 | 330
4404 | 60
4405 | 100
4406 | AcDbXrecord
4407 | 10
4408 | 0.0
4409 | 20
4410 | 0.0
4411 | 30
4412 | 0.0
4413 | 0
4414 | XRECORD
4415 | 5
4416 | 7A
4417 | 102
4418 | {ACAD_REACTORS
4419 | 330
4420 | 60
4421 | 102
4422 | }
4423 | 330
4424 | 60
4425 | 100
4426 | AcDbXrecord
4427 | 10
4428 | 0.0
4429 | 20
4430 | 0.0
4431 | 30
4432 | 0.0
4433 | 0
4434 | XRECORD
4435 | 5
4436 | 7D
4437 | 102
4438 | {ACAD_REACTORS
4439 | 330
4440 | 60
4441 | 102
4442 | }
4443 | 330
4444 | 60
4445 | 100
4446 | AcDbXrecord
4447 | 10
4448 | 0.0
4449 | 20
4450 | 0.0
4451 | 30
4452 | 0.0
4453 | 0
4454 | XRECORD
4455 | 5
4456 | 7B
4457 | 102
4458 | {ACAD_REACTORS
4459 | 330
4460 | 60
4461 | 102
4462 | }
4463 | 330
4464 | 60
4465 | 100
4466 | AcDbXrecord
4467 | 10
4468 | 0.0
4469 | 20
4470 | 0.0
4471 | 30
4472 | 0.0
4473 | 0
4474 | XRECORD
4475 | 5
4476 | 7C
4477 | 102
4478 | {ACAD_REACTORS
4479 | 330
4480 | 60
4481 | 102
4482 | }
4483 | 330
4484 | 60
4485 | 100
4486 | AcDbXrecord
4487 | 10
4488 | 0.0
4489 | 20
4490 | 0.0
4491 | 30
4492 | 0.0
4493 | 0
4494 | XRECORD
4495 | 5
4496 | 79
4497 | 102
4498 | {ACAD_REACTORS
4499 | 330
4500 | 60
4501 | 102
4502 | }
4503 | 330
4504 | 60
4505 | 100
4506 | AcDbXrecord
4507 | 10
4508 | 0.0
4509 | 20
4510 | 0.0
4511 | 30
4512 | 0.0
4513 | 0
4514 | XRECORD
4515 | 5
4516 | 76
4517 | 102
4518 | {ACAD_REACTORS
4519 | 330
4520 | 60
4521 | 102
4522 | }
4523 | 330
4524 | 60
4525 | 100
4526 | AcDbXrecord
4527 | 340
4528 | 0
4529 | 0
4530 | XRECORD
4531 | 5
4532 | 77
4533 | 102
4534 | {ACAD_REACTORS
4535 | 330
4536 | 60
4537 | 102
4538 | }
4539 | 330
4540 | 60
4541 | 100
4542 | AcDbXrecord
4543 | 70
4544 | 0
4545 | 0
4546 | XRECORD
4547 | 5
4548 | 6B
4549 | 102
4550 | {ACAD_REACTORS
4551 | 330
4552 | 60
4553 | 102
4554 | }
4555 | 330
4556 | 60
4557 | 100
4558 | AcDbXrecord
4559 | 1
4560 | {FAEB1C32-E019-11D5-929B-00C0DF256EC4}
4561 | 0
4562 | ENDSEC
4563 | 0
4564 | EOF
4565 |
--------------------------------------------------------------------------------