明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1837|回复: 4

[基础] 如何从填充图案上获得角点?

[复制链接]
发表于 2014-5-20 19:14:53 | 显示全部楼层 |阅读模式
本帖最后由 介之推 于 2014-5-20 20:38 编辑

大家好,
AutoCAD中,我们用鼠标点击一个填充时,可以看到这个填充图案四周和中心出现一些点,其中选择中心的那个点后可以移动这个填充图案,如下图所示。

填充一般是Hatch类的一个实例,我想请问一下:中心的这个点是这个填充图案的那个属性啊?或者通过什么方式可以获得中心的这个点? 谢谢指教了。

本帖子中包含更多资源

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

x
发表于 2014-5-20 19:47:51 来自手机 | 显示全部楼层
GripStretchPoints
 楼主| 发表于 2014-5-20 20:30:17 | 显示全部楼层
ivde 发表于 2014-5-20 19:47
GripStretchPoints

你好,ivde
我用的是AutoCAD 2010, 好像没有这个 GripStretchPoints,倒是有个GetGripPoint(), 但我不知道如何使用啊。这是我现在的代码,请指教:
  1. //从屏幕中选择填充和文字
  2.         public bool Select(List<Point3d> hatchPointLst,List<DBText> nameLst)
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Database db = doc.Database;
  6.             Editor ed = doc.Editor;
  7.             
  8.             using (Transaction trans = db.TransactionManager.StartTransaction())
  9.             {
  10.                 try
  11.                 {
  12.                     //定义过滤器
  13.                     SelectionFilter flt = new SelectionFilter(new TypedValue[] { new TypedValue(0, "TEXT,HATCH") });

  14.                     PromptSelectionOptions optSel = new PromptSelectionOptions();
  15.                     optSel.MessageForAdding = "\n请选择观察点分布图";
  16.                     PromptSelectionResult resSel = ed.GetSelection(optSel, flt);

  17.                     if (resSel.Status != PromptStatus.OK)
  18.                         return false;

  19.                     SelectionSet selSet = resSel.Value;
  20.                     ObjectId[] ids = selSet.GetObjectIds();
  21.                     
  22.                     foreach (ObjectId sSetEntId in ids)
  23.                     {
  24.                         Entity ent = (Entity)trans.GetObject(sSetEntId, OpenMode.ForRead);
  25.                         if (ent.GetType().Name == "Hatch")
  26.                         {
  27.                             Hatch myHatch = (Hatch) trans.GetObject(sSetEntId, OpenMode.ForRead);
  28.                             //myHatch.GetGripPoints();

  29.                         }       //End of the if (ent.GetType().Name == "Hatch")
  30.                         else if (ent.GetType().Name == "DBText")
  31.                         {
  32.                             DBText myText = (DBText)trans.GetObject(sSetEntId, OpenMode.ForRead);

  33.                             nameLst.Add(myText);                           
  34.                         }
  35.                     }
  36.                 }
  37.                 catch (System.Exception ex)
  38.                 {
  39.                     ed.WriteMessage(ex.Message + "\n" + ex.StackTrace);
  40.                     return false;
  41.                 }

  42.                 trans.Commit();

  43.                 //如果执行到这里,表示一切顺利,可以返回true
  44.                 return true;
  45.             }
  46.         }
发表于 2014-6-20 17:24:50 | 显示全部楼层
是 GetStretchPoints

  1.         [CommandMethod("MyGroup", "MyCommand", "MyCommandLocal", CommandFlags.Modal)]
  2.         public void MyCommand() // This method can have any name
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Editor ed = doc.Editor;
  6.             Database db = doc.Database;
  7.             Transaction tr = db.TransactionManager.StartTransaction();

  8.             PromptEntityResult per = ed.GetEntity("\nSelect Entity:");

  9.             if (per.Status != PromptStatus.OK) return;

  10.             ObjectId hatId = per.ObjectId;

  11.             Entity ent = (Entity) tr.GetObject(hatId, OpenMode.ForRead);

  12.             Point3dCollection pts = new Point3dCollection();

  13.             ent.GetStretchPoints(pts);
  14.             using (tr )
  15.             {
  16.                 try
  17.                 {
  18.                     BlockTableRecord btr = (BlockTableRecord) tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  19.                     int j = 1;
  20.                     for (int i = 0; i < pts.Count ; i++)
  21.                     {
  22.                         DBPoint dbPoint = new DBPoint();
  23.                         dbPoint.Position = pts[i];
  24.                         dbPoint.ColorIndex = j;
  25.                         btr.AppendEntity( dbPoint);
  26.                         tr.AddNewlyCreatedDBObject(dbPoint,true);
  27.                         if (j > 255) {j = 1;}
  28.                         j++;
  29.                     }
  30.                     tr.Commit();
  31.                 }
  32.                 catch (Exception)
  33.                 {
  34.                     throw;
  35.                 }
  36.             }
  37.         }
发表于 2015-1-4 19:00:26 | 显示全部楼层
好东西,正在找,学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 13:42 , Processed in 0.197150 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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