[求助]如何找出最后倒数第二个图元。
假如我刚用command的一个命令同时产生了二个物体a和b。我用。entlast可以找出b物体。那么请问要找出a物体,怎么办呢? <A href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=31256" target="_blank" >http://bbs.mjtd.com/forum.php?mod=viewthread&tid=31256</A> 我看过了上面的联接。但没有合适我的,我自己想出了一个办法,那就是,先,entdel (entlast),然后再,entlast一下就行了。试了一下很实用。 没有适合你的?????“记住操作前的entlast,操作后,使用entnext找出后面所有的图元”
这个不行吗?
(setq ss (ssadd))
(setq ent (entlast))
...command或别的操作
(while (setq ent (entnext ent))
(ssadd ent ss)
) 谢谢<A name=4596><FONT color=#990000><B>meflying</B></FONT></A>老师,上面的好简洁,很实用,让我学了一招。你在二楼所引用的地方我去看了,好象没有这么简洁的方法吧,没找到呀。你上面的那个可以适用于所有地方了。我在三楼说的那个,我是只要求把倒数第二个找出来进行图元查询面积,而且完了后又刚好要用,undo命令,所以我用下面的那些函数来表达。最简短了,但若碰到其他情况就可以用你在四楼的那方法了,以后不用再怕此类情况了。呵呵。谢谢。
下面是我的一个实例。
(command "_.undo" "be")<BR> (command "_.rectang" mj_pt1 mj_pt2)<BR> (setq mj_obj (entlast))<BR> (command "-boundary" "a" "o" "p" "i" "y" "b" "e" "" mj_pt0 "")<BR> (command "_.erase" (entlast) "")<BR> (command "_.area" "o" (entlast))<BR> (command "_.erase" mj_obj "")<BR> (command "_.erase" (entlast) "")<BR> (command "_.undo" "e") ;;获得图形中倒数第二个图元的函数
(defun EntSecLast(/ e sle)
(entdel (setq e (entlast)))
(setq sle(entlast))
(entdel e)
sle
)
;;应用实例
(defun c:gsl()
(entget(entseclast))
) xstlf发表于2005-1-10 8:49:00static/image/common/back.gif谢谢meflying老师,上面的好简洁,很实用,让我学了一招。你在二楼所引用的地方我去看了,好象没有这么简洁...
<BR>看我引用的,我只给了方法,没有给代码。。。别人就知道根据方法自己写代码,你也可以自己写啊 能否获得entlast 的handle 然后根据handle往回找倒数第二个entity? 值得讨论,,,好象取多少个都可以啊,,,因为如果是复制、阵列、拷贝等,都是连续生成对象的,HANDLE应该是连续的,这样使用entnext的方法就不需要了。。。不过,谁能证明这种方法的可靠性? 呵呵,八楼的主意也不错,下面是我要选的倒数第二个PL线的实例。用了几天没发现出错。若到时出错的话我来试试,八楼的方法和四楼的方法。
(defun c:jzmj (/ mj_cla mj_cmd mj_os mj_pt1 mj_pt2 mj_ang mj_dis <BR> mj_pt0 mj_obj mj_area)<BR> (setq mj_cla (getvar "clayer"))<BR> (setq mj_cmd (getvar "cmdecho"))<BR> (setvar "cmdecho" 1)<BR> (setvar "clayer" "0")<BR> (setq mj_os (getvar "osmode"))<BR> (setvar "osmode" 0)<BR> (if (/= (tblobjname "layer" "轴线") nil)<BR> (command "-layer" "f" "轴线" "")<BR> )<BR> (if (/= (tblobjname "layer" "标注") nil)<BR> (command "-layer" "f" "标注" "")<BR> )<BR> (setq mj_pt1 (getpoint "\n窗选要计算建筑面积的平面图第一角点:"))<BR> (setq mj_pt2 (getcorner mj_pt1 "\n输入窗选的第二角点:"));;;窗选要查询建筑面积的平面图<BR> (setq mj_ang (angle mj_pt1 mj_pt2)<BR> mj_dis (distance mj_pt1 mj_pt2)<BR> )<BR> (setq mj_pt0 (polar mj_pt1 mj_ang (/ mj_dis 10)))<BR> (command "_.undo" "be")<BR> (command "_.rectang" mj_pt1 mj_pt2)<BR> (setq mj_obj (entlast))<BR> (command "-boundary" "a" "o" "p" "i" "y" "b" "e" "" mj_pt0 "")<BR> (command "_.erase" (entlast) "");;;删除最后一个物体<BR> (command "_.area" "o" (entlast));;;对倒数第二个物体求面积<BR> (command "_.erase" mj_obj "")<BR> (command "_.erase" (entlast) "") <BR> (command "_.undo" "e")<BR> (setq mj_area (getvar "area"));;;把求出的面积取出来<BR> (command "_.undo" "1");;;u到没作辅助线之前<BR> (if (/= (tblobjname "layer" "轴线") nil)<BR> (command "-layer" "t" "轴线" "")<BR> )<BR> (if (/= (tblobjname "layer" "标注") nil)<BR> (command "-layer" "t" "标注" "")<BR> )<BR> (setvar "osmode" mj_os)<BR> (setvar "cmdecho" mj_cmd)<BR> (setvar "clayer" mj_cla)<BR> (princ "\n76067133@qq.com") <BR> (princ "\n该层平面的建筑面积为A=")<BR> (princ (rtos (/ mj_area 1000000) 2 2))<BR> (princ "M。")<BR> (princ)<BR> )
页:
[1]
2