ZZX4274382 发表于 2012-3-10 14:56:43

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

* 日期: 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    {            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;            }      }         }}

ZZX4274382 发表于 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
    {
      
      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;
            }
      }
      
    }
}

longer1000 发表于 2012-3-10 19:45:00

高手啊,看不懂

shirazbj 发表于 2012-3-17 08:11:25

using DNA;?

po1 = Tools.UcsToWcs(po1)

tools没定义,试不了。

ZZX4274382 发表于 2012-4-18 11:59:55

tool 各DNA 为 DotNetARX的引用,没讲清楚,很对不起各位

游天居士 发表于 2012-5-23 19:49:24

把效果果搞出来啊。
页: [1]
查看完整版本: 本周新开发的一个倒C角的程序,请大家提点意见