wxa123wl 发表于 2014-4-23 15:21:40

[求助] 连续移动,连续拉伸lisp求助!

平时工作中经常会改图,,然后就是把好多东西都拉伸固定距离,或者移动固定距离,故每次都得输入一遍距离,,希望有大神弄一个,或者分享一个,,先指定距离和方向,,,,然后选择框选,确定后就是移动(拉伸)指定方向固定距离!这样就不用每次都输入距离了,哈哈,,有点像pkpm里面的移动,,还有拉伸功能哦,!工作效率,在你的帮助下提高,好的想法在大神们中传递!

lyqiezi 发表于 2014-4-23 15:21:41

本帖最后由 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)
)

修改了输入的内容,有方向线了,只不过距离需要另外输入了

lyqiezi 发表于 2014-4-23 18:43:18

(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)
)

lyqiezi 发表于 2014-4-23 18:44:15

不知道哪里有问题,总出未知命令的错误

wxa123wl 发表于 2014-4-23 19:30:27

可以执行呀,呀,,然后就是不直观要是点第一点和第二点可以有线就好了
我只知道在(setq len1 (getdist(getpoint) "\n复制的距离<默认两点距离>:"))这样会有条线,可是获取点坐标的时候不会,

wxa123wl 发表于 2014-4-23 19:34:09

(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)

wxa123wl 发表于 2014-4-23 19:38:20

    变成这样就好了,没有未知命令(command "copy" ss "" spt ept ),,但是现在前面的人工交互太乱了,,不好,要是有线输入直线的那种效果就好了!

wxa123wl 发表于 2014-4-23 22:57:17

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 ...

距离不可以用两点线段求吗?有这样的函数吗?

lyqiezi 发表于 2014-4-23 23:41:31

(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)
)

断箭 发表于 2018-4-23 14:14:31

lyqiezi 发表于 2014-4-23 23:41
(setq ept (getpointspt "\n终点(方向):"))
看了明经的函数参考,才知道这样改就可以了
不知道你说的 ...

蛮好用的
页: [1]
查看完整版本: [求助] 连续移动,连续拉伸lisp求助!