明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2293|回复: 9

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

[复制链接]
发表于 2014-4-23 15:21 | 显示全部楼层 |阅读模式
1明经币
平时工作中经常会改图,,然后就是把好多东西都拉伸固定距离,或者移动固定距离,故每次都得输入一遍距离,,希望有大神弄一个,或者分享一个,,先指定距离和方向,,,,然后选择框选,确定后就是移动(拉伸)指定方向固定距离!这样就不用每次都输入距离了,哈哈,,有点像pkpm里面的移动,,还有拉伸功能哦,!工作效率,在你的帮助下提高,好的想法在大神们中传递![em0]

最佳答案

查看完整内容

(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)) ...
发表于 2014-4-23 15:21 | 显示全部楼层
本帖最后由 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)
)

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

使用道具 举报

发表于 2014-4-23 18:43 | 显示全部楼层
(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)
)
回复

使用道具 举报

发表于 2014-4-23 18:44 | 显示全部楼层
不知道哪里有问题,总出未知命令的错误
回复

使用道具 举报

 楼主| 发表于 2014-4-23 19:30 | 显示全部楼层
可以执行呀,呀,,然后就是不直观要是点第一点和第二点可以有线就好了
我只知道在(setq len1 (getdist(getpoint) "\n复制的距离<默认两点距离>:"))这样会有条线,可是获取点坐标的时候不会,
回复

使用道具 举报

 楼主| 发表于 2014-4-23 19:34 | 显示全部楼层
(defun c:tt(/ ss dst spt ept len1 ang1)
(setvar "osmode" 679)
  (setq spt (getpoint "\n起点:"))
  (setq ept (getpoint  spt "\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)
回复

使用道具 举报

 楼主| 发表于 2014-4-23 19:38 | 显示全部楼层
    变成这样就好了,没有未知命令  (command "copy" ss "" spt ept ),,但是现在前面的人工交互太乱了,,不好,要是有线输入直线的那种效果就好了!
回复

使用道具 举报

 楼主| 发表于 2014-4-23 22:57 | 显示全部楼层
lyqiezi 发表于 2014-4-23 20:50
(defun c:tt(/ ss dst spt ept len1 ang1)
  (setq spt (getpoint "\n复制的基点:"))
  (setq ang1 (geta ...

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

使用道具 举报

发表于 2014-4-23 23:41 | 显示全部楼层
(setq ept (getpoint  spt "\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 | 显示全部楼层
lyqiezi 发表于 2014-4-23 23:41
(setq ept (getpoint  spt "\n终点(方向):"))
看了明经的函数参考,才知道这样改就可以了
不知道你说的 ...

蛮好用的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 18:14 , Processed in 0.637659 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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