public void DimAddAnnotation(Dimension dim, XYZ globalPoint, string above, string prefix, string suffix, string below) { DimensionSegment dimensionSegment = null; double num = double.MaxValue; foreach (object obj in dim.Segments) { DimensionSegment dimensionSegment2 = (DimensionSegment)obj; XYZ origin = dimensionSegment2.Origin; double num2 = origin.DistanceTo(globalPoint); bool flag = num > num2; if (flag) { dimensionSegment = dimensionSegment2; num = num2; } } bool flag2 = dimensionSegment != null; if (flag2) { dimensionSegment.Above = above; dimensionSegment.Prefix = prefix; dimensionSegment.Suffix = suffix; dimensionSegment.Below = below; } }
Stream(ArrayList data, DimensionSegment dimSeg) { data.Add(new Snoop.Data.ClassSeparator(typeof(DimensionSegment))); data.Add(new Snoop.Data.Bool("Is locked", dimSeg.IsLocked)); data.Add(new Snoop.Data.Xyz("Origin", dimSeg.Origin)); data.Add(new Snoop.Data.Double("Value", dimSeg.Value.Value)); data.Add(new Snoop.Data.String("Value string", dimSeg.ValueString)); }
public static async Task UpdateDimension(string dimension, DimensionSegment value, VismaNetAuthorization authorization) { var webclient = GetHttpClient(authorization); { var apiUrl = GetApiUrlForController(VismaNetControllers.Dimensions, $"/{dimension.TrimStart('/')}/{value.GetIdentificator()}"); await webclient.Put <DimensionSegment>(apiUrl, value.ToDto()); } }
/// <summary> /// Initializes a new instance of the <see cref="DimData"/> class. /// </summary> /// <param name="dimension">Instance of <see cref="DimensionSegment"/></param> public DimData(DimensionSegment dimension) { Value = dimension.Value; Origin = dimension.Origin; TextPosition = dimension.TextPosition; Prefix = dimension.Prefix; Suffix = dimension.Suffix; Above = dimension.Above; Below = dimension.Below; }
private List <XYZ> GetDimensionPoints(Dimension dim, XYZ pStart) { Line line = dim.Curve as Line; bool flag = line == null; List <XYZ> result; if (flag) { result = null; } else { List <XYZ> list = new List <XYZ>(); line.MakeBound(0.0, 1.0); XYZ endPoint = line.GetEndPoint(0); XYZ endPoint2 = line.GetEndPoint(1); XYZ xyz = endPoint2.Subtract(endPoint).Normalize(); bool flag2 = dim.Segments.Size == 0; if (flag2) { XYZ xyz2 = 0.5 * dim.Value.Value * xyz; list.Add(pStart - xyz2); list.Add(pStart + xyz2); } else { XYZ xyz3 = pStart; foreach (object obj in dim.Segments) { DimensionSegment dimensionSegment = (DimensionSegment)obj; XYZ xyz4 = dimensionSegment.Value.Value * xyz; bool flag3 = list.Count == 0; if (flag3) { list.Add(xyz3 = pStart - 0.5 * xyz4); } list.Add(xyz3 = xyz3.Add(xyz4)); } } result = list; } return(result); }
private void Stream(ArrayList data, DimensionSegment dimSeg) { data.Add(new Snoop.Data.ClassSeparator(typeof(DimensionSegment))); data.Add(new Snoop.Data.Bool("Is locked", dimSeg.IsLocked)); data.Add(new Snoop.Data.Xyz("Origin", dimSeg.Origin)); data.Add(new Snoop.Data.Double("Value", dimSeg.Value.Value)); data.Add(new Snoop.Data.String("Value string", dimSeg.ValueString)); }
public static void BeatyDimensionSection(ref Dimension dim, double DirectionX, double DirectionY, Document doc) { double scale = Math.Round((double)doc.ActiveView.Scale / 100.0, 2); double scaleMm = MmToFt(400.0) * scale; if (dim.NumberOfSegments > 1) { var dimensionSegmentList = new List <DimensionSegment>(); foreach (DimensionSegment dimSeg in dim.Segments) { dimensionSegmentList.Add(dimSeg); } double?nullable; for (int index = 1; index < dimensionSegmentList.Count - 1; ++index) { nullable = dimensionSegmentList[index].Value; double num3 = nullable.Value; XYZ textPosition = dimensionSegmentList[index].TextPosition; int num4 = -1; int num5 = 1; while (true) { nullable = dimensionSegmentList[index].Value; if (nullable.Value < scaleMm && index < dimensionSegmentList.Count - 1) { if (Tools.IsZero(DirectionY)) { if (index < dimensionSegmentList.Count - 1) { double num6 = 1.5 * scale; dimensionSegmentList[index].TextPosition = new XYZ(textPosition.X - num6 * (double)num5, textPosition.Y, textPosition.Z - num6 * (double)num5); nullable = dimensionSegmentList[index + 1].Value; if (nullable.Value < scaleMm) { ++index; if (index < dimensionSegmentList.Count - 1) { textPosition = dimensionSegmentList[index].TextPosition; dimensionSegmentList[index].TextPosition = new XYZ(textPosition.X - num6 * (double)num5, textPosition.Y, textPosition.Z + num6 * (double)num5); } else { break; } } num5 *= num4; if (index < dimensionSegmentList.Count - 1) { ++index; nullable = dimensionSegmentList[index].Value; if (nullable.Value >= scaleMm) { break; } } else { break; } } else { break; } } else if (index < dimensionSegmentList.Count - 1) { double num6 = 1.5 * scale; dimensionSegmentList[index].TextPosition = new XYZ(textPosition.X, textPosition.Y - num6 * num5, textPosition.Z - num6 * num5); nullable = dimensionSegmentList[index + 1].Value; double num7 = scaleMm; if (nullable.HasValue && nullable.GetValueOrDefault() < num7) { ++index; if (index < dimensionSegmentList.Count - 1) { textPosition = dimensionSegmentList[index].TextPosition; dimensionSegmentList[index].TextPosition = new XYZ(textPosition.X, textPosition.Y + num6 * num5, textPosition.Z - num6 * num5); } else { break; } } num5 *= num4; if (index < dimensionSegmentList.Count - 1) { ++index; nullable = dimensionSegmentList[index].Value; double num8 = scaleMm; if (nullable.HasValue && nullable.GetValueOrDefault() >= num8) { break; } } else { break; } } else { break; } } else { break; } } } if (Tools.IsZero(DirectionY)) { nullable = dimensionSegmentList[0].Value; double num3 = scaleMm; if (nullable.HasValue && nullable.GetValueOrDefault() < num3) { DimensionSegment dimensionSegment = dimensionSegmentList[0]; double x = dimensionSegmentList[0].TextPosition.X; nullable = dimensionSegmentList[0].Value; double num4 = nullable.Value + MoveDimText * scale; nullable = dimensionSegmentList[0].Value; double num5 = nullable.Value; double num6 = (num4 + num5) * DirectionX; XYZ xyz = new XYZ(x - num6, dimensionSegmentList[0].TextPosition.Y, dimensionSegmentList[0].TextPosition.Z); dimensionSegment.TextPosition = xyz; } nullable = dimensionSegmentList.Last().Value; double num7 = scaleMm; if (!nullable.HasValue || nullable.GetValueOrDefault() >= num7) { return; } DimensionSegment dimensionSegment1 = dimensionSegmentList.Last(); double x1 = dimensionSegmentList.Last().TextPosition.X; nullable = dimensionSegmentList.Last().Value; double num8 = nullable.Value + MoveDimText * scale; nullable = dimensionSegmentList.Last().Value; double num9 = nullable.Value; double num10 = (num8 + num9) * DirectionX; XYZ xyz1 = new XYZ(x1 + num10, ((IEnumerable <DimensionSegment>)dimensionSegmentList).Last().TextPosition.Y, ((IEnumerable <DimensionSegment>)dimensionSegmentList).Last().TextPosition.Z); dimensionSegment1.TextPosition = xyz1; } else { nullable = dimensionSegmentList[0].Value; double num3 = scaleMm; if (nullable.HasValue && nullable.GetValueOrDefault() < num3) { DimensionSegment dimensionSegment = dimensionSegmentList[0]; double x = dimensionSegmentList[0].TextPosition.X; double y = dimensionSegmentList[0].TextPosition.Y; nullable = dimensionSegmentList[0].Value; double num4 = nullable.Value + MoveDimText * scale; nullable = dimensionSegmentList[0].Value; double num5 = nullable.Value; double num6 = (num4 + num5) * DirectionY; double num7 = y - num6; double z = dimensionSegmentList[0].TextPosition.Z; XYZ xyz = new XYZ(x, num7, z); dimensionSegment.TextPosition = xyz; } nullable = ((IEnumerable <DimensionSegment>)dimensionSegmentList).Last().Value; double num8 = scaleMm; if (nullable.HasValue && nullable.GetValueOrDefault() < num8) { DimensionSegment dimensionSegment = ((IEnumerable <DimensionSegment>)dimensionSegmentList).Last(); double x = ((IEnumerable <DimensionSegment>)dimensionSegmentList).Last().TextPosition.X; double y = ((IEnumerable <DimensionSegment>)dimensionSegmentList).Last().TextPosition.Y; nullable = ((IEnumerable <DimensionSegment>)dimensionSegmentList).Last().Value; double num4 = nullable.Value + MoveDimText * scale; nullable = ((IEnumerable <DimensionSegment>)dimensionSegmentList).Last().Value; double num5 = nullable.Value; double num6 = (num4 + num5) * DirectionY; double num7 = y + num6; double z = ((IEnumerable <DimensionSegment>)dimensionSegmentList).Last().TextPosition.Z; XYZ xyz = new XYZ(x, num7, z); dimensionSegment.TextPosition = xyz; } } } else { double?nullable = dim.Value; double num3 = scaleMm; if (nullable.HasValue && nullable.GetValueOrDefault() < num3) { Dimension dimension = dim; double x = dim.TextPosition.X; nullable = dim.Value; double num4 = nullable.Value; double moveDimText = MoveDimText; nullable = dim.Value; double num5 = nullable.Value; double num6 = moveDimText + num5; double num7 = (num4 + num6) * DirectionX; double num8 = x + num7; double y = dim.TextPosition.Y; nullable = dim.Value; double num9 = nullable.Value + MoveDimText; nullable = dim.Value; double num10 = nullable.Value; double num11 = (num9 + num10) * DirectionY; double num12 = y + num11; double num13 = 0.0; XYZ xyz = new XYZ(num8, num12, num13); dimension.TextPosition = xyz; } } }
public static void BeatyDimension(ref Dimension dim, double DirectionX, double DirectionY, Document doc) { double scale = Math.Round(doc.ActiveView.Scale / 100.0, 2); double scaleMm = MmToFt(400.0) * scale; if (dim.NumberOfSegments > 1) { List <DimensionSegment> dimensionSegmentList = new List <DimensionSegment>(); foreach (DimensionSegment dimSeg in dim.Segments) { dimensionSegmentList.Add(dimSeg); } double?nullable = dimensionSegmentList[0].Value; //double num3 = scaleMm; // TODO if (nullable.HasValue && nullable.GetValueOrDefault() < scaleMm) { DimensionSegment dimensionSegment = dimensionSegmentList[0]; //double x = dimensionSegmentList[0].TextPosition.X; //nullable = dimensionSegmentList[0].Value; double num4 = nullable.Value + MoveDimText * scale; //nullable = dimensionSegmentList[0].Value; double num5 = nullable.Value; double num6 = (num4 + num5) * DirectionX; double num7 = dimensionSegment.TextPosition.X - num6; //double y = dimensionSegmentList[0].TextPosition.Y; //nullable = dimensionSegmentList[0].Value; double num8 = nullable.Value + MoveDimText * scale; //nullable = dimensionSegmentList[0].Value; double num9 = nullable.Value; double num10 = (num8 + num9) * DirectionY; double num11 = dimensionSegment.TextPosition.Y - num10; //double num12 = 0.0;7 XYZ xyz = new XYZ(num7, num11, 0.0); dimensionSegment.TextPosition = xyz; } nullable = dimensionSegmentList.Last().Value; double num13 = scaleMm; if (nullable.HasValue && nullable.GetValueOrDefault() < num13) { DimensionSegment dimensionSegment = dimensionSegmentList.Last(); double x = dimensionSegmentList.Last().TextPosition.X; nullable = dimensionSegmentList.Last().Value; double num4 = nullable.Value + MoveDimText * scale; nullable = dimensionSegmentList.Last().Value; double num5 = nullable.Value; double num6 = (num4 + num5) * DirectionX; double num7 = x + num6; double y = dimensionSegmentList.Last().TextPosition.Y; nullable = dimensionSegmentList.Last().Value; double num8 = nullable.Value + MoveDimText * scale; nullable = dimensionSegmentList.Last().Value; double num9 = nullable.Value; double num10 = (num8 + num9) * DirectionY; double num11 = y + num10; double num12 = 0.0; XYZ xyz = new XYZ(num7, num11, num12); dimensionSegment.TextPosition = xyz; } dimensionSegmentList.Reverse(); for (int index = 1; index < dimensionSegmentList.Count - 1; ++index) { nullable = dimensionSegmentList[index].Value; double num4 = nullable.Value; XYZ textPosition = dimensionSegmentList[index].TextPosition; int num5 = -1; int num6 = 1; while (true) { nullable = dimensionSegmentList[index].Value; if (nullable.Value < scaleMm && index < dimensionSegmentList.Count - 1) { if (Tools.IsZero(DirectionY)) { if (index < dimensionSegmentList.Count - 1) { double num7 = 1.5 * scale; dimensionSegmentList[index].TextPosition = new XYZ(textPosition.X + num7 * (double)num6, textPosition.Y + num7 * (double)num6, textPosition.Z); nullable = dimensionSegmentList[index + 1].Value; if (nullable.Value < scaleMm) { ++index; if (index < dimensionSegmentList.Count - 1) { textPosition = dimensionSegmentList[index].TextPosition; dimensionSegmentList[index].TextPosition = new XYZ(textPosition.X + num7 * (double)num6, textPosition.Y - num7 * (double)num6, textPosition.Z); } else { break; } } num6 *= num5; if (index < dimensionSegmentList.Count - 1) { ++index; nullable = dimensionSegmentList[index].Value; if (nullable.Value >= scaleMm) { break; } } else { break; } } else { break; } } else if (index < dimensionSegmentList.Count - 1) { double num7 = 1.5 * scale; dimensionSegmentList[index].TextPosition = new XYZ(textPosition.X - num7 * (double)num6, textPosition.Y - num7 * (double)num6, textPosition.Z); nullable = dimensionSegmentList[index + 1].Value; double num8 = scaleMm; if (nullable.HasValue && nullable.GetValueOrDefault() < num8) { ++index; if (index < dimensionSegmentList.Count - 1) { textPosition = dimensionSegmentList[index].TextPosition; dimensionSegmentList[index].TextPosition = new XYZ(textPosition.X + num7 * (double)num6, textPosition.Y - num7 * (double)num6, textPosition.Z); } else { break; } } num6 *= num5; if (index < dimensionSegmentList.Count - 1) { ++index; nullable = dimensionSegmentList[index].Value; double num9 = scaleMm; if (nullable.HasValue && nullable.GetValueOrDefault() >= num9) { break; } } else { break; } } else { break; } } else { break; } } } } else { double?nullable = dim.Value; double num3 = scaleMm; if (nullable.HasValue && nullable.GetValueOrDefault() < num3) { Dimension dimension = dim; double x = dim.TextPosition.X; nullable = dim.Value; double num4 = nullable.Value; double moveDimText = MoveDimText; nullable = dim.Value; double num5 = nullable.Value; double num6 = moveDimText + num5; double num7 = (num4 + num6) * DirectionX; double num8 = x + num7; double y = dim.TextPosition.Y; nullable = dim.Value; double num9 = nullable.Value + MoveDimText; nullable = dim.Value; double num10 = nullable.Value; double num11 = (num9 + num10) * DirectionY; double num12 = y + num11; double num13 = 0.0; XYZ xyz = new XYZ(num8, num12, num13); dimension.TextPosition = xyz; } } }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; uidoc = uiapp.ActiveUIDocument; Application app = uiapp.Application; doc = uidoc.Document; sel = uidoc.Selection; bool iscontinue = true; Reference reference = sel.PickObject(ObjectType.PointOnElement); XYZ globalPoint = reference.GlobalPoint; Element element = doc.GetElement(reference); Dimension dimension = element as Dimension; DimensionSegment dimensionSegment = null; double num = double.MaxValue; foreach (object obj in dimension.Segments) { DimensionSegment dimensionSegment2 = (DimensionSegment)obj; XYZ origin = dimensionSegment2.Origin; double num2 = origin.DistanceTo(globalPoint); bool flag = num > num2; if (flag) { dimensionSegment = dimensionSegment2; num = num2; } } bool flag2 = dimensionSegment != null; if (flag2) { Above = dimensionSegment.Above; Prefix = dimensionSegment.Prefix; Suffix = dimensionSegment.Suffix; Below = dimensionSegment.Below; } try { while (iscontinue) { using (Transaction tran = new Transaction(doc, "Paste")) { tran.Start(); Reference reference2 = sel.PickObject(ObjectType.PointOnElement); XYZ globalPoint2 = reference2.GlobalPoint; Element element2 = doc.GetElement(reference); bool flag = element2 != null; if (flag) { Dimension dimension2 = element2 as Dimension; bool flag3 = dimension2 == null; if (flag3) { continue; } DimAddAnnotation(dimension2, globalPoint2, Above, Prefix, Suffix, Below); } tran.Commit(); } } } catch { iscontinue = false; return(Result.Succeeded); } return(Result.Succeeded); }
public DimensionSegmentInfo(DimensionSegment dim) { IsOverriden = !string.IsNullOrEmpty(dim.ValueOverride); Value = dim.Value; ValueOverride = dim.ValueOverride; }
public async Task Update(Dimension dimension, DimensionSegment value) { await VismaNetApiHelper.UpdateDimension($"{dimension}", value, Authorization); }
CollectEvent(object sender, CollectorEventArgs e) { // cast the sender object to the SnoopCollector we are expecting Collector snoopCollector = sender as Collector; if (snoopCollector == null) { Debug.Assert(false); // why did someone else send us the message? return; } // see if it is a type we are responsible for Location loc = e.ObjToSnoop as Location; if (loc != null) { Stream(snoopCollector.Data(), loc); return; } GeometryObject geomObj = e.ObjToSnoop as GeometryObject; if (geomObj != null) { Stream(snoopCollector.Data(), geomObj); return; } Options opts = e.ObjToSnoop as Options; if (opts != null) { Stream(snoopCollector.Data(), opts); return; } Transform trf = e.ObjToSnoop as Transform; if (trf != null) { Stream(snoopCollector.Data(), trf); return; } BoundingBoxXYZ bndBoxXyz = e.ObjToSnoop as BoundingBoxXYZ; if (bndBoxXyz != null) { Stream(snoopCollector.Data(), bndBoxXyz); return; } MeshTriangle meshTri = e.ObjToSnoop as MeshTriangle; if (meshTri != null) { Stream(snoopCollector.Data(), meshTri); return; } Reference reference = e.ObjToSnoop as Reference; if (reference != null) { Stream(snoopCollector.Data(), reference); return; } EdgeArray edgeArray = e.ObjToSnoop as EdgeArray; // NOTE: this is needed because EdgeArrayArray will display enumerable Snoop items if (edgeArray != null) { Stream(snoopCollector.Data(), edgeArray); return; } CurveArray curveArray = e.ObjToSnoop as CurveArray; // NOTE: this is needed because CurveArrayArray will display enumerable Snoop items if (curveArray != null) { Stream(snoopCollector.Data(), curveArray); return; } Plane plane = e.ObjToSnoop as Plane; if (plane != null) { Stream(snoopCollector.Data(), plane); return; } IntersectionResult intrResult = e.ObjToSnoop as IntersectionResult; if (intrResult != null) { Stream(snoopCollector.Data(), intrResult); return; } BoundingBoxUV bboxUV = e.ObjToSnoop as BoundingBoxUV; if (bboxUV != null) { Stream(snoopCollector.Data(), bboxUV); return; } SweepProfile sweepProf = e.ObjToSnoop as SweepProfile; if (sweepProf != null) { Stream(snoopCollector.Data(), sweepProf); return; } DimensionSegment dimSeg = e.ObjToSnoop as DimensionSegment; if (dimSeg != null) { Stream(snoopCollector.Data(), dimSeg); return; } UV uv = e.ObjToSnoop as UV; if (uv != null) { Stream(snoopCollector.Data(), uv); return; } }
public DimensionWrapper(DimensionSegment ds) { Hash = ds.GetHashCode(); Value = ds.Value; ValueOverride = ds.ValueOverride; }
public static void CreateRackDim(Document doc, UIApplication uiapp, Line dimDir, Line dimDirCross, ReferenceArray dimto) { using (Transaction tx = new Transaction(doc)) { tx.Start("Create Rack Dimension"); Dimension dim = doc.Create.NewDimension(doc.ActiveView, dimDirCross, dimto); int count = 0; if (dim.Segments.Size == 0) { tx.Commit(); return; } if (Store.mod_split == 0) { Store.mod_split = dim.Segments.Size / 2; } else if (Store.mod_split == 1) { Store.mod_split = 0; } double modF = Store.mod_stepy * 1.4; double modL = (1.4 * Store.mod_stepy * (dim.Segments.Size - Store.mod_split - 1)); int fHeightCount = 0; DimensionSegment FirstDim = dim.Segments.get_Item(0); DimensionSegment LastDim = dim.Segments.get_Item(dim.Segments.Size - 1); FirstDim.LeaderEndPosition = FirstDim.LeaderEndPosition .Subtract(dimDirCross.Direction.Normalize() .Multiply(Store.mod_left * 3.5)); FirstDim.LeaderEndPosition = FirstDim.LeaderEndPosition .Subtract(dimDir.Direction.Normalize() .Multiply(Store.mod_firsty * 2.8)); LastDim.LeaderEndPosition = LastDim.LeaderEndPosition .Add(dimDirCross.Direction.Normalize() .Multiply(Store.mod_right * 3.5)); LastDim.LeaderEndPosition = LastDim.LeaderEndPosition .Subtract(dimDir.Direction.Normalize() .Multiply(Store.mod_firsty * 2.8)); foreach (DimensionSegment segment in dim.Segments) { if (count < Store.mod_split) { if (count != 0) { if (segment.ValueString == dim.Segments.get_Item(count - 1).ValueString) { segment.LeaderEndPosition = dim.Segments.get_Item(count - 1).LeaderEndPosition; } else { segment.LeaderEndPosition = FirstDim.LeaderEndPosition.Subtract(dimDir.Direction.Normalize() .Multiply(modF)); modF += Store.mod_stepy * 1.4; } } count += 1; } else { if (count != Store.mod_split && segment.ValueString == dim.Segments.get_Item(count - 1).ValueString) { segment.LeaderEndPosition = dim.Segments.get_Item(count - 1).LeaderEndPosition; fHeightCount += 1; } else { segment.LeaderEndPosition = LastDim.LeaderEndPosition.Subtract(dimDir.Direction.Normalize() .Multiply(modL)); modL -= Store.mod_stepy * 1.4; } count += 1; } } count = 0; if (fHeightCount != 0) { foreach (DimensionSegment segment in dim.Segments) { if (count >= Store.mod_split) { segment.LeaderEndPosition = segment.LeaderEndPosition.Add(dimDir.Direction.Normalize() .Multiply(Store.mod_stepy * 1.4 * fHeightCount)); } count += 1; } } tx.Commit(); } }
public static void CreateLinearDim(Document doc, UIApplication uiapp, Line dimDir, Line dimDirCross, ReferenceArray dimto) { using (Transaction tx = new Transaction(doc)) { tx.Start("Create Linear Dimension"); Dimension dim = doc.Create.NewDimension(doc.ActiveView, dimDirCross, dimto); int count = 0; if (dim.Segments.Size == 0) { tx.Commit(); return; } foreach (DimensionSegment segment in dim.Segments) { if (count == 0 || count == dim.Segments.Size - 1) { if (segment.ValueString.Length * 0.3 > segment.Value * Store.scaleMod) { if (count == 0) { segment.TextPosition = segment.TextPosition .Subtract(dimDirCross.Direction.Normalize() .Multiply(Store.mod_left * (segment.ValueString.Length / 2.5))); } else { segment.TextPosition = segment.TextPosition .Add(dimDirCross.Direction.Normalize() .Multiply(Store.mod_right * (segment.ValueString.Length / 2.5))); } } } else { DimensionSegment lastdim = dim.Segments.get_Item(count - 1); DimensionSegment nextdim = dim.Segments.get_Item(count + 1); if (segment.ValueString.Length * 0.45 < segment.Value * Store.scaleMod) { } else if (lastdim.ValueString.Length * 0.6 < lastdim.Value * Store.scaleMod && nextdim.ValueString.Length * 0.6 < nextdim.Value * Store.scaleMod) { } else { if (segment.ValueString == lastdim.ValueString) { segment.LeaderEndPosition = lastdim.LeaderEndPosition; } else { segment.LeaderEndPosition = lastdim.LeaderEndPosition .Subtract(dimDir.Direction.Normalize() .Multiply(Store.mod_stepy * 1.4)); } } } count += 1; } tx.Commit(); } }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = commandData.Application.ActiveUIDocument.Document; View view = uidoc.ActiveView; //获取视图比例 Parameter viewscale = GetViewScale(view); double scale = Convert.ToDouble(viewscale.AsInteger()) / 100.0; bool iscontinue = true; bool isfontArialNarrow = true; do { Dimension dime = null; try { dime = SelectDimension(uidoc); } catch { iscontinue = false; continue; } if (dime == null) { TaskDialog.Show("wrong", "貌似获取到的线性标注有点问题,请重新获取."); continue; } //判断是否属于线型标注 if (dime.DimensionShape != DimensionShape.Linear) { TaskDialog.Show("wrong", "非线型标注,请重新获取."); continue; } //获取标注类型 DimensionType type = doc.GetElement(dime.GetTypeId()) as DimensionType; //判断字符串类型是否是连续 string dimensionstringtype = type.get_Parameter(BuiltInParameter.LINEAR_DIM_TYPE).AsValueString(); if (dimensionstringtype != "连续" && dimensionstringtype != "Continuous") { TaskDialog.Show("wrong", "标注字符串类型不为连续."); break; } ; //开启事务,先将线型标注恢复初始状态. using (Transaction reset = new Transaction(doc)) { reset.Start("重置尺寸线标注"); DimensionSegmentArray segarrytemp = dime.Segments; foreach (DimensionSegment seg in segarrytemp) { if (seg.IsTextPositionAdjustable()) { seg.ResetTextPosition(); } } reset.Commit(); } //获取文字字体 if (isfontArialNarrow) { Parameter textfont = GetTextFont(type); if (!textfont.AsString().Equals("Arial Narrow")) { TaskDialog.Show("warning", "该标注字体不是Arial Narrow,可能会出现未预料的情况,但程序会继续执行."); isfontArialNarrow = false; } } //获取文字宽度系数 Parameter textwidthscale = GetTextWidthScale(type); double widthscale = textwidthscale.AsDouble(); //获取文字大小 Parameter textsize = GetTextSize(type); double size = textsize.AsDouble(); //获取文字偏移 Parameter textdistancetoline = GetDistanceToLine(type); double offset = textdistancetoline.AsDouble(); //确定标注方向,得道direction Line line = dime.Curve as Line; line.MakeUnbound(); DimensionSegmentArray segarry = dime.Segments; int arrysize = segarry.Size; for (int i = 0; i <= arrysize - 2; i++) { DimensionSegment seg1 = segarry.get_Item(i); DimensionSegment seg2 = segarry.get_Item(i + 1); XYZ textposition2 = seg1.TextPosition; XYZ position2 = seg2.TextPosition; XYZ leaderposition2 = seg2.LeaderEndPosition; XYZ originposition2 = seg2.Origin; XYZ leaderproject = line.Project(leaderposition2).XYZPoint; double positiontoposition = textposition2.DistanceTo(position2); double leadertoline = line.Distance(leaderposition2); //距离小于600 if (positiontoposition < (1.640419948 * scale)) { XYZ dir = Line.CreateBound(leaderposition2, leaderproject).Direction; XYZ newposition = position2.Add(dir.Multiply(leadertoline * 2)); //transaction using (Transaction transaction = new Transaction(doc)) { transaction.Start("自动避让线性标注."); //翻转标注 segarry.get_Item(i + 1).TextPosition = newposition; transaction.Commit(); } i++; } } }while (iscontinue); return(Result.Succeeded); }