├── 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 | --------------------------------------------------------------------------------