예제 #1
0
        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;
            }
        }
예제 #2
0
        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));
        }
예제 #3
0
 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;
 }
예제 #5
0
        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);
        }
예제 #6
0
        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));
        }
예제 #7
0
        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;
                }
            }
        }
예제 #8
0
        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;
                }
            }
        }
예제 #9
0
        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);
        }
예제 #10
0
 public DimensionSegmentInfo(DimensionSegment dim)
 {
     IsOverriden   = !string.IsNullOrEmpty(dim.ValueOverride);
     Value         = dim.Value;
     ValueOverride = dim.ValueOverride;
 }
예제 #11
0
 public async Task Update(Dimension dimension, DimensionSegment value)
 {
     await VismaNetApiHelper.UpdateDimension($"{dimension}", value, Authorization);
 }
예제 #12
0
        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;
            }
        }
예제 #13
0
 public DimensionWrapper(DimensionSegment ds)
 {
     Hash          = ds.GetHashCode();
     Value         = ds.Value;
     ValueOverride = ds.ValueOverride;
 }
예제 #14
0
 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();
     }
 }
예제 #15
0
 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();
     }
 }
예제 #16
0
        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);
        }