找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 922|回复: 10

[求助] 如何将当前选中的图元转换为(entlast)可直接获取的图元

[复制链接]

已领礼包: 4个

财富等级: 恭喜发财

发表于 2021-1-17 21:04:25 | 显示全部楼层 |阅读模式

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

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

×
因为vla-sendcommand只支持点和(entlast)变量,所以想将循环中的图元转换为(entlast)可选取的对象,请问该如何处理?
  1. (defun c:test ()
  2.   (vl-load-com)
  3.   (setvar "filedia" 0)
  4.   (setvar "CMDECHO" 0)
  5.   (setq ss (ssget))
  6.   (setq i 0)
  7.   (while (setq e (ssname ss i))

  8.     ;这里如何写?????
  9.     (entlast);此处的(entlast)想选择当前循环下的e图元
  10.     ;针对(entlast)选中的e的其他操作
  11.   (setq i (1+ i))
  12.   )
  13.   (setvar "filedia" 1)
  14.   (setvar "CMDECHO" 1)
  15. )

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

已领礼包: 19个

财富等级: 恭喜发财

发表于 2021-1-17 22:04:38 | 显示全部楼层
概念不清,
(entlast) 返回的是实体名, 就是你那个 e , 他们类型是一样的
你怎么用 (entlast) , 就怎么用 e

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

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

 楼主| 发表于 2021-1-17 22:10:52 | 显示全部楼层
Lisphk 发表于 2021-1-17 22:04
概念不清,
(entlast) 返回的是实体名, 就是你那个 e , 他们类型是一样的
你怎么用 (entlast) , 就怎么 ...

嗯嗯,还是上一个帖子的问题,关键是我测试发现vla-sendcommand他不支持调用 e,支持调用(entlast),没办法才这么处理的,求L老师帮忙看看呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

 楼主| 发表于 2021-1-17 22:14:31 | 显示全部楼层
Lisphk 发表于 2021-1-17 22:04
概念不清,
(entlast) 返回的是实体名, 就是你那个 e , 他们类型是一样的
你怎么用 (entlast) , 就怎么 ...

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2021-1-17 22:28:54 | 显示全部楼层
本帖最后由 Lisphk 于 2021-1-17 22:30 编辑

1、你把 cmdecho 设置成 1

把代码里面的 (vla-sendcommand *doc "tian 211100 \n !obj \n")) 改成 (vla-sendcommand *doc "tian\n211100\n!e\n"))按我上面的写,空格用 \n替换

然后把命令行的输出截取下屏幕贴上来

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

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

 楼主| 发表于 2021-1-17 22:53:25 | 显示全部楼层
Lisphk 发表于 2021-1-17 22:28
1、你把 cmdecho 设置成 1

把代码里面的 (vla-sendcommand *doc "tian 211100 \n !obj \n")) 改成 (vl ...

当前代码:
  1. (defun c:test ()
  2.   (vl-load-com)
  3.   (setvar "filedia" 0)
  4.   (setvar "CMDECHO" 1)
  5.   (setq ss (ssget))
  6.   (setq i 0)
  7.   (while (setq e (ssname ss i))
  8.     (setq tcname (cdr (assoc 8 (entget e))));获取图元的图层名称
  9.     (setq *doc (vla-get-activedocument(vlax-get-acad-object)))
  10.       (cond
  11.         ((= tcname "水田")(vla-sendcommand *doc "tian\n211100\n!e\n"))
  12.   ((= tcname "旱地")(vla-sendcommand *doc "tian\n211200\n!e\n"))
  13.       )
  14.   (setq i (1+ i))
  15.   )
  16.   (setvar "filedia" 1)
  17.   (setvar "CMDECHO" 1)
  18. )


执行后命令行显示:
选择对象: 指定对角点: 找到 5 个
选择对象:
1
命令:
命令: tian
输入区域编码:211100
输入线上编码:!e
nil
请选择填充方式:(1)区域填充(2)线上分布 <1>tian
需要整数值.
请选择填充方式:(1)区域填充(2)线上分布 <1>211100
需要 -32768 和 32767 之间的整数.
请选择填充方式:(1)区域填充(2)线上分布 <1>!e
nil
需要整数值.
请选择填充方式:(1)区域填充(2)线上分布 <1>tian
需要整数值.
请选择填充方式:(1)区域填充(2)线上分布 <1>211200
需要 -32768 和 32767 之间的整数.
请选择填充方式:(1)区域填充(2)线上分布 <1>!e
nil
需要整数值.
请选择填充方式:(1)区域填充(2)线上分布 <1>tian
需要整数值.
请选择填充方式:(1)区域填充(2)线上分布 <1>211200
需要 -32768 和 32767 之间的整数.
请选择填充方式:(1)区域填充(2)线上分布 <1>!e
nil
需要整数值.
请选择填充方式:(1)区域填充(2)线上分布 <1>tian
需要整数值.
请选择填充方式:(1)区域填充(2)线上分布 <1>211200
需要 -32768 和 32767 之间的整数.
请选择填充方式:(1)区域填充(2)线上分布 <1>!e
nil
需要整数值.
请选择填充方式:(1)区域填充(2)线上分布 <1>*取消*







(command "tian")  执行如下:
命令: (command "tian") tian
输入区域编码:nil




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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2021-1-17 23:32:28 | 显示全部楼层

那就改成:
(command "tian" "211100" 1 e "")

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

使用道具 举报

发表于 2021-1-17 23:44:19 | 显示全部楼层
有个比较笨的办法应该可以试试 ,因为木有个什么tian的玩意,无法帮你测试,你自己试试吧
就是先删除 然后重建一个对象用(entlast)
就是感觉挺2的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2021-1-17 23:48:49 | 显示全部楼层
(defun c:tt ()
  (setq ss (ssget))
  (setq i 0)
  (while (setq e (ssname ss i))
    (setq edxf(entget e))
        (entdel e)
        (entmake edxf)
    (setq *doc (vla-get-activedocument(vlax-get-acad-object)))
    (vla-sendcommand *doc "Erase\r(entlast)\r\r")
    (setq i (1+ i))

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

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

 楼主| 发表于 2021-1-19 17:18:57 | 显示全部楼层
muwind 发表于 2021-1-17 23:48
(defun c:tt ()
  (setq ss (ssget))
  (setq i 0)

谢谢啦,虽然2,但是实用

点评

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

使用道具 举报

发表于 2021-1-19 21:50:19 | 显示全部楼层
Five丨遗忘 发表于 2021-1-19 17:18
谢谢啦,虽然2,但是实用

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 02:44 , Processed in 0.185334 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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