linkai2004 发表于 2011-3-4 10:05:30

求助一个两头加长直线的lsp。详见帖子内容。

有时候不规则的地下室轴线会有很多小角度的斜交,肉眼看起来会是感觉一条直线的,我希望有个命令能够框选所选的轴线,使他能两端都加长如1000mm,已经知道cad的 len的命令。 但是他只能一端一端的点,效率太低,

希望那位高手能在len的命令上再优化一下,做成能够框选直线的。谢谢大家。

yshf 发表于 2011-3-5 00:03:48


(defun c:test()
   (setq cm (getvar "cmdecho"))
   (setvar "cmdecho" 0)
   (command "_undo" "be")
   (if (= (getvar "userr1") 0) (setvar "userr1" 1000))
   (if (= (setq jcjl (getreal (strcat "\n加长距离<" (rtos (getvar "userr1")) ">:"))) nil)
       (setq jcjl (getvar "userr1"))
       (setvar "userr1" jcjl)
   )
   (while (setq p1 (getpoint "\n左上角点<回车结束程序>:"))
       (if (setq p2 (getcorner p1 "\n右下角点:"))
         (if (setq ssa (ssget "w" p1 p2 '((0 . "LINE"))))
               (progn
                   (setq i 0n (sslength ssa))
                   (repeat n
                     (setq ent (ssname ssa i)
                             i   (1+ i)
                             dxf (entget ent)
                             pt1 (cdr (assoc 10 dxf))
                             pt2 (cdr (assoc 11 dxf))
                     )
                     (command "_lengthen" "de" jcjl (list ent pt1) (list ent pt2) "")
                   )
             )
          )
       )
   )
   (command "_undo" "e")
   (setvar "cmdecho" cm)
   (princ)
)

zxjing 发表于 2011-3-5 00:36:25

本帖最后由 zxjing 于 2011-3-5 09:57 编辑

试试吧,本人lisp超菜
(defun c:tt()
(vl-load-com)
(setvar "osmode" 0)
    (setq ss (ssget))
(setq chang (getreal "\n请输入增量"))
(setq n 0)
(repeat (sslength ss)
    (setq name (ssname ss n))
(setq pta (vlax-curve-getStartPoint name))
(setq ptb (vlax-curve-getendPoint name))
    (command "lengthen" "de" chang (list name pta)"")
    (command "lengthen" "de" chang (list name ptb)"")
      (setq n (1+ n))
)
)





稍微修改了一下楼上的帖子,使之通杀 line 与pline
(defun c:tt()
   (setq cm (getvar "cmdecho"))
   (setvar "cmdecho" 0)
   (command "_undo" "be")
   (if (= (getvar "userr1") 0) (setvar "userr1" 1000))
   (if (= (setq jcjl (getreal (strcat "\n加长距离<" (rtos (getvar "userr1")) ">:"))) nil)
       (setq jcjl (getvar "userr1"))
       (setvar "userr1" jcjl)
   )
   (while (setq p1 (getpoint "\n左上角点<回车结束程序>:"))
       (if (setq p2 (getcorner p1 "\n右下角点:"))
         (if (setq ssa (ssget "w" p1 p2 '((0 . "*LINE"))))
               (progn
                   (setq i 0n (sslength ssa))
                   (repeat n
                     (setq ent (ssname ssa i)i   (1+ i))
                     (setq pt1 (vlax-curve-getStartPoint ent))
                     (setq pt2 (vlax-curve-getendPoint ent))
                     (command "_lengthen" "de" jcjl (list ent pt1) (list ent pt2) "")
                   )
               )
          )
       )
   )
   (command "_undo" "e")
   (setvar "cmdecho" cm)
   (princ)
)

461045462 发表于 2011-3-6 10:55:42

回复 zxjing 的帖子

谢谢楼主的分享
收藏,学习了新东西

669423907 发表于 2011-3-27 16:57:56

回复 zxjing 的帖子

如果能用鼠标所点取的两点来代替输入值那就更完美了!

zxjing 发表于 2011-4-19 23:20:59

回复 669423907 的帖子

不太清楚楼上具体啥意思?
大概是(getdist "\n请输入增量")

669423907 发表于 2011-4-20 22:55:23

回复 zxjing 的帖子

用鼠标左键单击的第一点与第二点的距离代替输入(也可输入)

xyp1964 发表于 2011-4-20 23:43:12

;; e派工具箱之:qxss

页: [1]
查看完整版本: 求助一个两头加长直线的lsp。详见帖子内容。