明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1946|回复: 5

本周新开发的一个倒C角的程序,请大家提点意见

[复制链接]
发表于 2012-3-10 14:56:43 | 显示全部楼层 |阅读模式
  1. * 日期: 2012-3-8 * 时间: 15:24 * using System;using DNA;using Autodesk;using Autodesk.AutoCAD.Runtime;using Autodesk.AutoCAD.DatabaseServices;using Autodesk.AutoCAD.Geometry;using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.EditorInput;using Autodesk.AutoCAD.Colors;namespace ZZXDIM{    ///     /// Description of MyClass.    ///     public class MyClass    {        [CommandMethod("CC", CommandFlags.UsePickSet)]        public void dimcc()        {            Database db = HostApplicationServices.WorkingDatabase;            Document acDoc = Application.DocumentManager.MdiActiveDocument;            using (Transaction trans = db.TransactionManager.StartTransaction())            {                Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;                PromptEntityResult oj = ed.GetEntity("请选择C角处的直线 ");                Point3d po3 = oj.PickedPoint;                Point3d po1 = ed.GetPoint("请选择标注放置位置: ").Value;                po1 = Tools.UcsToWcs(po1);                Point3d po2 = new Point3d();                ObjectId id = oj.ObjectId;                ObjectId STYID = TEXTSTYE();                po3 = Tools.UcsToWcs(po3);                double L = 1.2;                if ((oj.Status == PromptStatus.OK) && (po1 != new Point3d(0, 0, 0)))                {                    Entity ent1 = (Entity)trans.GetObject(id, OpenMode.ForRead);                    string ent2type = ent1.GetType().ToString();                    if (ent2type == "Autodesk.AutoCAD.DatabaseServices.Line")                    {                        Line l1 = (Line)trans.GetObject(id, OpenMode.ForRead);                        Point3d plend = l1.EndPoint;                        Point3d plstr = l1.StartPoint;                        double xleng = Math.Abs(plend.X - plstr.X);                        double yleng = Math.Abs(plend.Y - plstr.Y);                        po2 = new Point3d((plstr.X + plend.X) / 2, (plstr.Y + plend.Y) / 2, 0);                        L = xleng;                    }                    if (ent2type == "Autodesk.AutoCAD.DatabaseServices.Polyline")                    {                        Polyline pl = (Polyline)trans.GetObject(id, OpenMode.ForRead);                        Point3d tty = pl.GetClosestPointTo(po3, true);                        double ds = pl.GetParameterAtPoint(tty);                        int iiy = Convert.ToInt32(Math.Floor(ds));//点的是哪一段上的点                         Point2d pt1 = pl.GetPoint2dAt(iiy);                        int gs = pl.NumberOfVertices;                        Point2d pt2 = new Point2d();                        if (gs > iiy + 1)                        {                            pt2 = pl.GetPoint2dAt(iiy + 1);                        }                        else                        {                            pt2 = pl.GetPoint2dAt(0);                        }                        double xleng = Math.Abs(pt1.X - pt2.X);                        double yleng = Math.Abs(pt1.Y - pt2.Y);                        po2 = new Point3d((pt1.X + pt2.X) / 2, (pt1.Y + pt2.Y) / 2, 0);                        L = xleng;                    }                    //样式问题需要进行                    //文字高度求解                    double tt = System.Convert.ToDouble(Application.GetSystemVariable("DIMTXT"));                    double tt2 = System.Convert.ToDouble(Application.GetSystemVariable("DIMSCALE"));                    //建立文字                    MText acMText = new MText();                    acMText.SetDatabaseDefaults();                    acMText.Contents = "C" + L;                    acMText.Location = po1;                    acMText.Width = 2;                    if (tt * tt2 > 0)                    {                        acMText.TextHeight = tt * tt2;                    }                    acMText.Color = Color.FromColorIndex(ColorMethod.ByAci, 41);                    if (po1.X < po2.X)                    {                        acMText.Attachment = AttachmentPoint.MiddleRight;                    }                    else                    {                        acMText.Attachment = AttachmentPoint.MiddleLeft;                    }                    Tools.AddEntities(new Entity[] { acMText });                    // 建立引线标注leader                    Leader acLdr = new Leader();                    acLdr.SetDatabaseDefaults();                    acLdr.AppendVertex(po2); ;                    acLdr.AppendVertex(po1);                    acLdr.HasArrowHead = true;                    Tools.AddEntities(new Entity[] { acLdr });                    acLdr.Annotation = acMText.ObjectId;                    acLdr.EvaluateLeader();                    trans.Commit();                }                else                {                    ed.WriteMessage("所给条件不完全,无法完成指command");                }            }        }        public ObjectId TEXTSTYE()        {            Database db = HostApplicationServices.WorkingDatabase;            Document acDoc = Application.DocumentManager.MdiActiveDocument;            using (Transaction trans = db.TransactionManager.StartTransaction())            {                ObjectId STYID;                TextStyleTable lt = (TextStyleTable)trans.GetObject(db.TextStyleTableId, OpenMode.ForWrite);                if (lt.Has("ZZX"))                {                    STYID = lt["ZZX"];                    Application.SetSystemVariable("TEXTSTYLE", "ZZX");                }                else                {                    STYID = lt["Standard"];                }                trans.Commit();                return STYID;            }        }           }}

 楼主| 发表于 2012-3-10 14:58:01 | 显示全部楼层
怎么成这样了,重发一下
* 日期: 2012-3-8
* 时间: 15:24
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
using DNA;
using Autodesk;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Colors;

namespace ZZXDIM
{
    /// <summary>
    /// Description of MyClass.
    /// </summary>
    public class MyClass
    {
        [CommandMethod("CC", CommandFlags.UsePickSet)]
        public void dimcc()
        {
            Database db = HostApplicationServices.WorkingDatabase;

            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
                PromptEntityResult oj = ed.GetEntity("请选择C角处的直线 ");

                Point3d po3 = oj.PickedPoint;
                Point3d po1 = ed.GetPoint("请选择标注放置位置: ").Value;
                po1 = Tools.UcsToWcs(po1);
                Point3d po2 = new Point3d();
                ObjectId id = oj.ObjectId;
                ObjectId STYID = TEXTSTYE();
                po3 = Tools.UcsToWcs(po3);
                double L = 1.2;
                if ((oj.Status == PromptStatus.OK) && (po1 != new Point3d(0, 0, 0)))
                {
                    Entity ent1 = (Entity)trans.GetObject(id, OpenMode.ForRead);
                    string ent2type = ent1.GetType().ToString();
                    if (ent2type == "Autodesk.AutoCAD.DatabaseServices.Line")
                    {
                        Line l1 = (Line)trans.GetObject(id, OpenMode.ForRead);
                        Point3d plend = l1.EndPoint;
                        Point3d plstr = l1.StartPoint;
                        double xleng = Math.Abs(plend.X - plstr.X);
                        double yleng = Math.Abs(plend.Y - plstr.Y);
                        po2 = new Point3d((plstr.X + plend.X) / 2, (plstr.Y + plend.Y) / 2, 0);
                        L = xleng;
                    }
                    if (ent2type == "Autodesk.AutoCAD.DatabaseServices.Polyline")
                    {
                        Polyline pl = (Polyline)trans.GetObject(id, OpenMode.ForRead);
                        Point3d tty = pl.GetClosestPointTo(po3, true);
                        double ds = pl.GetParameterAtPoint(tty);
                        int iiy = Convert.ToInt32(Math.Floor(ds));//点的是哪一段上的点
                        Point2d pt1 = pl.GetPoint2dAt(iiy);
                        int gs = pl.NumberOfVertices;
                        Point2d pt2 = new Point2d();
                        if (gs > iiy + 1)
                        {
                            pt2 = pl.GetPoint2dAt(iiy + 1);
                        }
                        else
                        {
                            pt2 = pl.GetPoint2dAt(0);
                        }

                        double xleng = Math.Abs(pt1.X - pt2.X);
                        double yleng = Math.Abs(pt1.Y - pt2.Y);
                        po2 = new Point3d((pt1.X + pt2.X) / 2, (pt1.Y + pt2.Y) / 2, 0);
                        L = xleng;


                    }
                    //样式问题需要进行
                    //文字高度求解
                    double tt = System.Convert.ToDouble(Application.GetSystemVariable("DIMTXT"));
                    double tt2 = System.Convert.ToDouble(Application.GetSystemVariable("DIMSCALE"));
                    //建立文字
                    MText acMText = new MText();
                    acMText.SetDatabaseDefaults();
                    acMText.Contents = "C" + L;
                    acMText.Location = po1;
                    acMText.Width = 2;
                    if (tt * tt2 > 0)
                    {
                        acMText.TextHeight = tt * tt2;
                    }

                    acMText.Color = Color.FromColorIndex(ColorMethod.ByAci, 41);
                    if (po1.X < po2.X)
                    {
                        acMText.Attachment = AttachmentPoint.MiddleRight;
                    }
                    else
                    {
                        acMText.Attachment = AttachmentPoint.MiddleLeft;
                    }

                    Tools.AddEntities(new Entity[] { acMText });
                    // 建立引线标注leader
                    Leader acLdr = new Leader();
                    acLdr.SetDatabaseDefaults();
                    acLdr.AppendVertex(po2); ;
                    acLdr.AppendVertex(po1);
                    acLdr.HasArrowHead = true;
                    Tools.AddEntities(new Entity[] { acLdr });

                    acLdr.Annotation = acMText.ObjectId;
                    acLdr.EvaluateLeader();
                    trans.Commit();

                }
                else
                {
                    ed.WriteMessage("所给条件不完全,无法完成指command");
                }

            }

        }
        public ObjectId TEXTSTYE()
        {
            Database db = HostApplicationServices.WorkingDatabase;
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                ObjectId STYID;
                TextStyleTable lt = (TextStyleTable)trans.GetObject(db.TextStyleTableId, OpenMode.ForWrite);
                if (lt.Has("ZZX"))
                {
                    STYID = lt["ZZX"];
                    Application.SetSystemVariable("TEXTSTYLE", "ZZX");
                }
                else
                {
                    STYID = lt["Standard"];
                }
                trans.Commit();
                return STYID;
            }
        }
      
    }
}
发表于 2012-3-10 19:45:00 | 显示全部楼层
高手啊,看不懂
发表于 2012-3-17 08:11:25 | 显示全部楼层
using DNA;?

po1 = Tools.UcsToWcs(po1)

tools没定义,试不了。
 楼主| 发表于 2012-4-18 11:59:55 | 显示全部楼层
tool 各DNA 为 DotNetARX的引用,没讲清楚,很对不起各位
发表于 2012-5-23 19:49:24 | 显示全部楼层
把效果果搞出来啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 17:56 , Processed in 0.266518 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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