明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1070|回复: 8

[提问] 怎么获取标记实体之后图元的选择集,请大神帮我检查下程序,谢谢

[复制链接]
发表于 2015-1-23 13:15:14 | 显示全部楼层 |阅读模式
;;;截交成单线
(defun c:A ()
  (setq fltrad (getvar "filletrad"))
  (setvar "filletrad" 0)
  (setq lastent(entlast))  ;阵列执行之前数据库最后一个实体作为标记
  (command "fillet" pause pause )
  (while(setq lastent (entnext lastent)) ;依次查找标记之后的实体 直到最后
           (setq lst(cons lastent lst))  ;放入一个表中
  )
  (lst->ss lst)
  (command "explode" ss "")
  (setvar "filletrad" fltrad)
  (princ)
)

;;;图元列表->选择集
(defun lst->ss (lst / ss) (setq ss (ssadd)) (last (mapcar '(lambda (x) (ssadd x ss)) lst)))

发表于 2015-1-23 18:12:26 | 显示全部楼层
本帖最后由 zjsru_18_505 于 2015-1-23 18:16 编辑

;;;图元列表->选择集
(defun lst->ss (lst / ss) (setq ss (ssadd)) (last (mapcar '(lambda (x) (ssadd x ss)) lst)))

改成:

;;;图元列表->选择集
(defun lst->ss (lst ) (setq ss (ssadd)) (last (mapcar '(lambda (x) (ssadd x ss)) lst)))


发表于 2015-1-23 19:50:45 | 显示全部楼层
  1. ;;;截交成单线
  2. (defun c:A ()
  3.   (setq fltrad (getvar "filletrad"))
  4.   (setvar "filletrad" 0)
  5.   (setq lastent(entlast))  ;阵列执行之前数据库最后一个实体作为标记
  6.   (command "fillet" pause pause )
  7.   (while(setq lastent (entnext lastent)) ;依次查找标记之后的实体 直到最后
  8.            (setq lst(cons lastent lst))  ;放入一个表中
  9.   )
  10.   (setq ss (lst->ss lst))
  11.   (command "explode" ss "")
  12.   (setvar "filletrad" fltrad)
  13.   (princ)
  14. )
  15. ;;;图元列表->选择集
  16. (defun lst->ss (lst / ss)
  17. (setq ss (ssadd))
  18. (last (mapcar '(lambda (x) (ssadd x ss)) lst))
  19. )
发表于 2015-1-23 19:58:06 | 显示全部楼层
(lst->ss lst)应该要(setq ss (lst->ss lst)), 另外不懂为什么要列表后再获取,我是直接取选择集
(setq ss (z_getafter en))
;;;获取指定图元后全部图元的选择集, 包括指定图元
(defun z_getafter (en / sstmp)
  (setq sstmp (ssadd en))
  (while (setq en (entnext en))
    (ssadd en sstmp))
  sstmp
)
本人也初学,拍者还望手下留情~
发表于 2015-1-23 20:05:15 | 显示全部楼层
zjsru_18_505 发表于 2015-1-23 18:12
;;;图元列表->选择集
(defun lst->ss (lst / ss) (setq ss (ssadd)) (last (mapcar '(lambda (x) (ssadd x ...

佩服,抓住了要点!
帮楼主解释一下:ss变量在子函数结束后会自动销除,所以不能在子函数中声明ss变量。
 楼主| 发表于 2015-1-24 09:03:57 | 显示全部楼层
本帖最后由 yangist 于 2015-1-24 09:11 编辑
sutai 发表于 2015-1-23 20:05
佩服,抓住了要点!
帮楼主解释一下:ss变量在子函数结束后会自动销除,所以不能在子函数中声明ss变量。

非常谢谢,感谢你的热心指导!~
可是为什么我画了2条多段线截交后还是多段线呢,
我想变成2条直线...
 楼主| 发表于 2015-1-24 09:26:35 | 显示全部楼层
ZZXXQQ 发表于 2015-1-23 19:50

学会了 子函数的用法 谢谢
能帮忙测试下程序吗 好像还是没有效果
不知道为什么 2条多段线截交后还是没有变成2条直线
发表于 2015-1-24 10:48:01 | 显示全部楼层
yangist 发表于 2015-1-24 09:03
非常谢谢,感谢你的热心指导!~
可是为什么我画了2条多段线截交后还是多段线呢,
我想变成2条直线...

参考一下:
QAFLAGS是个未公布的变量,用来控制LISP中使用EXPLODE炸开一个选择集的时候的表现。
      如果QAFLAGS=0,那么用LISP执行(command "explode" ss "")的时候仅仅能炸开选择集的第一个实体,其他实体炸不了.
      如果QAFLAGS=1,可以炸开选择集所有实体。
   这个变量不影响标准的EXPLODE命令的执行。
 楼主| 发表于 2015-1-24 13:37:09 | 显示全部楼层
sutai 发表于 2015-1-24 10:48
参考一下:
QAFLAGS是个未公布的变量,用来控制LISP中使用EXPLODE炸开一个选择集的时候的表现。
       ...

把QAFLAGS设置为1后 还是没有炸开哦,唉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-23 13:17 , Processed in 0.209046 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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