明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4677|回复: 21

沿上次继续改进,线段和圆弧批量伸长或缩短

  [复制链接]
发表于 2012-6-14 14:06:32 | 显示全部楼层 |阅读模式
线段和圆弧的批量伸长或缩短
正数为伸长,负数为缩短
望各位老师指点,改进。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-6-15 19:41:55 | 显示全部楼层
程序呢?
 楼主| 发表于 2012-6-15 20:20:55 | 显示全部楼层
vlisp2012 发表于 2012-6-15 19:41
程序呢?

哦,忘记了,不好意思。马上贴上。
请指点下,希望改进更好。
 楼主| 发表于 2012-6-15 20:21:31 | 显示全部楼层
(defun c:lll()
(princ "批量伸长或缩短")
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq d (getreal "\n请输入每边变化值: "))
(princ "\n请选择对象:")
(setq ss(ssget '((0 . "line,arc"))))
(setq len(sslength ss))
(setq i 0)
(if (/= NIL ss)
  (repeat len
(setq en1(ssname ss i))
(setq e1 (entget en1))
(setq TS (cdr(assoc 0 e1)))
(cond
  ((= TS "LINE")
(setq pt1 (cdr (assoc 10 e1)))
(setq ptt1 (cdr (assoc 11 e1)))
(setq px1 (car pt1)
       py1 (cadr pt1)
       z0 (list px1 py1))
(setq pxx1 (car ptt1)
       pyy1 (cadr ptt1)
       z2 (list pxx1 pyy1))
(setq zx1 (/ (+ px1 pxx1) 2.0)
       zy1 (/ (+ py1 pyy1) 2.0)
       z1 (list zx1 zy1))
(setq LD (distance pt1 ptt1))
(if (> (- d) (/ LD 2.0)) (exit))
(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)
)
((= TS "ARC")
(setq o (cdr (assoc 10 e1))
       r (cdr (assoc 40 e1))
       p0 (cdr (assoc 50 e1))
       pn (cdr (assoc 51 e1))
       hd0 (- pn p0)
       zdhd (+ p0 (/ hd0 2.0)))
(if (>= d (* (/ (abs (/ hd0 2.0)) pi) pi r)) (exit))
(setq ds (atof (angtos hd0 0 4))
       zc (* 2 pi r (/ ds 360)))
(setq xds (/ (* d 360) (* 2 pi r)))
(setq xhd (* pi (/ xds 180)))
(if (>= (- d) (/ zc 2.0))  (exit))
(setq e1 (subst (cons 50 (- p0 xhd)) (assoc 50 e1) e1))
(setq e1 (subst (cons 51 (+ pn xhd)) (assoc 51 e1) e1))
(entmod e1)
)
)
(setq i (+ i 1))
)
)
(setvar "osmode" os)
(princ)
)

点评

需要这么长得代码?  发表于 2012-6-15 20:48
发表于 2012-6-15 22:08:04 | 显示全部楼层
本帖最后由 yjr111 于 2012-6-15 23:30 编辑

  1. ;;;;程序未处理缩短长度大于已有长度或圆弧增大长度超过圆周长的情况,请自行添加判断;;;;;;;;;;
  2. (defun c:doublextend (/  ss e n )
  3. (setq oldosmode (getvar "osmode"))
  4. (setvar "osmode" 0)
  5. (setvar "cmdecho" 0)
  6. (if *dist*
  7.   (setq dist (getdist (strcat "\n请输入每边变化值:< " (rtos *dist* 2 0) ">")))
  8.   (setq dist (getdist "\n请输入每边变化值: "))
  9. )
  10. (if (not dist)  (setq dist *dist*)  (setq *dist* dist))
  11. (princ "\n请选择对象:")
  12. (while(setq ss  (ssget '((0 . "LINE,ARC"))))
  13. (while  (and ss (>(setq n(sslength ss))0))
  14. 。。。。。。。。。。。。。。。。。。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
flytoday + 1 很给力!

查看全部评分

发表于 2012-6-15 22:19:09 | 显示全部楼层
对有扩展属性的线及PL线无效请严哥升级下。。完美程序哈

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

PL线这样(while(setq ss (ssget '((0 . "LINE,ARC,LWPOLYLINE"))))  发表于 2012-6-15 22:27
只要lengthen有效的,简单添加进去不就得了?  发表于 2012-6-15 22:23
发表于 2012-6-15 22:31:22 | 显示全部楼层
学习..........................
发表于 2012-6-15 22:44:19 | 显示全部楼层
严哥改了变成这样了啊。。用不了~
命令:
DOUBLEXTEND
请输入每边变化值:< 100>
请选择对象:
选择对象: 找到 1 个
选择对象:
未知命令“DOUBLEXTEND”。按 F1 查看帮助。

点评

比赛快开始了,我也改好了,去重新下载5楼的附件吧  发表于 2012-6-15 23:26
发表于 2012-6-16 21:24:27 | 显示全部楼层
严哥5楼附件只能适用单边啊~~~~~~[em0]
发表于 2012-6-18 08:36:59 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-26 03:10 , Processed in 0.184069 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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