找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 982|回复: 0

[分享] Label polyline areas with field

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-6-7 00:54:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
//----------------------------------------------------------------------------------------------//
        [CommandMethod("POLA", CommandFlags.Modal)]
        public void PolyAreas()
        {
            var doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            var db = doc.Database;
            var ed = doc.Editor;
            Matrix3d ucs = ed.CurrentUserCoordinateSystem;
           
            var sf = new SelectionFilter(new TypedValue[] { new TypedValue(0, "LWPOLYLINE"), new TypedValue(70, 1) });
            var pso = new PromptSelectionOptions();
            pso.MessageForAdding = "Select polylines (or enter for all): ";
            pso.AllowDuplicates = false;
            var psr = ed.GetSelection(pso, sf);
            // If nothing selected then select all
            if (psr.Status == PromptStatus.Error) psr = ed.SelectAll(sf);
            // make sure the selection isn't empty
            if (psr.Status == PromptStatus.OK && psr.Value.Count > 0)
            {
                using (var tr = db.TransactionManager.StartTransaction())
                {
                    var btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
                    foreach (SelectedObject so in psr.Value)
                    {
                        var pline = (Polyline)tr.GetObject(so.ObjectId, OpenMode.ForRead);

                        Point3d cp = GetPseudoCentroid(db, pline).TransformBy(ucs);
                        string strObjId = pline.ObjectId.ToString();
                        strObjId = strObjId.Trim(new char[] { '(', ')' });
                        var mtx = new MText();
                        mtx.Contents = "%<\\AcObjProp Object(%<\\_ObjId " + strObjId + ">%).Area \\f \"%pr3%lu2%ct4%qf1 SQ. FT.\">%";
                        mtx.Location = cp;
                        mtx.Rotation = 0;
                        mtx.Attachment = AttachmentPoint.MiddleCenter;

                        btr.AppendEntity(mtx);
                        tr.AddNewlyCreatedDBObject(mtx, true);
                        tr.TransactionManager.QueueForGraphicsFlush();

                    }
                    doc.TransactionManager.FlushGraphics();
                    tr.Commit();
                    ed.Regen();
                }
            }
        }

        //----------------------------------------------------------------------------------------------//
        public Point3d GetPseudoCentroid(Database db, Polyline pline)
        {
            Point3d cpt = new Point3d();
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

            try
            {
                using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction())
                {

                    Point3d maxp = pline.GeometricExtents.MaxPoint;
                    Point3d minp = pline.GeometricExtents.MinPoint;
                    cpt = new Point3d((maxp.X + minp.X) / 2, (maxp.Y + minp.Y) / 2, (maxp.Z + minp.Z) / 2);

                    tr.Commit();
                    return cpt;
                }
            }
            catch
            {
                // ed.WriteMessage("\nError on getting centroid");//debug only
                return cpt;
            }

        }

        //----------------------------------------------------------------------------------------------//
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 22:49 , Processed in 0.162082 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表