请教如何获取夹点编辑的当前图元?
本帖最后由 cheng5276 于 2012-4-11 13:24 编辑如上图:先框选了一堆对象,然后夹点拖动了其中的某个,如何准确获得该图元?(ssget "i")(ssget "p")只能取这所有的。
目前我的思路
1、(setq ss0 (ssget "i"))
1、GRREAD取临时点PT0 (因PT0几乎不会在该图元上,所以无法通过NENTSELP去取图元)
2、由PT0构建一个范围框 pt1 pt2,(这个很难界定,没有统一性,也不能通过 (getvar "pickbox") 去取因为PT0的偏移量往往是大于这 个值的)
3、(setq ss1 (ssget "c" pt1 pt2))
4、求SS0 SS1 的交集图元,如演示的比较简单的图面,应该能够取到这个对象,但是如果图元叠加、交叉较多的话,肯定就不准确了。
拜请各位大侠指点,有无比较简单的函数或变量去取?我实在是没查到,也没搜到。
本帖最后由 danxingpen 于 2012-4-18 20:31 编辑
程序运行后,在每一次拉伸命令后,读取变量GRIP_STRETCH_SEL(我的程序定义的变量,不是系统变量),这个就是拉伸刚操作的图元的选择集,,,,
不知道你要读取这个做什么? 判断图元类别用IF就行,
点的话用组码可以,给你提供我以前弄的一些组码的程序句: (defun c:kk()
(setq name (car (entsel)));提取图名
(setq ent (entget name));提取图形属性串列
(entmod (subst (cons 8 "0") (assoc 8 ent) ent));替换图层例子 ,ent为图形属性串列,
cone为建新表,subst为替换,利用entmod修改成指定的0层
(entmod (subst (cons 62 2) (assoc 62 ent) ent))) ;
(entmod (subst(cons 10 (getpoint"\n指定新起点")) (assoc 10 ent) ent));改起点
(entmod (subst (cons 40 100) (assoc 40 ent) ent)));改成半径100的圆
(entmod (subst(cons 10 (getpoint"\n指定新圆心")) (assoc 10 ent) ent)));改圆心
(entmod (subst(cons 10 (getpoint (cdr (assoc 10 ent))"\n指定新圆心")) (assoc 10 ent
) ent)));拉一条线改圆心(美观)
(entmod (subst (cons 1 "开心CAD外挂") (assoc 1 ent) ent)));替换文字 谢谢开心的回复!
不过你理解错我的意思了。
我需要在命令反应器 当执行"GRIP_STRETCH"命令时,才判断当前处于夹点编辑状态的图元对象。
如果我事先用的是单选,自然就是很简单,但问题是,当我事先(CAD框选)了狠多图元的情况下,如何能够获得其中的我正在执行夹点拖动的图元?
请高手指点啊 本帖最后由 danxingpen 于 2012-4-17 22:25 编辑
在反应器回调函数里面
(setq selobj(vla-get-ActiveSelectionSet (vla-get-activedocument (vlax-get-acad-object))))
呵呵,好像不对,如果你是要夹点编辑的的话,可能还是要对象反应器而不是命令反应器1
说明一下你的具体需求?感觉没必要弄反应器之类的,建议调整一下程序的思路 在反应器回调函数中,对当前选择集进行判断是否有只读对象,这个只读对象就是拉伸的对象. 对,就是这个东东,请教您是怎么做到的?能提供核心源码不? 再次感谢 danxingpen大侠的指点