private Layout(string name, Block associatedBlock, PlotSettings plotSettings) : base(name, DxfObjectCode.Layout, true) { if (name.Equals("Model", StringComparison.OrdinalIgnoreCase)) { this.reserved = true; this.isPaperSpace = false; this.tabOrder = 0; this.viewport = null; plotSettings.Flags = PlotFlags.Initializing | PlotFlags.UpdatePaper | PlotFlags.ModelType | PlotFlags.DrawViewportsFirst | PlotFlags.PrintLineweights | PlotFlags.PlotPlotStyles | PlotFlags.UseStandardScale; } else { this.reserved = false; this.isPaperSpace = true; this.tabOrder = 1; this.viewport = new Viewport(1) { ViewCenter = new Vector2(50.0, 100.0) }; } this.associatedBlock = associatedBlock; this.plot = plotSettings; this.minLimit = new Vector2(-20.0, -7.5); this.maxLimit = new Vector2(277.0, 202.5); this.basePoint = Vector3.Zero; this.minExtents = new Vector3(25.7, 19.5, 0.0); this.maxExtents = new Vector3(231.3, 175.5, 0.0); this.elevation = 0; this.origin = Vector3.Zero; this.xAxis = Vector3.UnitX; this.yAxis = Vector3.UnitY; }
private Layout(string name, Block associatedBlock, PlotSettings plotSettings) : base(name, DxfObjectCode.Layout, true) { if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException(nameof(name), "The layout name should be at least one character long."); } if (name.Equals(ModelSpaceName, StringComparison.OrdinalIgnoreCase)) { this.IsReserved = true; this.isPaperSpace = false; plotSettings.Flags = PlotFlags.Initializing | PlotFlags.UpdatePaper | PlotFlags.ModelType | PlotFlags.DrawViewportsFirst | PlotFlags.PrintLineweights | PlotFlags.PlotPlotStyles | PlotFlags.UseStandardScale; } else { this.IsReserved = false; this.isPaperSpace = true; } this.tabOrder = 0; this.associatedBlock = associatedBlock; this.plot = plotSettings; this.minLimit = new Vector2(-20.0, -7.5); this.maxLimit = new Vector2(277.0, 202.5); this.basePoint = Vector3.Zero; this.minExtents = new Vector3(25.7, 19.5, 0.0); this.maxExtents = new Vector3(231.3, 175.5, 0.0); this.elevation = 0; this.origin = Vector3.Zero; this.xAxis = Vector3.UnitX; this.yAxis = Vector3.UnitY; }
private PlotSettings ReadPlotSettings() { PlotSettings plot = new PlotSettings(); Vector2 paperSize = plot.PaperSize; Vector2 windowBottomLeft = plot.WindowBottomLeft; Vector2 windowUpRight = plot.WindowUpRight; Vector2 paperImageOrigin = plot.PaperImageOrigin; this.chunk.Next(); while (this.chunk.Code != 100) { switch (this.chunk.Code) { case 1: plot.PageSetupName = this.DecodeEncodedNonAsciiCharacters(this.chunk.ReadString()); this.chunk.Next(); break; case 2: plot.PlotterName = this.DecodeEncodedNonAsciiCharacters(this.chunk.ReadString()); this.chunk.Next(); break; case 4: plot.PaperSizeName = this.DecodeEncodedNonAsciiCharacters(this.chunk.ReadString()); this.chunk.Next(); break; case 6: plot.ViewName = this.DecodeEncodedNonAsciiCharacters(this.chunk.ReadString()); this.chunk.Next(); break; case 7: plot.CurrentStyleSheet = this.DecodeEncodedNonAsciiCharacters(this.chunk.ReadString()); this.chunk.Next(); break; case 40: plot.LeftMargin = this.chunk.ReadDouble(); this.chunk.Next(); break; case 41: plot.BottomMargin = this.chunk.ReadDouble(); this.chunk.Next(); break; case 42: plot.RightMargin = this.chunk.ReadDouble(); this.chunk.Next(); break; case 43: plot.TopMargin = this.chunk.ReadDouble(); this.chunk.Next(); break; case 44: paperSize.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 45: paperSize.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 48: windowBottomLeft.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 49: windowUpRight.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 140: windowBottomLeft.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 141: windowUpRight.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 142: plot.PrintScaleNumerator = this.chunk.ReadDouble(); this.chunk.Next(); break; case 143: plot.PrintScaleDenominator = this.chunk.ReadDouble(); this.chunk.Next(); break; case 70: plot.Flags = (PlotFlags) this.chunk.ReadShort(); this.chunk.Next(); break; case 72: plot.PaperUnits = (PlotPaperUnits) this.chunk.ReadShort(); this.chunk.Next(); break; case 73: plot.PaperRotation = (PlotRotation) this.chunk.ReadShort(); this.chunk.Next(); break; case 148: paperImageOrigin.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 149: paperImageOrigin.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; default: this.chunk.Next(); break; } } plot.PaperSize = paperSize; plot.WindowBottomLeft = windowBottomLeft; plot.WindowUpRight = windowUpRight; plot.PaperImageOrigin = paperImageOrigin; return plot; }
private Layout ReadLayout() { PlotSettings plot = new PlotSettings(); string handle = null; string name = null; short tabOrder = 1; Vector2 minLimit = new Vector2(-20.0, -7.5); Vector2 maxLimit = new Vector2(277.0, 202.5); Vector3 basePoint = Vector3.Zero; Vector3 minExtents = new Vector3(25.7, 19.5, 0.0); Vector3 maxExtents = new Vector3(231.3, 175.5, 0.0); double elevation = 0; Vector3 ucsOrigin = Vector3.Zero; Vector3 ucsXAxis = Vector3.UnitX; Vector3 ucsYAxis = Vector3.UnitY; string ownerRecordHandle = null; string dxfCode = this.chunk.ReadString(); this.chunk.Next(); while (this.chunk.Code != 100) { switch (this.chunk.Code) { case 0: throw new Exception(string.Format("Premature end of object {0} definition.", dxfCode)); case 5: handle = this.chunk.ReadHex(); this.chunk.Next(); break; case 102: this.ReadExtensionDictionaryGroup(); this.chunk.Next(); break; case 330: //string owner = this.chunk.ReadHandle(); this.chunk.Next(); break; default: this.chunk.Next(); break; } } while (this.chunk.Code != 0) { switch (this.chunk.Code) { case 100: if (this.chunk.ReadString() == SubclassMarker.PlotSettings) plot = this.ReadPlotSettings(); this.chunk.Next(); break; case 1: name = this.DecodeEncodedNonAsciiCharacters(this.chunk.ReadString()); this.chunk.Next(); break; case 71: tabOrder = this.chunk.ReadShort(); this.chunk.Next(); break; case 10: minLimit.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 20: minLimit.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 11: maxLimit.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 21: maxLimit.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 12: basePoint.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 22: basePoint.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 32: basePoint.Z = this.chunk.ReadDouble(); this.chunk.Next(); break; case 14: minExtents.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 24: minExtents.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 34: minExtents.Z = this.chunk.ReadDouble(); this.chunk.Next(); break; case 15: maxExtents.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 25: maxExtents.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 35: maxExtents.Z = this.chunk.ReadDouble(); this.chunk.Next(); break; case 146: elevation = this.chunk.ReadDouble(); this.chunk.Next(); break; case 13: ucsOrigin.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 23: ucsOrigin.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 33: ucsOrigin.Z = this.chunk.ReadDouble(); this.chunk.Next(); break; case 16: ucsXAxis.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 26: ucsXAxis.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 36: ucsXAxis.Z = this.chunk.ReadDouble(); this.chunk.Next(); break; case 17: ucsYAxis.X = this.chunk.ReadDouble(); this.chunk.Next(); break; case 27: ucsYAxis.Y = this.chunk.ReadDouble(); this.chunk.Next(); break; case 37: ucsYAxis.Z = this.chunk.ReadDouble(); this.chunk.Next(); break; case 330: ownerRecordHandle = this.chunk.ReadHex(); this.chunk.Next(); break; default: this.chunk.Next(); break; } } BlockRecord ownerRecord; if (handle != null) { if (this.blockRecordPointerToLayout.TryGetValue(handle, out ownerRecord)) this.blockRecordPointerToLayout.Remove(handle); else ownerRecord = this.doc.GetObjectByHandle(ownerRecordHandle) as BlockRecord; } else ownerRecord = this.doc.GetObjectByHandle(ownerRecordHandle) as BlockRecord; if (ownerRecord != null) if (this.doc.Blocks.GetReferences(ownerRecord.Name).Count > 0) ownerRecord = null; // the block is already in use Layout layout = new Layout(name) { PlotSettings = plot, Handle = handle, MinLimit = minLimit, MaxLimit = maxLimit, BasePoint = basePoint, MinExtents = minExtents, MaxExtents = maxExtents, Elevation = elevation, UcsOrigin = ucsOrigin, UcsXAxis = ucsXAxis, UcsYAxis = ucsYAxis, TabOrder = tabOrder > 0 ? tabOrder : (short) (this.doc.Layouts.Count + 1), AssociatedBlock = ownerRecord == null ? null : this.doc.Blocks[ownerRecord.Name] }; return layout; }