明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3566|回复: 24

线段批量缩短或伸长,沿上次改进,望指导。

  [复制链接]
发表于 2012-4-3 09:55 | 显示全部楼层 |阅读模式
沿上次继续加强改进。


(defun c:lll()
(setvar "osmode" 0)
(setq w (getstring "\n请选择项[缩短(SD)/总长(ZC)/伸长(SC)]: "))
(if (or (= w "zc") (= w "ZC"))
(progn
(setq d (getreal "\n输入总长度: "))
(setq ss(ssget '((0 . "line"))))
(setq len(sslength ss))
(setq i -1)
(repeat len
  (setq i (1+ i))
(setq en1(ssname ss i))
(setq e1 (entget en1))
(setq pt1 (assoc 10 e1))
(setq ptt1 (assoc 11 e1))
(setq po1 (cdr pt1)
       px1 (car po1)
       py1 (cadr po1)
       z0 (list px1 py1))
(setq poo1 (cdr ptt1)
       pxx1 (car poo1)
       pyy1 (cadr poo1)
       z2 (list pxx1 pyy1))
(setq zx1 (/ (+ px1 pxx1) 2.0)
       zy1 (/ (+ py1 pyy1) 2.0)
       z1 (list zx1 zy1))
(setq jd (angle z0 z2))
(setq b0 (polar z1 (+ pi jd) (/ d 2.0)))
(setq bn (polar z1 jd (/ d  2.0)))
(setq e1 (subst (cons 10 b0) (assoc 10 e1) e1))
(setq e1 (subst (cons 11 bn) (assoc 11 e1) e1))
(entmod e1)
)))

(if (or (= w "sc") (= w "SC"))
(progn
(setq d (getreal "\n输入每边伸长值: "))
(setq ss(ssget '((0 . "line"))))
(setq len(sslength ss))
(setq i -1)
(repeat len
  (setq i (1+ i))
(setq en1(ssname ss i))
(setq e1 (entget en1))
(setq pt1 (assoc 10 e1))
(setq ptt1 (assoc 11 e1))
(setq po1 (cdr pt1)
       px1 (car po1)
       py1 (cadr po1)
       z0 (list px1 py1))
(setq poo1 (cdr ptt1)
       pxx1 (car poo1)
       pyy1 (cadr poo1)
       z2 (list pxx1 pyy1))
(setq zx1 (/ (+ px1 pxx1) 2.0)
       zy1 (/ (+ py1 pyy1) 2.0)
       z1 (list zx1 zy1))
(setq jd (angle z0 z2))
(setq b0 (polar z0 (+ pi jd) d))
(setq bn (polar z2 jd d ))
(setq e1 (subst (cons 10 b0) (assoc 10 e1) e1))
(setq e1 (subst (cons 11 bn) (assoc 11 e1) e1))
(entmod e1)
)))
  
(if (or (= w "sd") (= w "SD"))
(progn
(setq d (getreal "\n输入每边缩短值: "))
(setq ss(ssget '((0 . "line"))))
(setq len(sslength ss))
(setq i -1)
(repeat len
  (setq i (1+ i))
(setq en1(ssname ss i))
(setq e1 (entget en1))
(setq pt1 (assoc 10 e1))
(setq ptt1 (assoc 11 e1))
(setq po1 (cdr pt1)
       px1 (car po1)
       py1 (cadr po1)
       z0 (list px1 py1))
(setq poo1 (cdr ptt1)
       pxx1 (car poo1)
       pyy1 (cadr poo1)
       z2 (list pxx1 pyy1))
(setq dd (distance po1 poo1))
(if (> d (/ dd 2.0)) (exit))
(setq zx1 (/ (+ px1 pxx1) 2.0)
       zy1 (/ (+ py1 pyy1) 2.0)
       z1 (list zx1 zy1))
(setq jd (angle z0 z2))
(setq b0 (polar z0 jd d))
(setq bn (polar z2 (+ pi jd) d ))
(setq e1 (subst (cons 10 b0) (assoc 10 e1) e1))
(setq e1 (subst (cons 11 bn) (assoc 11 e1) e1))
(entmod e1)
)))
(setvar "osmode" 3)
(princ)
)
发表于 2012-4-3 23:26 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2020-11-18 09:32 编辑

  1. (defun c:lll ()
  2. (setvar "CMDECHO" 0)
  3. (command "_.UNDO" "BE")
  4. (setq w (strcase(getstring "\n请选择项[缩短(SD)/总长(ZC)/伸长(SC)]: ") nil))
  5. (cond
  6.   ((= w "ZC")
  7.    (setq d (/ (getdist "\n输入总长度: ") 2))
  8.    (setq ss(ssget '((0 . "LINE"))))
  9.    (setq i -1)
  10.    (repeat (sslength ss)
  11.     (setq en (ssname ss (setq i (1+ i))) e1 (entget en))
  12.     (setq pt1 (cdr(assoc 10 e1))
  13.           pt2 (cdr(assoc 11 e1)))
  14.     (setq ds (- d (/ (distance pt1 pt2) 2)))
  15.     (command "_.LENGTHEN" "DE" ds (list en pt1) (list en pt2) "")
  16.    )
  17.   )
  18.   ((= w "SC")
  19.    (setq d (getdist "\n输入每边伸长值: "))
  20.    (setq ss (ssget '((0 . "LINE"))))
  21.    (setq i -1)
  22.    (repeat (sslength ss)
  23.     (setq en (ssname ss (setq i (1+ i))) e1 (entget en))
  24.     (setq pt1 (cdr(assoc 10 e1))
  25.           pt2 (cdr(assoc 11 e1)))
  26.     (command "_.LENGTHEN" "DE" d (list en pt1) (list en pt2) "")
  27.    )
  28.   )
  29.   ((= w "SD")
  30.    (setq d (getreal "\n输入每边缩短值: "))
  31.    (setq ss(ssget '((0 . "LINE"))))
  32.    (setq i -1)
  33.    (repeat (sslength ss)
  34.     (setq en (ssname ss (setq i (1+ i))) e1 (entget en))
  35.     (setq pt1 (cdr(assoc 10 e1))
  36.           pt2 (cdr(assoc 11 e1)))
  37.     (if (> (distance pt1 pt2) (+ d d))
  38.      (command "_.LENGTHEN" "DE" (- d) (list en pt1) (list en pt2) "")
  39.     )
  40.    )
  41.   )
  42. )
  43. (setvar "osmode" 3)
  44. (command "_.UNDO" "E")
  45. (setvar "CMDECHO" 1)
  46. (princ)
  47. )
发表于 2020-11-17 20:43 | 显示全部楼层

大师版主好:请教如何改为将多段线,两端同时拉长为缩短?
谢谢您
发表于 2020-10-21 15:34 | 显示全部楼层
非常不错的资料, 谢谢楼主分享的啊。
 楼主| 发表于 2012-4-3 12:15 | 显示全部楼层
怎么没人呢?
马上会跟进弧线的批量缩短或伸长
发表于 2012-4-3 12:19 | 显示全部楼层
我支持源码!
 楼主| 发表于 2012-4-3 12:24 | 显示全部楼层
谢谢了,会继续前进。
发表于 2012-4-3 12:55 | 显示全部楼层
楼主方便上个动画吗,谢谢
 楼主| 发表于 2012-4-3 22:12 | 显示全部楼层
注册 发表于 2012-4-3 12:55
楼主方便上个动画吗,谢谢

动画,没试过,怎么弄?
发表于 2012-4-3 22:26 | 显示全部楼层
缘份呐 发表于 2012-4-3 22:12
动画,没试过,怎么弄?

晕,gif啊,呵呵
 楼主| 发表于 2012-4-3 22:59 | 显示全部楼层
我试一下动画,
发表于 2012-4-4 10:33 | 显示全部楼层
怎么把OSMODE变量里面的草图设置全部是打开的,在完成命令时。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 19:05 , Processed in 5.685343 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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