[求助] 连续移动,连续拉伸lisp求助!
平时工作中经常会改图,,然后就是把好多东西都拉伸固定距离,或者移动固定距离,故每次都得输入一遍距离,,希望有大神弄一个,或者分享一个,,先指定距离和方向,,,,然后选择框选,确定后就是移动(拉伸)指定方向固定距离!这样就不用每次都输入距离了,哈哈,,有点像pkpm里面的移动,,还有拉伸功能哦,!工作效率,在你的帮助下提高,好的想法在大神们中传递! 本帖最后由 lyqiezi 于 2014-4-23 20:52 编辑(defun c:tt(/ ss dst spt ept len1 ang1)
(setq spt (getpoint "\n复制的基点:"))
(setq ang1 (getangle spt "\n复制的方向:"))
(setq len1 (getdist "\n复制的距离:"))
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq ept (polar spt ang1 len1))
(princ "\n选择复制的物体")
(setq ss (ssget))
(while ss
(progn
(command "copy" ss "" spt ept)
(setq ss (ssget))
)
)
(setvar "osmode" os)
(prin1)
)
修改了输入的内容,有方向线了,只不过距离需要另外输入了 (defun c:tt(/ ss dst spt ept len1 ang1)
(setq spt (getpoint "\n起点:"))
(setq ept (getpoint "\n终点(方向):"))
(setq len1 (getdist "\n复制的距离<默认两点距离>:"))
(setq os (getvar "osmode"));;存储osmode原来的值
(setvar "osmode" 0);;设置osmode为0
(setq ang1 (angle spt ept))
(if (not len1)
(setq len1 (distance spt ept))
)
(setq ept (polar spt ang1 len1))
(princ "\n选择复制的物体")
(setq ss (ssget))
(while ss
(progn
(command "copy" ss "" spt ept "")
(setq ss (ssget))
)
)
(setvar "osmode" os)
(prin1)
) 不知道哪里有问题,总出未知命令的错误 可以执行呀,呀,,然后就是不直观要是点第一点和第二点可以有线就好了
我只知道在(setq len1 (getdist(getpoint) "\n复制的距离<默认两点距离>:"))这样会有条线,可是获取点坐标的时候不会, (defun c:tt(/ ss dst spt ept len1 ang1)
(setvar "osmode" 679)
(setq spt (getpoint "\n起点:"))
(setq ept (getpointspt "\n终点(方向):"))
(setq len1 (getdist(getpoint) "\n复制的距离<默认两点距离>:"))
(setq os (getvar "osmode"));;存储osmode原来的值
(setvar "osmode" 0);;设置osmode为0
(setq ang1 (angle spt ept))
(if (not len1)
(setq len1 (distance spt ept))
)
(setq ept (polar spt ang1 len1))
(princ "\n选择复制的物体")
(setq ss (ssget))
(while ss
(progn
(command "copy" ss "" spt ept "")
(setq ss (ssget))
)
)
(setvar "osmode" os)
(princ)
(princ) 变成这样就好了,没有未知命令(command "copy" ss "" spt ept ),,但是现在前面的人工交互太乱了,,不好,要是有线输入直线的那种效果就好了! lyqiezi 发表于 2014-4-23 20:50 static/image/common/back.gif
(defun c:tt(/ ss dst spt ept len1 ang1)
(setq spt (getpoint "\n复制的基点:"))
(setq ang1 (geta ...
距离不可以用两点线段求吗?有这样的函数吗? (setq ept (getpointspt "\n终点(方向):"))
看了明经的函数参考,才知道这样改就可以了
不知道你说的两点线段是什么意思,复制距离,我这里是,如果输入数值或者点取了两点,就按输入,否则就取起点、终点的距离
最终复制、拉伸的代码:
(defun c:lxc(/ ss spt ept len1 ang1)
(setq spt (getpoint "\n选择基点:"))
(setq ept (getpoint spt "\n复制的终点(方向):"))
(setq len1 (getdist "\n复制的距离<默认为起点终点的距离>:"))
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq ang1 (angle spt ept))
(if len1
(setq ept (polar spt ang1 len1))
)
(princ "\n选择要复制的对象")
(setq ss (ssget))
(while ss
(progn
(command "copy" ss "" spt ept)
(setq ss (ssget))
)
)
(setvar "osmode" os)
(prin1)
)
(defun c:lxs(/ ss spt ept len1 ang1)
(setq spt (getpoint "\n选择基点:"))
(setq ept (getpoint spt "\n拉伸的终点(方向):"))
(setq len1 (getdist "\n拉伸的距离<默认为起点终点的距离>:"))
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq ang1 (angle spt ept))
(if len1
(setq ept (polar spt ang1 len1))
)
(princ "\n选择要拉伸的对象")
(setq ss (ssget))
(while ss
(progn
(command "stretch" ss "" spt ept)
(setq ss (ssget))
)
)
(setvar "osmode" os)
(prin1)
) lyqiezi 发表于 2014-4-23 23:41
(setq ept (getpointspt "\n终点(方向):"))
看了明经的函数参考,才知道这样改就可以了
不知道你说的 ...
蛮好用的
页:
[1]