乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 141|回复: 9

editor.command(),用户命令能使用选择集么

[复制链接]

2

主题

6

帖子

2

银币

初来乍到

Rank: 1

铜币
14
发表于 2014-7-9 12:20:00 | 显示全部楼层 |阅读模式
我在2015的环境下,join命令可以合并多条直线成多段线。用autocad.net发送命令发现不能识别选择集。
思路如下:
先建一个含两条直线的选择集,如 testset
然后用editor.command("_join",testset)
发现选择集不能被join命令所识别.
请问这个editor.command发送命令函数怎样才能使用选择集?
另外问下这个函数是同步执行命令的么?我不需要sendstringToExecute那样延时运行的发送命令函数。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-7-9 14:31:00 | 显示全部楼层
直接传ObjectId试试
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2014-7-9 16:19:00 | 显示全部楼层
用 Editor.CommandAsync 有暂停等用户输入
回复

使用道具 举报

14

主题

64

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2014-7-10 09:57:00 | 显示全部楼层
都2015了,真是超前的厉害,致敬
回复

使用道具 举报

2

主题

6

帖子

2

银币

初来乍到

Rank: 1

铜币
14
发表于 2014-7-10 23:41:00 | 显示全部楼层
试着转objectid,如下代码,不行啊。
    Dim testid() As ObjectId
            If acSSPrompt.Status = PromptStatus.OK Then
                Dim acSSet As SelectionSet = acSSPrompt.Value
                testid = acSSet.GetObjectIds()
                ed.Command("_JOIN", testid)               
            End If
另外,用2015版纯粹巧合,工作用10的,小本用15的。
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2014-7-11 06:36:00 | 显示全部楼层

command需要SelectionSet
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-7-11 17:56:00 | 显示全部楼层

ed.Command("_JOIN", id1, id2)
建议尽量不要用这个 Jion可以直接用代码实现的 不是很复杂
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-7-11 18:20:00 | 显示全部楼层
另外你没有搞清楚Join的步骤 他是先选择源对象 再选其他对象,所以调用格式:
editor.command("_join", id, ss)
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-7-11 18:30:00 | 显示全部楼层

下面是我的测试(用自己的封装,没有2015)
  1.        #region Command
  2.         private static void AddValueToResultBuffer(ref ResultBuffer rb, object obj)
  3.         {
  4.             if (obj == null)
  5.             {
  6.                 rb.Add(new TypedValue((int)LispDataType.Text, ""));
  7.             }
  8.             else
  9.             {
  10.                 if (obj is string)
  11.                 {
  12.                     rb.Add(new TypedValue((int)LispDataType.Text, obj));
  13.                 }
  14.                 else if (obj is Point2d)
  15.                 {
  16.                     rb.Add(new TypedValue((int)LispDataType.Text, "_non"));
  17.                     rb.Add(new TypedValue((int)LispDataType.Point2d, obj));
  18.                 }
  19.                 else if (obj is Point3d)
  20.                 {
  21.                     rb.Add(new TypedValue((int)LispDataType.Text, "_non"));
  22.                     rb.Add(new TypedValue((int)LispDataType.Point3d, obj));
  23.                 }
  24.                 else if (obj is ObjectId)
  25.                 {
  26.                     rb.Add(new TypedValue((int)LispDataType.ObjectId, obj));
  27.                 }
  28.                 else if (obj is SelectionSet)
  29.                 {
  30.                     rb.Add(new TypedValue((int)LispDataType.SelectionSet, obj));
  31.                 }
  32.                 else if (obj is double)
  33.                 {
  34.                     rb.Add(new TypedValue((int)LispDataType.Double, obj));
  35.                 }
  36.                 else if (obj is short)
  37.                 {
  38.                     rb.Add(new TypedValue((int)LispDataType.Int16, obj));
  39.                 }
  40.                 else if (obj is int)
  41.                 {
  42.                     rb.Add(new TypedValue((int)LispDataType.Int32, obj));
  43.                 }
  44.                 else if (obj is TypedValue)
  45.                 {
  46.                     rb.Add(obj);
  47.                 }
  48.             }
  49.         }
  50.         [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl)]
  51.         private static extern int acedCmd(IntPtr vlist);
  52.         ///
  53.         /// 调用AutoCad命令
  54.         ///
  55.         /// 命令结束方式
  56.         /// 参数
  57.         public static void Command(bool endCommandByUser, ResultBuffer rb)
  58.         {
  59.             ResultBuffer rbend = new ResultBuffer();
  60.             try
  61.             {
  62.                 Document doc = Application.DocumentManager.MdiActiveDocument;
  63.                 string currCmdName = doc.CommandInProgress;
  64.                 acedCmd(rb.UnmanagedObject);
  65.                 if (endCommandByUser)
  66.                 {
  67.                     rbend.Add(new TypedValue((int)LispDataType.Text, "\"));
  68.                 }
  69.                 while (doc.CommandInProgress != currCmdName)
  70.                 {
  71.                     acedCmd(rbend.UnmanagedObject);
  72.                 }
  73.             }
  74.             catch { }
  75.             finally
  76.             {
  77.                 rb.Dispose();
  78.                 rbend.Dispose();
  79.             }
  80.         }
  81.         ///
  82.         /// 调用AutoCad命令
  83.         ///
  84.         /// 命令结束方式
  85.         /// 参数
  86.         public static void Command(bool endCommandByUser, params object[] args)
  87.         {
  88.             ResultBuffer rb = new ResultBuffer();
  89.             foreach (object val in args)
  90.             {
  91.                 AddValueToResultBuffer(ref rb, val);
  92.             }
  93.             Command(endCommandByUser, rb);
  94.         }
  95.         #endregion

测试代码
  1.             var doc = Application.DocumentManager.MdiActiveDocument;
  2.             var db = doc.Database;
  3.             var ed = doc.Editor;
  4.             ObjectId id1,id2;
  5.             using (Transaction tr = db.TransactionManager.StartTransaction())
  6.             {
  7.                 BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
  8.                 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  9.                 Line l1 = new Line(new Point3d(1, 1, 0), Point3d.Origin);
  10.                 Line l2 = new Line(Point3d.Origin,new Point3d(-1,-1,0));
  11.                 id1 =  btr.AppendEntity(l1);
  12.                 tr.AddNewlyCreatedDBObject(l1,true);
  13.                 id2 =  btr.AppendEntity(l2);
  14.                 tr.AddNewlyCreatedDBObject(l2,true);
  15.                 tr.Commit();
  16.             }
  17.             EdEx.Command(
  18.                 false,
  19.                 "._join",
  20.                 id1,
  21.                 SelectionSet.FromObjectIds(new ObjectId[] { id2 }),
  22.                 null);

回复

使用道具 举报

2

主题

6

帖子

2

银币

初来乍到

Rank: 1

铜币
14
发表于 2014-7-13 17:43:00 | 显示全部楼层
我用的是vb,楼上的代码有点高大上了。我看看能不能转成vb试试。谢谢
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 21:20 , Processed in 0.400733 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表