yangist 发表于 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)))

zjsru_18_505 发表于 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)))


ZZXXQQ 发表于 2015-1-23 19:50:45

;;;截交成单线
(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));放入一个表中
)
(setq ss (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))
)

sutai 发表于 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
)
本人也初学,拍者还望手下留情~

sutai 发表于 2015-1-23 20:05:15

zjsru_18_505 发表于 2015-1-23 18:12 static/image/common/back.gif
;;;图元列表->选择集
(defun lst->ss (lst / ss) (setq ss (ssadd)) (last (mapcar '(lambda (x) (ssadd x ...

佩服,抓住了要点!
帮楼主解释一下:ss变量在子函数结束后会自动销除,所以不能在子函数中声明ss变量。

yangist 发表于 2015-1-24 09:03:57

本帖最后由 yangist 于 2015-1-24 09:11 编辑

sutai 发表于 2015-1-23 20:05 static/image/common/back.gif
佩服,抓住了要点!
帮楼主解释一下:ss变量在子函数结束后会自动销除,所以不能在子函数中声明ss变量。
非常谢谢,感谢你的热心指导!~
可是为什么我画了2条多段线截交后还是多段线呢,
我想变成2条直线...

yangist 发表于 2015-1-24 09:26:35

ZZXXQQ 发表于 2015-1-23 19:50 static/image/common/back.gif


学会了 子函数的用法 谢谢
能帮忙测试下程序吗 好像还是没有效果
不知道为什么 2条多段线截交后还是没有变成2条直线

sutai 发表于 2015-1-24 10:48:01

yangist 发表于 2015-1-24 09:03 static/image/common/back.gif
非常谢谢,感谢你的热心指导!~
可是为什么我画了2条多段线截交后还是多段线呢,
我想变成2条直线...

参考一下:
QAFLAGS是个未公布的变量,用来控制LISP中使用EXPLODE炸开一个选择集的时候的表现。
      如果QAFLAGS=0,那么用LISP执行(command "explode" ss "")的时候仅仅能炸开选择集的第一个实体,其他实体炸不了.
      如果QAFLAGS=1,可以炸开选择集所有实体。
   这个变量不影响标准的EXPLODE命令的执行。

yangist 发表于 2015-1-24 13:37:09

sutai 发表于 2015-1-24 10:48 static/image/common/back.gif
参考一下:
QAFLAGS是个未公布的变量,用来控制LISP中使用EXPLODE炸开一个选择集的时候的表现。
       ...

把QAFLAGS设置为1后 还是没有炸开哦,唉
页: [1]
查看完整版本: 怎么获取标记实体之后图元的选择集,请大神帮我检查下程序,谢谢