在给等直线标注时,往往有很多很密的等值线要标注,一般方法是例用多重复制先把标注用同一个数复制,再一个一个改,这样不但麻烦,还经常容易出错. 我编了一个小程序可以让它按某一个间距递增,还是比较麻烦.能不能划一条和等值线相交的线,自动捕捉交点,使每一个标注都在交点上. 递增的程序如下 (defun c:mcopy() ;多重复制加数 (setq di(getint"输入间距:")) (setq ss(entsel"选择要排列的数"));选择物体,提取联合属性列表 (setq en(car ss)) (setq endata(entget en)) (setq oldh(cdr(assoc 40 endata)));提取字高 (setq olda(cdr(assoc 50 endata)));提取角度 (setq oldtt(atof(angtos olda)));把弧度变为度 (setq oldt(cdr(assoc 1 endata)));提取标注, (setq oldti(atoi oldt));标注负值 (setq newt(+ oldti di)) (setq pa(getpoint "\n标注位置:")) (command "text" pa oldh oldtt newt) (while ens (setq ens(entlast)) (setq entdata(entget ens)) (setq oldct(cdr(assoc 10 entdata))) (setq oldht(cdr(assoc 40 entdata))) (setq oldat(cdr(assoc 50 entdata))) (setq oldatt(atof(angtos oldat))) (setq oldtt(cdr(assoc 1 entdata))) (setq oldtit(atoi oldtt)) (setq newtt(+ oldtit di)) (setq pat(getpoint)) (command "text" pat oldht oldatt newtt) ) ) 我试着用"osnap"函数,没法给方向,还往往捕捉同一个点. (defun c:osnn(/ new a oldh) (setq ss(entsel)) (setq en(car ss)) (setq endata(entget en)) (setq oldh(cdr(assoc 10 endata))) (setq new(osnap oldh "_int")) (command "text" new 20 0 2000) (setq a(osnap new "_int")) (command "text" a 20 0 3000) ) 我把"aperture"设为50,因为太小了捕捉不到.可"3000","2000"却写在同一个点上.也就是(setq a(osnap new "_int")) 捕捉到的交点就是他本身,这个问题没法解决,请各位大虾给帮帮忙.怎么完成自动捕捉,是不是还有其他的函数 |