예제 #1
0
        public void autoca()
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            var db  = HostApplicationServices.WorkingDatabase;
            var ed  = doc.Editor;

            try
            {
                var per1 = ed.GetEntity("选择测试设备:\n");
                if (per1.Status != PromptStatus.OK)
                {
                    return;
                }
                using (var tr = doc.TransactionManager.StartTransaction())
                {
                    var bt   = (BlockTable)(tr.GetObject(db.BlockTableId, OpenMode.ForRead));
                    var btr  = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                    var ent1 = tr.GetObject(per1.ObjectId, OpenMode.ForRead) as Entity;
                    if (ent1 == null)
                    {
                        return;
                    }
                    if (ent1 is Polyline)
                    {
                        var pp = ent1 as Polyline;
                        ed.WriteMessage(pp.Closed);
                        ed.WriteMessage("\n");
                    }
                    else if (ent1 is BlockReference)
                    {
                        var rr = ent1.Clone() as BlockReference;
                        if (rr != null)
                        {
                            // 记录当前角度
                            var rolat = rr.Rotation;
                            // 把角度设置为0
                            rr.Rotation = 0;
                            // 得到角度为0的实体范围
                            var ext = rr.GeometricExtents;

                            // 生成一个测试矩形,颜色为黄色
                            var pl = new Polyline();
                            pl.CreateRectangle(new Point2d(ext.MaxPoint.X, ext.MaxPoint.Y), new Point2d(ext.MinPoint.X, ext.MinPoint.Y));
                            pl.ColorIndex = 2;

                            // 旋转实体范围
                            Matrix3d mt = Matrix3d.Rotation(rolat, Vector3d.ZAxis, GeTools.MidPoint(ext.MaxPoint, ext.MinPoint));
                            pl.TransformBy(mt);

                            // 加入到模型空间
                            btr.AppendEntity(pl);
                            tr.AddNewlyCreatedDBObject(pl, true);
                        }
                    }
                    tr.Commit();
                }
            }
            catch (Exception ex) { ed.WriteMessageWithReturn(ex); }
        }
예제 #2
0
        //移动夹点
        public override void MoveGripPointsAt(Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            var ismove = false;

            foreach (GripData gd in grips)
            {
                if (gd is UserGripData && ismove == false)
                {
                    //UserGripData lagd = (UserGripData)gd;
                    if (entity is BlockReference)
                    {
                        var brf = entity as BlockReference;
                        brf.Position = brf.Position.Add(offset);
                    }
                    else if (entity is DBText)
                    {
                        var txt = entity as DBText;
                        txt.Position       = txt.Position.Add(offset);
                        txt.AlignmentPoint = txt.AlignmentPoint.Add(offset);
                    }
                    else if (entity is MText)
                    {
                        var txt = entity as MText;
                        txt.Location = txt.Location.Add(offset);
                    }
                    ismove = true;
                }
            }
            if (grips.Count > 0)
            {
                if (entity is BlockReference)
                {
                    if (!ismove)
                    {
                        base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                    }
                    mpt1 = pt1.Add(offset);
                    mpt2 = pt2.Add(offset);
                    pt   = GeTools.MidPoint(mpt1, mpt2);
                }
                else if (entity is DBText)
                {
                    if (!ismove)
                    {
                        base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                    }
                    pt = ((DBText)entity).Position;
                }
                else if (entity is MText)
                {
                    if (!ismove)
                    {
                        base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                    }
                    pt = ((MText)entity).Location;
                }
            }
        }
예제 #3
0
        public void Dimtest()
        {
            //创建要标注的图形
            Line   line1 = new Line(new Point3d(30, 20, 0), new Point3d(120, 20, 0));
            Line   line2 = new Line(new Point3d(120, 20, 0), new Point3d(120, 40, 0));
            Line   line3 = new Line(new Point3d(120, 40, 0), new Point3d(90, 80, 0));
            Line   line4 = new Line(new Point3d(90, 80, 0), new Point3d(30, 80, 0));
            Arc    arc   = new Arc(new Point3d(30, 50, 0), 30, Math.PI / 2, Math.PI * 3 / 2);
            Circle cir1  = new Circle(new Point3d(30, 50, 0), Vector3d.ZAxis, 15);
            Circle cir2  = new Circle(new Point3d(70, 50, 0), Vector3d.ZAxis, 10);

            Entity[] entities = new Entity[] { line1, line2, line3, line4, arc, cir1, cir2 };

            List <Dimension> dims = new List <Dimension>();

            RotatedDimension dimRotated1 = new RotatedDimension();

            dimRotated1.XLine1Point  = line1.StartPoint;
            dimRotated1.XLine2Point  = line1.EndPoint;
            dimRotated1.DimLinePoint = GeTools.MidPoint(line1.StartPoint, line1.EndPoint)
                                       .PolarPoint(-Math.PI / 2, 10);
            dimRotated1.DimensionText = "<>mm";
            dims.Add(dimRotated1);

            //转角标注(垂直)
            RotatedDimension dimRotated2 = new RotatedDimension();

            dimRotated2.Rotation     = Math.PI / 2;
            dimRotated2.XLine1Point  = line2.StartPoint;
            dimRotated2.XLine2Point  = line2.EndPoint;
            dimRotated2.DimLinePoint = GeTools.MidPoint(
                line2.StartPoint, line2.EndPoint)
                                       .PolarPoint(0, 10);
            dims.Add(dimRotated2);

            //转角标注(尺寸公差标注)
            RotatedDimension dimRotated3 = new RotatedDimension();

            dimRotated3.XLine1Point  = line4.StartPoint;
            dimRotated3.XLine2Point  = line4.EndPoint;
            dimRotated3.DimLinePoint = GeTools.MidPoint(
                line4.StartPoint, line4.EndPoint).PolarPoint(
                Math.PI / 2, 10);
            dimRotated3.DimensionText = TextTools.StackText(
                "<>", "+0.026", "-0.025", StackType.Tolerance, 0.7);
            dims.Add(dimRotated3);


            entities.ToSpace();
        }
예제 #4
0
        public void TendonAnnotation()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db  = doc.Database;
            Editor   ed  = doc.Editor;

            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                //1.选择梁顶缘线
                PromptEntityOptions tpLineOpt = new PromptEntityOptions("\n选择梁顶缘线");
                tpLineOpt.SetRejectMessage("\n顶缘线应为直线、圆弧或多段线");
                tpLineOpt.AddAllowedClass(typeof(Line), true);     //可以选择直线
                tpLineOpt.AddAllowedClass(typeof(Polyline), true); //可以选择多段线
                tpLineOpt.AddAllowedClass(typeof(Arc), true);      //可以选择圆弧线
                PromptEntityResult tpLineRes = ed.GetEntity(tpLineOpt);
                if (tpLineRes.Status != PromptStatus.OK)
                {
                    return;
                }
                ObjectId tpLineId = tpLineRes.ObjectId;
                Curve    tpLine   = trans.GetObject(tpLineId, OpenMode.ForRead) as Curve;

                //2.选择钢束线
                PromptEntityOptions tdLineOpt = new PromptEntityOptions("\n选择钢束");
                tdLineOpt.SetRejectMessage("\n钢束应为多段线");
                tdLineOpt.AddAllowedClass(typeof(Polyline), true);//仅能选择多段线
                PromptEntityResult tdLineRes = ed.GetEntity(tdLineOpt);
                if (tdLineRes.Status != PromptStatus.OK)
                {
                    return;
                }
                ObjectId tdLineId = tdLineRes.ObjectId;
                Polyline tdLine   = trans.GetObject(tdLineId, OpenMode.ForRead) as Polyline;

                //判断钢束线是否在顶缘线以内,否则报错返回
                if (tdLine.StartPoint.X < tpLine.StartPoint.X || tdLine.EndPoint.X > tpLine.EndPoint.X)
                {
                    Application.ShowAlertDialog("钢束线超出顶缘线,请检查!");
                    return;
                }

                //3.设置绘图参数
                //3.1 绘图比例
                PromptDoubleOptions scaleOpt = new PromptDoubleOptions($"\n设置绘图比例<{scale}>");
                scaleOpt.AllowNone     = true;                        //允许回车,则采用前次比例
                scaleOpt.AllowNegative = false;                       //不允许负值
                scaleOpt.AllowZero     = false;                       //不允许零值
                PromptDoubleResult scaleRes = ed.GetDouble(scaleOpt); //获取比例
                if (scaleRes.Status != PromptStatus.OK && scaleRes.Status != PromptStatus.None)
                {
                    return;
                }
                else if (scaleRes.Status == PromptStatus.OK)
                {
                    scale = scaleRes.Value;
                }

                //3.2 尺寸标注绘图位置
                PromptPointOptions posOpt = new PromptPointOptions("\n设置标注线位置");
                PromptPointResult  posRes = ed.GetPoint(posOpt);
                if (posRes.Status != PromptStatus.OK)
                {
                    return;
                }
                Point3d pos = posRes.Value;

                //4.开始建立标注
                List <Point3d>   ptsH = new List <Point3d>();   //创建水平标注点集
                List <Dimension> dims = new List <Dimension>(); //创建标注集,存放各类标注
                for (int i = 0; i < tdLine.NumberOfVertices - 1; i++)
                {
                    //4.1 水平点集
                    ptsH.Add(tdLine.GetPoint3dAt(i));

                    //4.2 每段钢束线的长度
                    //4.3 直线标注角度
                    //4.4 圆弧线标注半径
                    if (tdLine.GetSegmentType(i) == SegmentType.Line)
                    {
                        LineSegment3d lineSeg = tdLine.GetLineSegmentAt(i);
                        //4.2 每段钢束线的长度
                        db.LineLengthDim(lineSeg, scale);
                        //4.3 直线标注角度
                        if (tdLine.StartPoint.X < tdLine.EndPoint.X)
                        {
                            db.LineAngelDim(lineSeg, !(i == tdLine.NumberOfVertices - 2), scale);
                        }
                        else
                        {
                            db.LineAngelDim(lineSeg, (i == tdLine.NumberOfVertices - 2), scale);
                        }
                    }
                    else if (tdLine.GetSegmentType(i) == SegmentType.Arc)
                    {
                        CircularArc3d arcSeg = tdLine.GetArcSegmentAt(i);
                        //4.2 每段钢束线的长度
                        db.ArcLengthDim(arcSeg, scale);
                        //4.3 圆弧标注半径
                        db.ArrowRadiusDim(arcSeg, scale);
                    }
                    //4.5 竖直距离标注
                    Ray vRay = new Ray();//建立竖直射线
                    vRay.BasePoint = tdLine.GetPoint3dAt(i);
                    vRay.UnitDir   = new Vector3d(0, 1, 0);
                    Point3dCollection ptIntersects = new Point3dCollection();
                    tpLine.IntersectWith(vRay, Intersect.OnBothOperands, ptIntersects, IntPtr.Zero, IntPtr.Zero);
                    Point3d          ptIntersect = ptIntersects[0];
                    RotatedDimension dimV        = new RotatedDimension();
                    dimV.XLine1Point    = tdLine.GetPoint3dAt(i); //第一条尺寸边线
                    dimV.XLine2Point    = ptIntersect;            //第二条尺寸边线
                    dimV.DimLinePoint   = tdLine.GetPoint3dAt(i); //尺寸线位置
                    dimV.Rotation       = Math.PI / 2;            //标注旋转90度
                    dimV.DimensionStyle = db.Dimstyle;            //尺寸样式为当前样式
                    dimV.Dimscale       = scale;                  //设置尺寸全局比例
                    dims.Add(dimV);
                }
                //4.1 节点间距点集缺钢束最后一个点、梁顶缘线端点
                ptsH.Add(tdLine.EndPoint);
                ptsH.Add(tpLine.StartPoint);
                ptsH.Add(tpLine.EndPoint);
                db.ContinuedHorizontalDims(ptsH, pos, scale);//建立水平连续标注

                //4.5 竖直距离标注缺最后一个点
                Ray vRayLast = new Ray();//建立竖直射线
                vRayLast.BasePoint = tdLine.GetPoint3dAt(tdLine.NumberOfVertices - 1);
                vRayLast.UnitDir   = new Vector3d(0, 1, 0);
                Point3dCollection ptIntersectsLast = new Point3dCollection();
                tpLine.IntersectWith(vRayLast, Intersect.OnBothOperands, ptIntersectsLast, IntPtr.Zero, IntPtr.Zero);
                Point3d          ptIntersectLast = ptIntersectsLast[0];
                RotatedDimension dimVLast        = new RotatedDimension();
                dimVLast.XLine1Point    = tdLine.GetPoint3dAt(tdLine.NumberOfVertices - 1); //第一条尺寸边线
                dimVLast.XLine2Point    = ptIntersectLast;                                  //第二条尺寸边线
                dimVLast.DimLinePoint   = tdLine.GetPoint3dAt(tdLine.NumberOfVertices - 1); //尺寸线位置
                dimVLast.Rotation       = Math.PI / 2;                                      //标注旋转90度
                dimVLast.DimensionStyle = db.Dimstyle;                                      //尺寸样式为当前样式
                dimVLast.Dimscale       = scale;                                            //设置尺寸全局比例
                dims.Add(dimVLast);

                //4.6 绘制张拉端
                //4.6.1 绘制两侧张拉段
                //获取钢束线真实的起点和终点
                Point3d tdStart = (tdLine.StartPoint.X < tdLine.EndPoint.X) ? tdLine.StartPoint : tdLine.EndPoint;
                Point3d tdEnd   = (tdLine.StartPoint.X < tdLine.EndPoint.X) ? tdLine.EndPoint : tdLine.StartPoint;
                //获取钢束线真实的起终点角度
                double iclStart = (tdLine.StartPoint.X < tdLine.EndPoint.X) ?
                                  GetAngleOfLineSeg(tdLine.GetLineSegmentAt(0)) : GetAngleOfLineSeg(tdLine.GetLineSegmentAt(tdLine.NumberOfVertices - 2));
                double iclEnd = (tdLine.StartPoint.X < tdLine.EndPoint.X) ?
                                GetAngleOfLineSeg(tdLine.GetLineSegmentAt(tdLine.NumberOfVertices - 2)) : GetAngleOfLineSeg(tdLine.GetLineSegmentAt(0));
                //创建张拉端几何点
                Point3d tdDrawL = GeTools.PolarPoint(tdStart, iclStart, -800);
                Point3d tdDrawR = GeTools.PolarPoint(tdEnd, iclEnd, 800);
                //创建张拉段
                Line leftDraw = new Line(tdDrawL, tdStart);
                leftDraw.Layer = tdLine.Layer;  //张拉段与钢束线应该在同一层
                Line rightDraw = new Line(tdDrawR, tdEnd);
                rightDraw.Layer = tdLine.Layer; //张拉段与钢束线应该在同一层

                //4.6.2 标注张拉段的长度
                //左侧张拉段
                MText lengthL = new MText();
                //长度
                lengthL.Contents = "工作长度800";
                //文字高度
                lengthL.TextHeight = 3 * scale;
                //样式为当前样式
                lengthL.TextStyleId = db.Textstyle;
                //旋转角度同直线段倾角
                lengthL.Rotation = iclStart;
                //对齐位置为右上
                lengthL.Attachment = AttachmentPoint.TopRight;
                //位置为中点垂线以下0.5个单位
                lengthL.Location = GeTools.PolarPoint(GeTools.MidPoint(leftDraw.StartPoint,
                                                                       leftDraw.EndPoint), iclStart - Math.PI / 2, 0.5 * scale);

                //右侧张拉段
                MText lengthR = new MText();
                //长度
                lengthR.Contents = "工作长度800";
                //文字高度
                lengthR.TextHeight = 3 * scale;
                //样式为当前样式
                lengthR.TextStyleId = db.Textstyle;
                //旋转角度同直线段倾角
                lengthR.Rotation = iclEnd;
                //对齐位置为左上
                lengthR.Attachment = AttachmentPoint.TopLeft;
                //位置为中点垂线以下0.5个单位
                lengthR.Location = GeTools.PolarPoint(GeTools.MidPoint(rightDraw.StartPoint,
                                                                       rightDraw.EndPoint), iclEnd - Math.PI / 2, 0.5 * scale);

                //4.7 在截面顶缘标识“梁顶缘线”
                Point3d midPt     = GeTools.MidPoint(tpLine.StartPoint, tpLine.EndPoint);  //顶缘线起终点中点
                Point3d midPtInTp = tpLine.GetClosestPointTo(midPt, Vector3d.YAxis, true); //顶缘线上靠近中点的点
                MText   tpAnno    = new MText();
                tpAnno.Contents = "梁顶缘线";
                //文字高度
                tpAnno.TextHeight = 3 * scale;
                //样式为当前样式
                tpAnno.TextStyleId = db.Textstyle;
                //对齐位置为右上
                tpAnno.Attachment = AttachmentPoint.BottomLeft;
                //位置为中点以上0.5个单位
                tpAnno.Location = GeTools.PolarPoint(midPtInTp, Math.PI / 2, 0.5 * scale);

                db.AddToModelSpace(dims.ToArray());                        //添加各类标注
                db.AddToModelSpace(leftDraw, rightDraw, lengthL, lengthR); //添加张拉段线
                db.AddToModelSpace(tpAnno);                                //添加梁顶缘线标识

                trans.Commit();
            }
        }
예제 #5
0
        private void btn_ok_Click(object sender, EventArgs e)
        {
            DocumentLock doclock = null;
            var          doc     = acapi.DocumentManager.MdiActiveDocument;
            var          ed      = doc.Editor;

            try
            {
                double txtsize;
                double sumValue = 0;
                if (!double.TryParse(cb_txtSize.Text, out txtsize))
                {
                    return;
                }
                var unit = ComBox_Unit.Text.Trim();
                if (string.IsNullOrEmpty(unit))
                {
                    return;
                }

                txtsize = txtsize / 10;
                // 隐藏窗口
                Visible = false;
                // 锁定文档
                doclock = doc.LockDocument();
                // 获取0层ID
                ObjectId layerID;
                using (var tr = doc.Database.TransactionManager.StartTransaction())
                {
                    doc.Database.SetCurrentLayer("背景地图");
                    layerID = doc.Database.AddLayer("背景地图");
                    tr.Commit();
                }
                var re = ed.GetPoint("select point:\n");
                if (re.Status != PromptStatus.OK)
                {
                    return;
                }
                ed.WriteMessageWithReturn(re.Value);
                var jig = new measurejig();
                jig.prePosition = re.Value;
                jig.curPosition = re.Value;
                var res     = ed.Drag(jig);
                int i       = 1;
                var sumtext = new DBText();
                while (res.Status == PromptStatus.OK)
                {
                    // 添加连线
                    var line = new Line(jig.prePosition, jig.curPosition);
                    line.ColorIndex = 3;
                    using (var tr = doc.Database.TransactionManager.StartTransaction())
                    {
                        measureIDs.Add(doc.Database.AddToModelSpace(line));
                        line.LayerId = layerID;
                        line.Color   = Autodesk.AutoCAD.Colors.Color.FromColor(ccolor);
                        tr.Commit();
                    }

                    if (i == 1)
                    {
                        // 总长度添加标注
                        sumtext.Position = jig.prePosition;
                        //sumtext.Height = txtsize / 111319.49079327357264771338267056;
                        sumtext.Height     = txtsize / MapConfig.Instance.earthscale;
                        sumtext.TextString = string.Format("{0}{1}", sumValue, unit);
                        using (var tr = doc.Database.TransactionManager.StartTransaction())
                        {
                            measureIDs.Add(doc.Database.AddToModelSpace(sumtext));
                            sumtext.Color   = Autodesk.AutoCAD.Colors.Color.FromColor(ccolor);
                            sumtext.LayerId = layerID;
                            tr.Commit();
                        }
                        i++;
                    }

                    // 计算距离
                    var dist = jig.GetDistance(jig.curPosition, jig.prePosition, ComBox_Unit.SelectedIndex + 1);
                    if (jig.curPosition != jig.prePosition && dist > 0)
                    {
                        var dbtext = new DBText();
                        // 计算标注角度
                        var vec3d  = jig.prePosition.GetVectorTo(jig.curPosition);
                        var vec2d  = new Vector2d(vec3d.X, vec3d.Y);
                        var rolate = vec2d.Angle;
                        var midPt  = GeTools.MidPoint(jig.prePosition, jig.curPosition);

                        // 添加距离标注
                        dbtext.Position   = midPt;
                        dbtext.Height     = txtsize / 111319.49079327357264771338267056;
                        dbtext.Rotation   = rolate;
                        dbtext.TextString = dist + unit;
                        using (var tr = doc.Database.TransactionManager.StartTransaction())
                        {
                            measureIDs.Add(doc.Database.AddToModelSpace(dbtext));
                            dbtext.Color   = Autodesk.AutoCAD.Colors.Color.FromColor(ccolor);
                            dbtext.LayerId = layerID;
                            tr.Commit();
                        }
                        // 统计总长度
                        DCadApi.isModifySymbol = true;
                        using (var tr = doc.Database.TransactionManager.StartTransaction())
                        {
                            var ent = tr.GetObject(sumtext.ObjectId, OpenMode.ForWrite) as DBText;
                            sumValue += dist;
                            //sumtext.UpgradeOpen();
                            if (ent != null)
                            {
                                ent.TextString = string.Format("{0}{1}", sumValue, unit);
                            }
                            tr.Commit();
                        }
                        DCadApi.isModifySymbol = false;
                    }
                    jig.prePosition = jig.curPosition;
                    res             = ed.Drag(jig);
                }
            }
            catch (Exception ex)
            {
                ed.WriteMessage(ex + "\n");
            }
            finally
            {
                Visible = true;
                doclock.Dispose();
                DCadApi.isModifySymbol = false;
            }
        }
예제 #6
0
        public void DimTest()
        {
            Database db = HostApplicationServices.WorkingDatabase;

            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                // 创建要标注的图形
                Line   line1 = new Line(new Point3d(30, 20, 0), new Point3d(120, 20, 0));
                Line   line2 = new Line(new Point3d(120, 20, 0), new Point3d(120, 40, 0));
                Line   line3 = new Line(new Point3d(120, 40, 0), new Point3d(90, 80, 0));
                Line   line4 = new Line(new Point3d(90, 80, 0), new Point3d(30, 80, 0));
                Arc    arc   = new Arc(new Point3d(30, 50, 0), 30, Math.PI / 2, Math.PI * 3 / 2);
                Circle cir1  = new Circle(new Point3d(30, 50, 0), Vector3d.ZAxis, 15);
                Circle cir2  = new Circle(new Point3d(70, 50, 0), Vector3d.ZAxis, 10);
                //将图形添加到模型空间中
                db.AddToModelSpace(line1, line2, line3, line4, arc, cir1, cir2);
                //创建一个列表,用于存储标注对象
                List <Dimension> dims = new List <Dimension>();
                // 创建转角标注(水平)
                RotatedDimension dimRotated1 = new RotatedDimension
                {
                    //指定第一条尺寸界线的附着位置
                    XLine1Point = line1.StartPoint,
                    //指定第二条尺寸界线的附着位置
                    XLine2Point = line1.EndPoint,
                    //指定尺寸线的位置
                    DimLinePoint  = GeTools.MidPoint(line1.StartPoint, line1.EndPoint).PolarPoint(-Math.PI / 2, 10),
                    DimensionText = "<>mm" //设置标注的文字为标注值+后缀mm
                };
                dims.Add(dimRotated1);     //将水平转角标注添加到列表中
                //创建转角标注(垂直)
                RotatedDimension dimRotated2 = new RotatedDimension
                {
                    Rotation = Math.PI / 2, //转角标注角度为90度,表示垂直方向
                                            //指定两条尺寸界线的附着位置和尺寸线的位置
                    XLine1Point  = line2.StartPoint,
                    XLine2Point  = line2.EndPoint,
                    DimLinePoint = GeTools.MidPoint(line2.StartPoint, line2.EndPoint).PolarPoint(0, 10)
                };
                dims.Add(dimRotated2);//将垂直转角标注添加到列表中
                //创建转角标注(尺寸公差标注)
                RotatedDimension dimRotated3 = new RotatedDimension
                {
                    //指定两条尺寸界线的附着位置和尺寸线的位置
                    XLine1Point  = line4.StartPoint,
                    XLine2Point  = line4.EndPoint,
                    DimLinePoint = GeTools.MidPoint(line4.StartPoint, line4.EndPoint).PolarPoint(Math.PI / 2, 10),
                    //设置标注的文字为标注值+堆叠文字
                    DimensionText = TextTools.StackText("<>", "+0.026", "-0.025", StackType.Tolerance, 0.7)
                };
                dims.Add(dimRotated3);//将尺寸公差标注添加到列表中
                // 创建对齐标注
                AlignedDimension dimAligned = new AlignedDimension
                {
                    //指定两条尺寸界线的附着位置和尺寸线的位置
                    XLine1Point  = line3.StartPoint,
                    XLine2Point  = line3.EndPoint,
                    DimLinePoint = GeTools.MidPoint(line3.StartPoint, line3.EndPoint).PolarPoint(Math.PI / 2, 10),
                    //设置标注的文字为标注值+公差符号
                    DimensionText = "<>" + TextSpecialSymbol.Tolerance + "0.2"
                };
                dims.Add(dimAligned);//将对齐标注添加到列表中
                // 创建半径标注
                RadialDimension dimRadial = new RadialDimension
                {
                    Center = cir1.Center, //圆或圆弧的圆心
                                          //用于附着引线的圆或圆弧上的点
                    ChordPoint   = cir1.Center.PolarPoint(GeTools.DegreeToRadian(30), 15),
                    LeaderLength = 10     //引线长度
                };
                dims.Add(dimRadial);      //将半径标注添加到列表中
                // 创建直径标注
                DiametricDimension dimDiametric = new DiametricDimension
                {
                    //圆或圆弧上第一个直径点的坐标
                    ChordPoint = cir2.Center.PolarPoint(GeTools.DegreeToRadian(45), 10),
                    //圆或圆弧上第二个直径点的坐标
                    FarChordPoint = cir2.Center.PolarPoint(GeTools.DegreeToRadian(-135), 10),
                    LeaderLength  = 0   //从 ChordPoint 到注解文字或折线处的长度
                };
                dims.Add(dimDiametric); //将直径标注添加到列表中
                // 创建角度标注
                Point3AngularDimension dimLineAngular = new Point3AngularDimension
                {
                    //圆或圆弧的圆心、或两尺寸界线间的共有顶点的坐标
                    CenterPoint = line2.StartPoint,
                    //指定两条尺寸界线的附着位置
                    XLine1Point = line1.StartPoint,
                    XLine2Point = line2.EndPoint,
                    //设置角度标志圆弧线上的点
                    ArcPoint = line2.StartPoint.PolarPoint(GeTools.DegreeToRadian(135), 10)
                };
                dims.Add(dimLineAngular);//将角度标注添加到列表中
                // 创建弧长标注,标注文字取为默认值
                ArcDimension dimArc = new ArcDimension(arc.Center, arc.StartPoint, arc.EndPoint, arc.Center.PolarPoint(Math.PI, arc.Radius + 10), "<>", db.Dimstyle);
                dims.Add(dimArc);//将弧长标注添加到列表中
                // 创建显示X轴值的坐标标注
                OrdinateDimension dimX = new OrdinateDimension
                {
                    UsingXAxis    = true,        //显示 X 轴值
                    DefiningPoint = cir2.Center, //标注点
                                                 //指定引线终点,即标注文字显示的位置
                    LeaderEndPoint = cir2.Center.PolarPoint(-Math.PI / 2, 20)
                };
                dims.Add(dimX);//将坐标标注添加到列表中
                // 创建显示Y轴值的坐标标注
                OrdinateDimension dimY = new OrdinateDimension
                {
                    UsingXAxis    = false,       //显示Y轴
                    DefiningPoint = cir2.Center, //标注点
                                                 //指定引线终点,即标注文字显示的位置
                    LeaderEndPoint = cir2.Center.PolarPoint(0, 20)
                };
                dims.Add(dimY);                       //将坐标标注添加到列表中
                foreach (Dimension dim in dims)       //遍历标注列表
                {
                    dim.DimensionStyle = db.Dimstyle; //设置标注样式为当前样式
                    db.AddToModelSpace(dim);          //将标注添加到模型空间中
                }

                trans.Commit();//提交更改
            }
        }
예제 #7
0
        public void TendonAnnotation()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db  = doc.Database;
            Editor   ed  = doc.Editor;

            db.SyncDwgToTdGenParas();//设置默认总体参数,已有总体参数字典项则无动作
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                #region 1.选择梁顶缘线
                PromptEntityOptions tpLineOpt = new PromptEntityOptions("\n选择梁顶缘线");
                tpLineOpt.SetRejectMessage("\n顶缘线应为直线、圆弧或多段线");
                tpLineOpt.AddAllowedClass(typeof(Line), true);     //可以选择直线
                tpLineOpt.AddAllowedClass(typeof(Polyline), true); //可以选择多段线
                tpLineOpt.AddAllowedClass(typeof(Arc), true);      //可以选择圆弧线
                PromptEntityResult tpLineRes = ed.GetEntity(tpLineOpt);
                if (tpLineRes.Status != PromptStatus.OK)
                {
                    return;
                }
                ObjectId tpLineId = tpLineRes.ObjectId;
                Curve    tpLine   = trans.GetObject(tpLineId, OpenMode.ForRead) as Curve;
                #endregion
                #region 2.选择钢束线
                PromptEntityOptions tdLineOpt = new PromptEntityOptions("\n选择钢束");
                tdLineOpt.SetRejectMessage("\n钢束应为多段线");
                tdLineOpt.AddAllowedClass(typeof(Polyline), true);//仅能选择多段线
                PromptEntityResult tdLineRes = ed.GetEntity(tdLineOpt);
                if (tdLineRes.Status != PromptStatus.OK)
                {
                    return;
                }
                ObjectId tdLineId = tdLineRes.ObjectId;
                Polyline tdLine   = trans.GetObject(tdLineId, OpenMode.ForRead) as Polyline;

                //判断钢束线是否在顶缘线以内,否则报错返回
                if (tdLine.StartPoint.X < tpLine.StartPoint.X || tdLine.EndPoint.X > tpLine.EndPoint.X)
                {
                    Application.ShowAlertDialog("钢束线超出顶缘线,请检查!");
                    return;
                }
                tdLine.SetDefaultTendonParams();//设置钢束默认参数,如已有Xrecord信息则无动作
                #endregion
                #region 3.设置绘图参数(包括张拉方式和工作长度设置)
                //3.1 尺寸标注绘图位置及张拉方式和工作长度设置
                Point3d            pos    = new Point3d();//初始化标注点
                PromptPointOptions posOpt = new PromptPointOptions("\n设置标注线位置或设置[张拉方式(D)/工作长度(W)]");
                posOpt.Keywords.Add("D");
                posOpt.Keywords.Add("W");
                posOpt.AppendKeywordsToMessage = false;                                                     //提示信息中不显示关键字
                //获取钢束张拉方式
                int tdDrawStyle = 0;                                                                        //默认为两端张拉
                if (!tdLine.ExtensionDictionary.IsNull && tdLine.ObjectId.GetXrecord("DA_Tendons") != null) //如果钢束线有扩展记录则取扩展记录数据
                {
                    tdDrawStyle = (Int16)tdLine.ObjectId.GetXrecord("DA_Tendons")[4].Value;
                }
                //获取工作长度信息
                double       workLen = 800;
                DBDictionary dicts   = db.NamedObjectsDictionaryId.GetObject(OpenMode.ForWrite) as DBDictionary;
                if (dicts.Contains("DA_Tendons"))//如果字典中含DA_Tendons的字典项
                {
                    ObjectId       tdsDictId = dicts.GetAt("DA_Tendons");
                    DBDictionary   tdsDict   = tdsDictId.GetObject(OpenMode.ForRead) as DBDictionary; //获取DA_Tendons字典
                    ObjectId       xrecId    = tdsDict.GetAt("workLen");                              //获取字典中的工作长度项
                    Xrecord        xrec      = xrecId.GetObject(OpenMode.ForRead) as Xrecord;         //获取工作长度项中的Xrecird
                    TypedValueList vls       = xrec.Data;                                             //获取Xrecord中的TypedValueList数据
                    workLen = (double)vls[0].Value;                                                   //根据TypedValueList数据中的数值更新工作长度workLen
                }
                for (;;)
                {
                    PromptPointResult posRes = ed.GetPoint(posOpt);
                    if (posRes.Status == PromptStatus.Keyword)
                    {
                        switch (posRes.StringResult)
                        {
                        case "D":                    //选择修改张拉方式
                            PromptIntegerOptions drwOpt = new PromptIntegerOptions($"\n输入张拉方式[两端张拉(0)/左端张拉[-1]/右端张拉[1]<{tdDrawStyle}>");
                            drwOpt.AllowNone = true; //允许ESC退出
                            PromptIntegerResult drwRes = ed.GetInteger(drwOpt);
                            if (drwRes.Value == 0)
                            {
                                tdDrawStyle = 0;
                            }
                            else if (drwRes.Value == -1)
                            {
                                tdDrawStyle = -1;
                            }
                            else if (drwRes.Value == 1)
                            {
                                tdDrawStyle = 1;
                            }
                            TypedValueList values = tdLine.ObjectId.GetXrecord("DA_Tendons");    //根据输入更新钢束线的Xrecord记录
                            values.RemoveAt(4);
                            values.Add(DxfCode.Int16, tdDrawStyle);
                            break;

                        case "W":                    //修改工作长度
                            PromptDoubleOptions wklOpt = new PromptDoubleOptions($"\n输入工作长度<{workLen.ToString("F0")}>");
                            wklOpt.AllowNone = true; //允许ESC退出
                            PromptDoubleResult wklRes = ed.GetDouble(wklOpt);
                            if (wklRes.Status == PromptStatus.OK)
                            {
                                workLen = wklRes.Value;
                                ObjectId       tdsDictId = dicts.GetAt("DA_Tendons");//更新DA_Tendons字典中的钢束总体参数
                                DBDictionary   tdsDict   = tdsDictId.GetObject(OpenMode.ForRead) as DBDictionary;
                                ObjectId       xrecId    = tdsDict.GetAt("workLen");
                                Xrecord        xrec      = xrecId.GetObject(OpenMode.ForWrite) as Xrecord;
                                TypedValueList vls       = new TypedValueList();
                                vls.Add(DxfCode.Real, workLen);
                                xrec.Data = vls;
                                xrec.DowngradeOpen();
                            }
                            break;
                        }
                    }
                    else if (posRes.Status == PromptStatus.OK)
                    {
                        pos = posRes.Value;
                        break;
                    }
                }
                //3.2 绘图比例
                PromptDoubleOptions scaleOpt = new PromptDoubleOptions($"\n设置绘图比例<{scale}>");
                scaleOpt.AllowNone     = true;                        //允许回车,则采用前次比例
                scaleOpt.AllowNegative = false;                       //不允许负值
                scaleOpt.AllowZero     = false;                       //不允许零值
                PromptDoubleResult scaleRes = ed.GetDouble(scaleOpt); //获取比例
                if (scaleRes.Status != PromptStatus.OK && scaleRes.Status != PromptStatus.None)
                {
                    return;
                }
                else if (scaleRes.Status == PromptStatus.OK)
                {
                    scale = scaleRes.Value;
                }
                #endregion
                #region 4.建立各类标注
                List <Point3d>   ptsH = new List <Point3d>();   //创建水平标注点集
                List <Dimension> dims = new List <Dimension>(); //创建标注集,存放各类标注
                for (int i = 0; i < tdLine.NumberOfVertices - 1; i++)
                {
                    //4.1 水平点集
                    ptsH.Add(tdLine.GetPoint3dAt(i));

                    //4.2 每段钢束线的长度
                    //4.3 直线标注角度
                    //4.4 圆弧线标注半径
                    if (tdLine.GetSegmentType(i) == SegmentType.Line)
                    {
                        LineSegment3d lineSeg = tdLine.GetLineSegmentAt(i);
                        //4.2 每段钢束线的长度
                        db.LineLengthDim(lineSeg, scale);
                        //4.3 直线标注角度
                        if (tdLine.StartPoint.X < tdLine.EndPoint.X)
                        {
                            db.LineAngelDim(lineSeg, !(i == tdLine.NumberOfVertices - 2), scale);
                        }
                        else
                        {
                            db.LineAngelDim(lineSeg, (i == tdLine.NumberOfVertices - 2), scale);
                        }
                    }
                    else if (tdLine.GetSegmentType(i) == SegmentType.Arc)
                    {
                        CircularArc3d arcSeg = tdLine.GetArcSegmentAt(i);
                        //4.2 每段钢束线的长度
                        db.ArcLengthDim(arcSeg, scale);
                        //4.3 圆弧标注半径
                        db.ArrowRadiusDim(arcSeg, scale);
                    }
                    //4.5 竖直距离标注
                    Ray vRay = new Ray();//建立竖直射线
                    vRay.BasePoint = tdLine.GetPoint3dAt(i);
                    vRay.UnitDir   = new Vector3d(0, 1, 0);
                    Point3dCollection ptIntersects = new Point3dCollection();
                    tpLine.IntersectWith(vRay, Intersect.OnBothOperands, ptIntersects, IntPtr.Zero, IntPtr.Zero);
                    Point3d          ptIntersect = ptIntersects[0];
                    RotatedDimension dimV        = new RotatedDimension();
                    dimV.XLine1Point    = tdLine.GetPoint3dAt(i); //第一条尺寸边线
                    dimV.XLine2Point    = ptIntersect;            //第二条尺寸边线
                    dimV.DimLinePoint   = tdLine.GetPoint3dAt(i); //尺寸线位置
                    dimV.Rotation       = Math.PI / 2;            //标注旋转90度
                    dimV.DimensionStyle = db.Dimstyle;            //尺寸样式为当前样式
                    dimV.Dimscale       = scale;                  //设置尺寸全局比例
                    dims.Add(dimV);
                }
                //4.1 节点间距点集缺钢束最后一个点、梁顶缘线端点
                ptsH.Add(tdLine.EndPoint);
                ptsH.Add(tpLine.StartPoint);
                ptsH.Add(tpLine.EndPoint);
                db.ContinuedHorizontalDims(ptsH, pos, scale);//建立水平连续标注

                //4.5 竖直距离标注缺最后一个点
                Ray vRayLast = new Ray();//建立竖直射线
                vRayLast.BasePoint = tdLine.GetPoint3dAt(tdLine.NumberOfVertices - 1);
                vRayLast.UnitDir   = new Vector3d(0, 1, 0);
                Point3dCollection ptIntersectsLast = new Point3dCollection();
                tpLine.IntersectWith(vRayLast, Intersect.OnBothOperands, ptIntersectsLast, IntPtr.Zero, IntPtr.Zero);
                Point3d          ptIntersectLast = ptIntersectsLast[0];
                RotatedDimension dimVLast        = new RotatedDimension();
                dimVLast.XLine1Point    = tdLine.GetPoint3dAt(tdLine.NumberOfVertices - 1); //第一条尺寸边线
                dimVLast.XLine2Point    = ptIntersectLast;                                  //第二条尺寸边线
                dimVLast.DimLinePoint   = tdLine.GetPoint3dAt(tdLine.NumberOfVertices - 1); //尺寸线位置
                dimVLast.Rotation       = Math.PI / 2;                                      //标注旋转90度
                dimVLast.DimensionStyle = db.Dimstyle;                                      //尺寸样式为当前样式
                dimVLast.Dimscale       = scale;                                            //设置尺寸全局比例
                dims.Add(dimVLast);
                #endregion
                #region 5 绘制张拉端
                //5.1 获取张拉端几何特征
                //获取钢束线真实的起点和终点
                Point3d tdStart = (tdLine.StartPoint.X < tdLine.EndPoint.X) ? tdLine.StartPoint : tdLine.EndPoint;
                Point3d tdEnd   = (tdLine.StartPoint.X < tdLine.EndPoint.X) ? tdLine.EndPoint : tdLine.StartPoint;
                //获取钢束线真实的起终点角度
                double iclStart = (tdLine.StartPoint.X < tdLine.EndPoint.X) ?
                                  tdLine.GetLineSegmentAt(0).GetAngleOfLineSeg() : tdLine.GetLineSegmentAt(tdLine.NumberOfVertices - 2).GetAngleOfLineSeg();
                double iclEnd = (tdLine.StartPoint.X < tdLine.EndPoint.X) ?
                                tdLine.GetLineSegmentAt(tdLine.NumberOfVertices - 2).GetAngleOfLineSeg() : tdLine.GetLineSegmentAt(0).GetAngleOfLineSeg();
                //初始化张拉端图元
                Polyline leftDraw  = new Polyline();
                Polyline rightDraw = new Polyline();
                MText    lengthL   = new MText();
                MText    lengthR   = new MText();
                //5.2 左侧张拉端
                //5.2.1 两侧张拉或左侧张拉时左端绘制工作长度线
                if (tdDrawStyle == 0 || tdDrawStyle == -1)
                {
                    //创建张拉端几何点
                    Point3d tdDrawL = GeTools.PolarPoint(tdStart, iclStart, -workLen);
                    //创建张拉段
                    leftDraw = new Polyline();
                    leftDraw.AddVertexAt(0, tdStart.ToPoint2d(), 0, 0, 0);
                    leftDraw.AddVertexAt(1, tdDrawL.ToPoint2d(), 0, 0, 0);
                    leftDraw.Layer = tdLine.Layer;//张拉段与钢束线应该在同一层
                    //标注左侧张拉段
                    lengthL = new MText();
                    //长度
                    lengthL.Contents = "工作长度" + workLen.ToString("F0");
                    //文字高度
                    lengthL.TextHeight = 3 * scale;
                    //样式为当前样式
                    lengthL.TextStyleId = db.Textstyle;
                    //旋转角度同直线段倾角
                    lengthL.Rotation = iclStart;
                    //对齐位置为右上
                    lengthL.Attachment = AttachmentPoint.TopRight;
                    //位置为中点垂线以下0.5个单位
                    lengthL.Location = GeTools.PolarPoint(GeTools.MidPoint(leftDraw.StartPoint,
                                                                           leftDraw.EndPoint), iclStart - Math.PI / 2, 0.5 * scale);
                }
                //5.2.2 右侧张拉时绘制P锚标识
                else
                {
                    //创建P锚起终点
                    Point3d tdDrawL1 = GeTools.PolarPoint(tdStart, iclStart + Math.PI / 2, 0.75 * scale);
                    Point3d tdDrawL2 = GeTools.PolarPoint(tdStart, iclStart + Math.PI / 2, -0.75 * scale);
                    //创建P锚标志
                    leftDraw = new Polyline();
                    leftDraw.AddVertexAt(0, tdDrawL1.ToPoint2d(), 0, 0.35 * scale, 0.35 * scale);
                    leftDraw.AddVertexAt(1, tdDrawL2.ToPoint2d(), 0, 0.35 * scale, 0.35 * scale);
                    leftDraw.Layer = tdLine.Layer;//张拉段与钢束线应该在同一层
                    //标注左侧P锚
                    lengthL = new MText();
                    //长度
                    lengthL.Contents = "P锚";
                    //文字高度
                    lengthL.TextHeight = 3 * scale;
                    //样式为当前样式
                    lengthL.TextStyleId = db.Textstyle;
                    //旋转角度同直线段倾角
                    lengthL.Rotation = iclStart;
                    //对齐位置为右中
                    lengthL.Attachment = AttachmentPoint.MiddleRight;
                    //位置为P锚标志右侧0.5个单位
                    lengthL.Location = GeTools.PolarPoint(GeTools.MidPoint(leftDraw.StartPoint,
                                                                           leftDraw.EndPoint), iclStart, -2 * scale);
                }
                //5.3 右侧张拉端绘制
                //5.3.1 两侧张拉或右侧张拉时右端绘制工作长度线
                if (tdDrawStyle == 0 || tdDrawStyle == 1)
                {
                    //创建张拉端几何点
                    Point3d tdDrawR = GeTools.PolarPoint(tdEnd, iclEnd, workLen);
                    //创建张拉段
                    rightDraw = new Polyline();
                    rightDraw.AddVertexAt(0, tdEnd.ToPoint2d(), 0, 0, 0);
                    rightDraw.AddVertexAt(1, tdDrawR.ToPoint2d(), 0, 0, 0);
                    rightDraw.Layer = tdLine.Layer;//张拉段与钢束线应该在同一层
                    //标注右侧张拉段
                    lengthR = new MText();
                    //长度
                    lengthR.Contents = "工作长度" + workLen.ToString("F0");
                    //文字高度
                    lengthR.TextHeight = 3 * scale;
                    //样式为当前样式
                    lengthR.TextStyleId = db.Textstyle;
                    //旋转角度同直线段倾角
                    lengthR.Rotation = iclEnd;
                    //对齐位置为左上
                    lengthR.Attachment = AttachmentPoint.TopLeft;
                    //位置为中点垂线以下0.5个单位
                    lengthR.Location = GeTools.PolarPoint(GeTools.MidPoint(rightDraw.StartPoint,
                                                                           rightDraw.EndPoint), iclEnd - Math.PI / 2, 0.5 * scale);
                }
                //5.2.2 左侧张拉时绘制P锚标识
                else//绘制P锚
                {
                    //创建P锚起终点
                    Point3d tdDrawR1 = GeTools.PolarPoint(tdEnd, iclEnd + Math.PI / 2, 0.75 * scale);
                    Point3d tdDrawR2 = GeTools.PolarPoint(tdEnd, iclEnd + Math.PI / 2, -0.75 * scale);
                    //创建P锚标志
                    rightDraw = new Polyline();
                    rightDraw.AddVertexAt(0, tdDrawR1.ToPoint2d(), 0, 0.35 * scale, 0.35 * scale);
                    rightDraw.AddVertexAt(1, tdDrawR2.ToPoint2d(), 0, 0.35 * scale, 0.35 * scale);
                    rightDraw.Layer = tdLine.Layer;//张拉段与钢束线应该在同一层
                    //标注左侧P锚
                    lengthR = new MText();
                    //长度
                    lengthR.Contents = "P锚";
                    //文字高度
                    lengthR.TextHeight = 3 * scale;
                    //样式为当前样式
                    lengthR.TextStyleId = db.Textstyle;
                    //旋转角度同直线段倾角
                    lengthR.Rotation = iclEnd;
                    //对齐位置为左中
                    lengthR.Attachment = AttachmentPoint.MiddleLeft;
                    //位置为P锚标志右侧0.5个单位
                    lengthR.Location = GeTools.PolarPoint(GeTools.MidPoint(rightDraw.StartPoint,
                                                                           rightDraw.EndPoint), iclEnd, 2 * scale);
                }
                #endregion
                #region 6 在截面顶缘标识“梁顶缘线”
                Point3d midPt     = GeTools.MidPoint(tpLine.StartPoint, tpLine.EndPoint);  //顶缘线起终点中点
                Point3d midPtInTp = tpLine.GetClosestPointTo(midPt, Vector3d.YAxis, true); //顶缘线上靠近中点的点
                MText   tpAnno    = new MText();
                tpAnno.Contents = "梁顶缘线";
                //文字高度
                tpAnno.TextHeight = 3 * scale;
                //样式为当前样式
                tpAnno.TextStyleId = db.Textstyle;
                //对齐位置为右上
                tpAnno.Attachment = AttachmentPoint.BottomLeft;
                //位置为中点以上0.5个单位
                tpAnno.Location = GeTools.PolarPoint(midPtInTp, Math.PI / 2, 0.5 * scale);
                #endregion
                db.AddToModelSpace(dims.ToArray());                        //添加各类标注
                db.AddToModelSpace(leftDraw, rightDraw, lengthL, lengthR); //添加张拉段线
                db.AddToModelSpace(tpAnno);                                //添加梁顶缘线标识
                trans.Commit();
            }
        }
예제 #8
0
        protected override SamplerStatus Sampler(JigPrompts prompts)
        {
            Editor   ed = Application.DocumentManager.MdiActiveDocument.Editor;
            Matrix3d mt = ed.CurrentUserCoordinateSystem;
            JigPromptPointOptions optJigPoint = new JigPromptPointOptions("\n请指定矩形的另一角点")
            {
                Cursor            = CursorType.Crosshair,
                UserInputControls = UserInputControls.Accept3dCoordinates | UserInputControls.NoZeroResponseAccepted | UserInputControls.NoNegativeResponseAccepted,
                BasePoint         = m_Pt1.TransformBy(mt),
                UseBasePoint      = true
            };
            PromptPointResult resJigPoint = prompts.AcquirePoint(optJigPoint);
            Point3d           tempPt      = resJigPoint.Value;

            if (resJigPoint.Status == PromptStatus.Cancel)
            {
                return(SamplerStatus.Cancel);
            }
            if (m_Pt2 != tempPt)
            {
                m_Pt2 = tempPt;
                Point3d ucsPt2 = m_Pt2.TransformBy(mt.Inverse());
                m_Polyline.Normal    = Vector3d.ZAxis;
                m_Polyline.Elevation = 0.0;
                m_Polyline.SetPointAt(0, new Point2d(m_Pt1.X, m_Pt1.Y));
                m_Polyline.SetPointAt(1, new Point2d(ucsPt2.X, m_Pt1.Y));
                m_Polyline.SetPointAt(2, new Point2d(ucsPt2.X, ucsPt2.Y));
                m_Polyline.SetPointAt(3, new Point2d(m_Pt1.X, ucsPt2.Y));
                m_Polyline.TransformBy(mt);
                Point3d  cenPt   = GeTools.MidPoint(m_Pt1.TransformBy(mt), m_Pt2);
                Point3d  majorPt = new Point3d(ucsPt2.X, m_Pt1.Y, 0);
                Vector3d vecX    = GeTools.MidPoint(majorPt, ucsPt2).TransformBy(mt) - cenPt;
                try
                {
                    if (Math.Abs(ucsPt2.X - m_Pt1.X) < 0.0000001 | Math.Abs(ucsPt2.Y - m_Pt1.Y) < 0.000001)
                    {
                        m_Ellipse = new Ellipse(Point3d.Origin, Vector3d.ZAxis, new Vector3d(0.00000001, 0, 0), 1.0, 0.0, 0.0);
                    }
                    else
                    {
                        double radiusRatio = Math.Abs((ucsPt2.X - m_Pt1.X) / (ucsPt2.Y - m_Pt1.Y));
                        if (radiusRatio < 1.0)
                        {
                            majorPt = new Point3d(m_Pt1.X, ucsPt2.Y, 0.0);
                            vecX    = GeTools.MidPoint(majorPt, ucsPt2).TransformBy(mt) - cenPt;
                        }
                        else
                        {
                            radiusRatio = 1.0 / radiusRatio;
                        }
                        m_Ellipse.Set(cenPt, mt.CoordinateSystem3d.Zaxis, vecX, radiusRatio, 0, 2 * Math.PI);
                    }
                }
                catch { }
                return(SamplerStatus.OK);
            }
            else
            {
                return(SamplerStatus.NoChange);
            }
        }
예제 #9
0
        /// <summary>
        /// 自动编号
        /// </summary>
        /// <param name="insertPoint">插入点</param>
        public static void CreateItemNo(Point3d insertPoint, EntityList list, string prefix, int number)
        {
            // Put your command code here
            Plane   plane   = new Plane();
            Ellipse ellipse = new Ellipse(insertPoint, plane.Normal, new Vector3d(200, 0, 0), 0.54, 0, GeTools.DegreeToRadian(360));
            DBText  text    = new DBText();

            text.Height = 120;
            //单行文字的插入点有两个,不同的对齐方式,需要设置的点不同
            text.HorizontalMode = TextHorizontalMode.TextCenter;
            text.VerticalMode   = TextVerticalMode.TextVerticalMid;
            text.Position       = insertPoint;
            text.AlignmentPoint = insertPoint;

            if (number < 10)
            {
                text.TextString = prefix + "0" + number.ToString();
            }
            else
            {
                text.TextString = prefix + number.ToString();
            }
            list.Add(ellipse);
            list.Add(text);
        }
예제 #10
0
 static void Init()
 {
     window = (GeTools)EditorWindow.GetWindow <GeTools> ("常用文本功能");
 }
예제 #11
0
	static void Init ()
	{
		window = (GeTools)EditorWindow.GetWindow <GeTools> ("常用文本功能");
	}