xstlf 发表于 2005-1-9 15:08:00

[求助]如何找出最后倒数第二个图元。

假如我刚用command的一个命令同时产生了二个物体a和b。我用。entlast可以找出b物体。那么请问要找出a物体,怎么办呢?

meflying 发表于 2005-1-9 15:11:00

<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>

xstlf 发表于 2005-1-9 17:32:00

我看过了上面的联接。但没有合适我的,我自己想出了一个办法,那就是,先,entdel (entlast),然后再,entlast一下就行了。试了一下很实用。

meflying 发表于 2005-1-10 08:20:00

没有适合你的?????


“记住操作前的entlast,操作后,使用entnext找出后面所有的图元”


这个不行吗?


(setq ss (ssadd))


(setq ent (entlast))


...command或别的操作


(while (setq ent (entnext ent))


       (ssadd ent ss)


)

xstlf 发表于 2005-1-10 08:49:00

谢谢<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")

mccad 发表于 2005-1-10 12:02:00

;;获得图形中倒数第二个图元的函数
(defun EntSecLast(/ e sle)
   (entdel (setq e (entlast)))
   (setq sle(entlast))
   (entdel e)
   sle
)
;;应用实例
(defun c:gsl()
   (entget(entseclast))
)

meflying 发表于 2005-1-10 13:10:00

xstlf发表于2005-1-10 8:49:00static/image/common/back.gif谢谢meflying老师,上面的好简洁,很实用,让我学了一招。你在二楼所引用的地方我去看了,好象没有这么简洁...

<BR>看我引用的,我只给了方法,没有给代码。。。别人就知道根据方法自己写代码,你也可以自己写啊

sieben 发表于 2005-1-11 21:37:00

能否获得entlast 的handle 然后根据handle往回找倒数第二个entity?

meflying 发表于 2005-1-12 08:52:00

值得讨论,,,好象取多少个都可以啊,,,因为如果是复制、阵列、拷贝等,都是连续生成对象的,HANDLE应该是连续的,这样使用entnext的方法就不需要了。。。不过,谁能证明这种方法的可靠性?

xstlf 发表于 2005-1-12 10:43:00

呵呵,八楼的主意也不错,下面是我要选的倒数第二个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
查看完整版本: [求助]如何找出最后倒数第二个图元。