明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3437|回复: 10

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

[复制链接]
发表于 2005-1-9 15:08:00 | 显示全部楼层 |阅读模式
假如我刚用command的一个命令同时产生了二个物体a和b。我用。entlast可以找出b物体。那么请问要找出a物体,怎么办呢?
发表于 2005-1-9 15:11:00 | 显示全部楼层
 楼主| 发表于 2005-1-9 17:32:00 | 显示全部楼层
我看过了上面的联接。但没有合适我的,我自己想出了一个办法,那就是,先,entdel (entlast),然后再,entlast一下就行了。试了一下很实用。
发表于 2005-1-10 08:20:00 | 显示全部楼层
没有适合你的?????


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


这个不行吗?


(setq ss (ssadd))


(setq ent (entlast))


...command或别的操作


(while (setq ent (entnext ent))


         (ssadd ent ss)


)
 楼主| 发表于 2005-1-10 08:49:00 | 显示全部楼层
谢谢meflying老师,上面的好简洁,很实用,让我学了一招。你在二楼所引用的地方我去看了,好象没有这么简洁的方法吧,没找到呀。你上面的那个可以适用于所有地方了。我在三楼说的那个,我是只要求把倒数第二个找出来进行图元查询面积,而且完了后又刚好要用,undo命令,所以我用下面的那些函数来表达。最简短了,但若碰到其他情况就可以用你在四楼的那方法了,以后不用再怕此类情况了。呵呵。谢谢。 下面是我的一个实例。 (command "_.undo" "be")
(command "_.rectang" mj_pt1 mj_pt2)
(setq mj_obj (entlast))
(command "-boundary" "a" "o" "p" "i" "y" "b" "e" "" mj_pt0 "")
(command "_.erase" (entlast) "")
(command "_.area" "o" (entlast))
(command "_.erase" mj_obj "")
(command "_.erase" (entlast) "")
(command "_.undo" "e")
发表于 2005-1-10 12:02:00 | 显示全部楼层
  1. ;;获得图形中倒数第二个图元的函数
  2. (defun EntSecLast(/ e sle)
  3.    (entdel (setq e (entlast)))
  4.    (setq sle(entlast))
  5.    (entdel e)
  6.    sle
  7.   )
  8. ;;应用实例
  9. (defun c:gsl()
  10.    (entget(entseclast))
  11. )
发表于 2005-1-10 13:10:00 | 显示全部楼层
xstlf发表于2005-1-10 8:49:00谢谢meflying老师,上面的好简洁,很实用,让我学了一招。你在二楼所引用的地方我去看了,好象没有这么简洁...

看我引用的,我只给了方法,没有给代码。。。别人就知道根据方法自己写代码,你也可以自己写啊
发表于 2005-1-11 21:37:00 | 显示全部楼层
能否获得entlast 的handle 然后根据handle往回找倒数第二个entity?
发表于 2005-1-12 08:52:00 | 显示全部楼层
值得讨论,,,好象取多少个都可以啊,,,因为如果是复制、阵列、拷贝等,都是连续生成对象的,HANDLE应该是连续的,这样使用entnext的方法就不需要了。。。不过,谁能证明这种方法的可靠性?
 楼主| 发表于 2005-1-12 10:43:00 | 显示全部楼层
呵呵,八楼的主意也不错,下面是我要选的倒数第二个PL线的实例。用了几天没发现出错。若到时出错的话我来试试,八楼的方法和四楼的方法。 (defun c:jzmj (/ mj_cla mj_cmd mj_os mj_pt1 mj_pt2 mj_ang mj_dis
mj_pt0 mj_obj mj_area)
(setq mj_cla (getvar "clayer"))
(setq mj_cmd (getvar "cmdecho"))
(setvar "cmdecho" 1)
(setvar "clayer" "0")
(setq mj_os (getvar "osmode"))
(setvar "osmode" 0)
(if (/= (tblobjname "layer" "轴线") nil)
(command "-layer" "f" "轴线" "")
)
(if (/= (tblobjname "layer" "标注") nil)
(command "-layer" "f" "标注" "")
)
(setq mj_pt1 (getpoint "\n窗选要计算建筑面积的平面图第一角点:"))
(setq mj_pt2 (getcorner mj_pt1 "\n输入窗选的第二角点:"));;;窗选要查询建筑面积的平面图
(setq mj_ang (angle mj_pt1 mj_pt2)
mj_dis (distance mj_pt1 mj_pt2)
)
(setq mj_pt0 (polar mj_pt1 mj_ang (/ mj_dis 10)))
(command "_.undo" "be")
(command "_.rectang" mj_pt1 mj_pt2)
(setq mj_obj (entlast))
(command "-boundary" "a" "o" "p" "i" "y" "b" "e" "" mj_pt0 "")
(command "_.erase" (entlast) "");;;删除最后一个物体
(command "_.area" "o" (entlast));;;对倒数第二个物体求面积
(command "_.erase" mj_obj "")
(command "_.erase" (entlast) "")
(command "_.undo" "e")
(setq mj_area (getvar "area"));;;把求出的面积取出来
(command "_.undo" "1");;;u到没作辅助线之前
(if (/= (tblobjname "layer" "轴线") nil)
(command "-layer" "t" "轴线" "")
)
(if (/= (tblobjname "layer" "标注") nil)
(command "-layer" "t" "标注" "")
)
(setvar "osmode" mj_os)
(setvar "cmdecho" mj_cmd)
(setvar "clayer" mj_cla)
(princ "\n76067133@qq.com")
(princ "\n该层平面的建筑面积为A=")
(princ (rtos (/ mj_area 1000000) 2 2))
(princ "M。")
(princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-29 22:19 , Processed in 0.181082 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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