找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7229|回复: 11

[求助] 【已解决】用户交互 时,怎么实现同时使用两个 提示选项类?

[复制链接]
发表于 2019-2-1 09:06:05 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 hanxu5760 于 2019-4-4 10:03 编辑

请问各位大哥,在使用 用户交互 时,怎么实现同时使用两个 提示选项类?

比如使用CAD画圆的时候,在选定圆心后,程序既可以响应PromptDistanceOption 以输入半径,也可以响应PromptPointOption 以通过获取点的方式确定半径。

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

已领礼包: 19个

财富等级: 恭喜发财

发表于 2019-2-1 09:15:51 | 显示全部楼层
lisp 是 getdist

点评

用C#呢?也可以实现么?因为是在用C#编一个工具栏  详情 回复 发表于 2019-2-1 09:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-1 09:17:38 | 显示全部楼层

用C#呢?也可以实现么?因为是在用C#编一个工具栏
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2019-2-1 09:18:45 | 显示全部楼层
hanxu5760 发表于 2019-2-1 09:17
用C#呢?也可以实现么?因为是在用C#编一个工具栏

C#肯定也有的,你看看全局函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-1 09:23:20 | 显示全部楼层
好,先学习下全局函数的概念再来请教吧。谢谢了~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2019-2-1 09:27:29 | 显示全部楼层
  1. PromptDoubleResult result = AcadAppServices.Application.DocumentManager.MdiActiveDocument.Editor.GetDistance("Specify distance:");
  2. if (result.Status == PromptStatus.OK)
  3. {
  4.        double distance = result.Value;
  5. }

点评

我没太明白,这段代码在获取 double 数值的同时,也可以获取点么? 我只看到了一个提示选项,没有看到获取点的提示选项.  详情 回复 发表于 2019-2-1 10:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-1 10:56:27 | 显示全部楼层

我没太明白,这段代码在获取 double 数值的同时,也可以获取点么?

我只看到了一个提示选项,没有看到获取点的提示选项.

点评

GETDISTANCE有两种方法 GetDistance Autodesk.AutoCAD.EditorInput.PromptDoubleResultGetDistance(Autodesk.AutoCAD.EditorInput.PromptDistanceOptions options)ParametersReturn TypeAutodesk.AutoCAD.EditorInp  详情 回复 发表于 2019-2-1 11:54
你的题目就是说 可以通过输入点,来获取半径(实数),也可以通过输入数值来获取半径,怎么又问拾取点了。 你在提示下,鼠标点取点,就返回半径。 具体看看函数的说明,你给起始点参数,就能拉出橡皮筋提示你  详情 回复 发表于 2019-2-1 11:25
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2019-2-1 11:25:03 | 显示全部楼层
hanxu5760 发表于 2019-2-1 10:56
我没太明白,这段代码在获取 double 数值的同时,也可以获取点么?

我只看到了一个提示选项,没有看到 ...

你的题目就是说 可以通过输入点,来获取半径(实数),也可以通过输入数值来获取半径,怎么又问拾取点了。

你在提示下,鼠标点取点,就返回半径。

具体看看函数的说明,你给起始点参数,就能拉出橡皮筋提示你输入第二点确定长度,如果不给起始点参数,就会交互让你输入2个点。任何时候你都可以直接输入数值结束选点。

你可以在命令行试试LISP同功能的函数理解下

1、(getdist "\n输入半径或取点:")
2、(getdist (getpoint "\n第一点:") "\n第二点或输入数值:")

点评

感谢指点,已搞定~~~  详情 回复 发表于 2019-2-1 12:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2019-2-1 11:54:32 | 显示全部楼层
hanxu5760 发表于 2019-2-1 10:56
我没太明白,这段代码在获取 double 数值的同时,也可以获取点么?

我只看到了一个提示选项,没有看到 ...

GETDISTANCE有两种方法
GetDistance
Autodesk.AutoCAD.EditorInput.PromptDoubleResult
GetDistance(
Autodesk.AutoCAD.EditorInput.PromptDistanceOptions options)
Parameters
optionsInput Autodesk.AutoCAD.EditorInput.PromptDistanceOptions object. Optional parameters of the prompt.
Return TypeAutodesk.AutoCAD.EditorInput.PromptDoubleResult

Wrapper.
acedInitGet,acedGetDist.


GetDistance
Autodesk.AutoCAD.EditorInput.PromptDoubleResult
GetDistance(
System.String message)
Parameters
messageInput System.String object. Message to be displayed to the user during the prompt.
Return TypeAutodesk.AutoCAD.EditorInput.PromptDoubleResult

Wraps the following functions:
acedGetDist
Returns a PromptResult object representing the result of the prompt operation.


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

使用道具 举报

 楼主| 发表于 2019-2-1 12:49:55 | 显示全部楼层
CSharpBoy 发表于 2019-2-1 11:25
你的题目就是说 可以通过输入点,来获取半径(实数),也可以通过输入数值来获取半径,怎么又问拾取点了 ...

感谢指点,已搞定~~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-1 12:52:24 | 显示全部楼层
本帖最后由 newer 于 2019-2-1 13:09 编辑

自己编的代码,供大家参考

  1. using Autodesk.AutoCAD.Runtime;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.Geometry;
  5. using Autodesk.AutoCAD.EditorInput;

  6. namespace Code
  7. {
  8.     public class Test
  9.     {
  10.         [CommandMethod("ETN")]
  11.         public void ET_Test()
  12.         {
  13.             Database db = HostApplicationServices.WorkingDatabase;
  14.             Editor ed=Application.DocumentManager.MdiActiveDocument.Editor;

  15.             Point3d cenPt = new Point3d();
  16.             Vector3d vec = Vector3d.ZAxis;
  17.             double Radius = 0;

  18.             PromptPointOptions optCenPt = new PromptPointOptions("\n获取基点");
  19.             PromptPointResult resCenPt = ed.GetPoint(optCenPt);

  20.             if (resCenPt.Status == PromptStatus.OK)
  21.             {
  22.                 cenPt = resCenPt.Value;
  23.             }


  24.             PromptDistanceOptions optRadius = new PromptDistanceOptions("\n获取半径");
  25.             optRadius.BasePoint = cenPt;
  26.             optRadius.UseBasePoint = true;

  27.             PromptDoubleResult resRadius = ed.GetDistance(optRadius);

  28.             if (resRadius.Status == PromptStatus.OK)
  29.             {
  30.                 Radius = resRadius.Value;
  31.             }

  32.             using (Transaction trans = db.TransactionManager.StartTransaction())
  33.             {
  34.                 Circle cir = new Circle(cenPt, vec, Radius);

  35.                 db.AddToModelSpace(cir);

  36.                 trans.Commit();
  37.             }
  38.         }
  39.     }
  40. }

点评

解决了,请编辑下主题,前面加上【已解决】。  详情 回复 发表于 2019-2-1 13:09

评分

参与人数 1D豆 +5 收起 理由
newer + 5 有始有终奖!

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2019-2-1 13:09:01 | 显示全部楼层
hanxu5760 发表于 2019-2-1 12:52
自己编的代码,供大家参考

using Autodesk.AutoCAD.Runtime;

解决了,请编辑下主题,前面加上【已解决】。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 06:05 , Processed in 0.469440 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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