/// <summary> /// Initializes a new instance of the <c>Leader</c> class. /// </summary> public Leader(Block block, IEnumerable <Vector2> vertexes, DimensionStyle style) : base(EntityType.Leader, DxfObjectCode.Leader) { if (vertexes == null) { throw new ArgumentNullException(nameof(vertexes)); } this.vertexes = new List <Vector2>(vertexes); if (this.vertexes.Count < 2) { throw new ArgumentOutOfRangeException(nameof(vertexes), this.vertexes.Count, "The leader vertexes list requires at least two points."); } if (style == null) { throw new ArgumentNullException(nameof(style)); } this.style = style; this.hasHookline = false; this.showArrowhead = true; this.pathType = LeaderPathType.StraightLineSegements; this.lineColor = AciColor.ByLayer; this.elevation = 0.0; this.offset = Vector2.Zero; this.styleOverrides = new DimensionStyleOverrideDictionary(); this.styleOverrides.BeforeAddItem += this.StyleOverrides_BeforeAddItem; this.styleOverrides.AddItem += this.StyleOverrides_AddItem; this.styleOverrides.BeforeRemoveItem += this.StyleOverrides_BeforeRemoveItem; this.styleOverrides.RemoveItem += this.StyleOverrides_RemoveItem; this.annotation = this.BuildAnnotation(block); this.annotation.AddReactor(this); }
/// <summary> /// Initializes a new instance of the <c>Leader</c> class. /// </summary> public Leader(string text, IEnumerable <Vector2> vertexes, DimensionStyle style) : base(EntityType.Leader, DxfObjectCode.Leader) { if (vertexes == null) { throw new ArgumentNullException(nameof(vertexes)); } this.vertexes = new List <Vector2>(vertexes); if (this.vertexes.Count < 2) { throw new ArgumentOutOfRangeException(nameof(vertexes), this.vertexes.Count, "The leader vertexes list requires at least two points."); } if (style == null) { throw new ArgumentNullException(nameof(style)); } this.style = style; hasHookline = true; showArrowhead = true; pathType = LeaderPathType.StraightLineSegements; lineColor = AciColor.ByLayer; elevation = 0.0; offset = Vector2.Zero; styleOverrides = new DimensionStyleOverrideDictionary(); styleOverrides.BeforeAddItem += StyleOverrides_BeforeAddItem; styleOverrides.AddItem += StyleOverrides_AddItem; styleOverrides.BeforeRemoveItem += StyleOverrides_BeforeRemoveItem; styleOverrides.RemoveItem += StyleOverrides_RemoveItem; annotation = BuildAnnotation(text); annotation.AddReactor(this); this.vertexes.Insert(this.vertexes.Count - 1, CalculateHookLine()); }
private void StyleOverrides_BeforeAddItem(DimensionStyleOverrideDictionary sender, DimensionStyleOverrideDictionaryEventArgs e) { if (sender.TryGetValue(e.Item.Type, out DimensionStyleOverride old)) { if (ReferenceEquals(old.Value, e.Item.Value)) { e.Cancel = true; } } }
/// <summary> /// Initializes a new instance of the <c>Dimension</c> class. /// </summary> protected Dimension(DimensionType type) : base(EntityType.Dimension, DxfObjectCode.Dimension) { this.definitionPoint = Vector3.Zero; this.midTextPoint = Vector3.Zero; this.dimensionType = type; this.attachmentPoint = MTextAttachmentPoint.MiddleCenter; this.lineSpacingStyle = MTextLineSpacingStyle.AtLeast; this.lineSpacing = 1.0; this.block = null; this.style = DimensionStyle.Default; this.userText = null; this.elevation = 0.0; this.styleOverrides = new DimensionStyleOverrideDictionary(); this.styleOverrides.BeforeAddItem += this.StyleOverrides_BeforeAddItem; this.styleOverrides.AddItem += this.StyleOverrides_AddItem; this.styleOverrides.BeforeRemoveItem += this.StyleOverrides_BeforeRemoveItem; this.styleOverrides.RemoveItem += this.StyleOverrides_RemoveItem; }
/// <summary> /// Initializes a new instance of the <c>Dimension</c> class. /// </summary> protected Dimension(DimensionType type) : base(EntityType.Dimension, DxfObjectCode.Dimension) { defPoint = Vector2.Zero; textRefPoint = Vector2.Zero; dimensionType = type; attachmentPoint = MTextAttachmentPoint.MiddleCenter; lineSpacingStyle = MTextLineSpacingStyle.AtLeast; lineSpacing = 1.0; block = null; style = DimensionStyle.Default; textRotation = 0.0; userText = null; elevation = 0.0; styleOverrides = new DimensionStyleOverrideDictionary(); styleOverrides.BeforeAddItem += StyleOverrides_BeforeAddItem; styleOverrides.AddItem += StyleOverrides_AddItem; styleOverrides.BeforeRemoveItem += StyleOverrides_BeforeRemoveItem; styleOverrides.RemoveItem += StyleOverrides_RemoveItem; }
private void StyleOverrides_RemoveItem(DimensionStyleOverrideDictionary sender, DimensionStyleOverrideDictionaryEventArgs e) { OnDimensionStyleOverrideRemovedEvent(e.Item); }
private void StyleOverrides_BeforeRemoveItem(DimensionStyleOverrideDictionary sender, DimensionStyleOverrideDictionaryEventArgs e) { }
private void StyleOverrides_AddItem(DimensionStyleOverrideDictionary sender, DimensionStyleOverrideDictionaryEventArgs e) { this.OnDimensionStyleOverrideAddedEvent(e.Item); }
private void StyleOverrides_RemoveItem(DimensionStyleOverrideDictionary sender, DimensionStyleOverrideDictionaryEventArgs e) { this.OnDimensionStyleOverrideRemovedEvent(e.Item); }
private void StyleOverrides_BeforeAddItem(DimensionStyleOverrideDictionary sender, DimensionStyleOverrideDictionaryEventArgs e) { DimensionStyleOverride old; if (sender.TryGetValue(e.Item.Type, out old)) if (ReferenceEquals(old.Value, e.Item.Value)) e.Cancel = true; }
private void RemoveDimensionStyleOverrides(DimensionStyleOverrideDictionary overrides, DxfObject entity) { // remove the style override referenced DxfObjects DimensionStyleOverride styleOverride; // add referenced text style overrides.TryGetValue(DimensionStyleOverrideType.TextStyle, out styleOverride); if (styleOverride != null) { TextStyle dimtxtsty = (TextStyle) styleOverride.Value; this.textStyles.References[dimtxtsty.Name].Remove(entity); } // add referenced blocks overrides.TryGetValue(DimensionStyleOverrideType.LeaderArrow, out styleOverride); if (styleOverride != null) { Block block = (Block) styleOverride.Value; if (block != null) { this.blocks.References[block.Name].Remove(entity); } } overrides.TryGetValue(DimensionStyleOverrideType.DimArrow1, out styleOverride); if (styleOverride != null) { Block block = (Block) styleOverride.Value; if (block != null) { this.blocks.References[block.Name].Remove(entity); } } overrides.TryGetValue(DimensionStyleOverrideType.DimArrow2, out styleOverride); if (styleOverride != null) { Block block = (Block) styleOverride.Value; if (block != null) { this.blocks.References[block.Name].Remove(entity); } } // add referenced line types overrides.TryGetValue(DimensionStyleOverrideType.DimLineLinetype, out styleOverride); if (styleOverride != null) { Linetype linetype = (Linetype) styleOverride.Value; this.linetypes.References[linetype.Name].Remove(entity); } overrides.TryGetValue(DimensionStyleOverrideType.ExtLine1Linetype, out styleOverride); if (styleOverride != null) { Linetype linetype = (Linetype) styleOverride.Value; this.linetypes.References[linetype.Name].Remove(entity); } overrides.TryGetValue(DimensionStyleOverrideType.ExtLine2Linetype, out styleOverride); if (styleOverride != null) { Linetype linetype = (Linetype) styleOverride.Value; this.linetypes.References[linetype.Name].Remove(entity); } }
private void AddDimensionStyleOverridesXData(XDataDictionary xdata, DimensionStyleOverrideDictionary overrides, EntityObject entity) { XData xdataEntry; if (xdata.ContainsAppId(ApplicationRegistry.DefaultName)) { xdataEntry = xdata[ApplicationRegistry.DefaultName]; xdataEntry.XDataRecord.Clear(); } else { xdataEntry = new XData(new ApplicationRegistry(ApplicationRegistry.DefaultName)); xdata.Add(xdataEntry); } xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.String, "DSTYLE")); xdataEntry.XDataRecord.Add(XDataRecord.OpenControlString); bool writeDIMPOST = false; string prefix = string.Empty; string suffix = string.Empty; bool writeDIMSAH = false; bool writeDIMZIN = false; bool writeDIMAZIN = false; bool suppressLinearLeadingZeros = false; bool suppressLinearTrailingZeros = false; bool suppressAngularLeadingZeros = false; bool suppressAngularTrailingZeros = false; bool suppressZeroFeet = true; bool suppressZeroInches = true; foreach (DimensionStyleOverride styleOverride in overrides.Values) { switch (styleOverride.Type) { case DimensionStyleOverrideType.DimLineColor: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 176)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, ((AciColor) styleOverride.Value).Index)); break; case DimensionStyleOverrideType.DimLineLinetype: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 345)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.DatabaseHandle, ((Linetype) styleOverride.Value).Handle)); break; case DimensionStyleOverrideType.DimLineLineweight: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 371)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) (Lineweight) styleOverride.Value)); break; case DimensionStyleOverrideType.DimLineExtend: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 46)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Real, (double) styleOverride.Value)); break; case DimensionStyleOverrideType.ExtLineColor: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 177)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, ((AciColor) styleOverride.Value).Index)); break; case DimensionStyleOverrideType.ExtLine1Linetype: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 346)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.DatabaseHandle, ((Linetype) styleOverride.Value).Handle)); break; case DimensionStyleOverrideType.ExtLine2Linetype: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 347)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.DatabaseHandle, ((Linetype) styleOverride.Value).Handle)); break; case DimensionStyleOverrideType.ExtLineLineweight: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 372)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) (Lineweight) styleOverride.Value)); break; case DimensionStyleOverrideType.ExtLine1: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 75)); if ((bool) styleOverride.Value) xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 1)); else xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 0)); break; case DimensionStyleOverrideType.ExtLine2: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 76)); if ((bool) styleOverride.Value) xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 1)); else xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 0)); break; case DimensionStyleOverrideType.ExtLineOffset: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 42)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Real, (double) styleOverride.Value)); break; case DimensionStyleOverrideType.ExtLineExtend: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 44)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Real, (double) styleOverride.Value)); break; case DimensionStyleOverrideType.ArrowSize: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 41)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Real, (double) styleOverride.Value)); break; case DimensionStyleOverrideType.CenterMarkSize: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 141)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Real, (double) styleOverride.Value)); break; case DimensionStyleOverrideType.LeaderArrow: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 341)); xdataEntry.XDataRecord.Add(styleOverride.Value != null ? new XDataRecord(XDataCode.DatabaseHandle, ((Block) styleOverride.Value).Record.Handle) : new XDataRecord(XDataCode.DatabaseHandle, "0")); break; case DimensionStyleOverrideType.DimArrow1: writeDIMSAH = true; xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 343)); xdataEntry.XDataRecord.Add(styleOverride.Value != null ? new XDataRecord(XDataCode.DatabaseHandle, ((Block) styleOverride.Value).Record.Handle) : new XDataRecord(XDataCode.DatabaseHandle, "0")); break; case DimensionStyleOverrideType.DimArrow2: writeDIMSAH = true; xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 344)); xdataEntry.XDataRecord.Add(styleOverride.Value != null ? new XDataRecord(XDataCode.DatabaseHandle, ((Block) styleOverride.Value).Record.Handle) : new XDataRecord(XDataCode.DatabaseHandle, "0")); break; case DimensionStyleOverrideType.TextStyle: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 340)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.DatabaseHandle, ((TextStyle) styleOverride.Value).Handle)); break; case DimensionStyleOverrideType.TextColor: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 178)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, ((AciColor) styleOverride.Value).Index)); break; case DimensionStyleOverrideType.TextHeight: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 140)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Real, (double) styleOverride.Value)); break; case DimensionStyleOverrideType.TextOffset: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 147)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Real, (double) styleOverride.Value)); break; case DimensionStyleOverrideType.DimScaleOverall: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 40)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Real, (double) styleOverride.Value)); break; case DimensionStyleOverrideType.AngularPrecision: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 179)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) styleOverride.Value)); break; case DimensionStyleOverrideType.LengthPrecision: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 271)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) styleOverride.Value)); break; case DimensionStyleOverrideType.DimPrefix: writeDIMPOST = true; prefix = (string) styleOverride.Value; break; case DimensionStyleOverrideType.DimSuffix: writeDIMPOST = true; suffix = (string) styleOverride.Value; break; case DimensionStyleOverrideType.DecimalSeparator: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 278)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) (char) styleOverride.Value)); break; case DimensionStyleOverrideType.DimScaleLinear: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 144)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Real, (double) styleOverride.Value)); break; case DimensionStyleOverrideType.DimLengthUnits: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 277)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) (LinearUnitType) styleOverride.Value)); break; case DimensionStyleOverrideType.DimAngularUnits: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 275)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) (AngleUnitType) styleOverride.Value)); break; case DimensionStyleOverrideType.FractionalType: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 276)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) (FractionFormatType) styleOverride.Value)); break; case DimensionStyleOverrideType.SuppressZeroFeet: writeDIMZIN = true; suppressZeroFeet = (bool) styleOverride.Value; break; case DimensionStyleOverrideType.SuppressZeroInches: writeDIMZIN = true; suppressZeroInches = (bool) styleOverride.Value; break; case DimensionStyleOverrideType.SuppressLinearLeadingZeros: writeDIMZIN = true; suppressLinearLeadingZeros = (bool) styleOverride.Value; break; case DimensionStyleOverrideType.SuppressLinearTrailingZeros: writeDIMZIN = true; suppressLinearTrailingZeros = (bool) styleOverride.Value; break; case DimensionStyleOverrideType.SuppressAngularLeadingZeros: writeDIMAZIN = true; suppressAngularLeadingZeros = (bool) styleOverride.Value; break; case DimensionStyleOverrideType.SuppressAngularTrailingZeros: writeDIMAZIN = true; suppressAngularTrailingZeros = (bool) styleOverride.Value; break; case DimensionStyleOverrideType.DimRoundoff: xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 45)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) styleOverride.Value)); break; } } if (writeDIMSAH) { xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 173)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 1)); } if (writeDIMPOST) { xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 3)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.String, this.EncodeNonAsciiCharacters(string.Format("{0}<>{1}", prefix, suffix)))); } if (writeDIMZIN) { short linSupress = 0; if (suppressZeroFeet && suppressZeroInches) linSupress = 0; else if (!suppressZeroFeet && !suppressZeroInches) linSupress += 1; else if (!suppressZeroFeet && suppressZeroInches) linSupress += 2; else if (suppressZeroFeet && !suppressZeroInches) linSupress += 3; if (!suppressLinearLeadingZeros && !suppressLinearTrailingZeros) linSupress += 0; else if (suppressLinearLeadingZeros && !suppressLinearTrailingZeros) linSupress += 4; else if (!suppressLinearLeadingZeros && suppressLinearTrailingZeros) linSupress += 8; else if (suppressLinearLeadingZeros && suppressLinearTrailingZeros) linSupress += 12; xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 78)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, linSupress)); } if (writeDIMAZIN) { short angSupress = 3; if (suppressAngularLeadingZeros && suppressAngularTrailingZeros) angSupress = 3; else if (!suppressAngularLeadingZeros && !suppressAngularTrailingZeros) angSupress = 0; else if (!suppressAngularLeadingZeros && suppressAngularTrailingZeros) angSupress = 2; else if (suppressAngularLeadingZeros && !suppressAngularTrailingZeros) angSupress = 1; xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 79)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, angSupress)); } // this information is only required by the Leader entity Leader leader = entity as Leader; if (leader != null) { MText mText = leader.Annotation as MText; if (mText != null) { xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 70)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) mText.AttachmentPoint)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) 77)); xdataEntry.XDataRecord.Add(new XDataRecord(XDataCode.Int16, (short) leader.TextVerticalPosition)); } } xdataEntry.XDataRecord.Add(XDataRecord.CloseControlString); }