找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 612|回复: 2

[求助] [求助]:请教这种情况用lisp怎么样实现,小弟刚学,谢谢

[复制链接]
发表于 2005-8-20 14:11:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
要实现选择多个矩形或圆形同时缩放,自动找到各自的中心,按比例缩放后把原来矩形或圆形删除
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-8-20 19:25:15 | 显示全部楼层
圆好解决:

利用entmod修改半径就行了!

至于矩形,就比较麻烦了!至少在r14下比较麻烦!矩形的中心->以中心为相对坐标原点建立用户坐标系->得到各顶点的极坐标->然后按比例缩放,得到新的顶点坐标->更新矩形!

这只是我的思路,并没有写过代码!

下午闲来无事,试着写了一下缩放矩形的:

程序没有对对象是否为矩形进行判断!凡是具有4个顶点的pl线都可缩放!






  1. (defun c:tt ()
  2.   (princ "选择需要缩放的矩形:")
  3.   (setq        ss (ssget)
  4.         sl (sslength ss)
  5.         m  0
  6.   )
  7.   (setq sca (getreal "输入缩放比例<1>:"))
  8.   (if (= nil sca)
  9.     (setq sca 1)
  10.   )
  11.   (while (< m sl)
  12.     (setq dd (entget (ssname ss m))
  13.           l  (length dd)
  14.           n  0
  15.           dl nil
  16.     )
  17.     (while (< n l)
  18.       (setq d (nth n dd))
  19.       (if (= 10 (car d))
  20.         (setq dl (cons (cons n d) dl))
  21.       )
  22.       (setq n (1+ n))
  23.     )
  24.     (setq l  (length dl)
  25.           n  0
  26.           xx 0
  27.           yy 0
  28.     )
  29.     (if        (= 4 l)
  30.       (progn (while (< n l)
  31.                (setq pt        (nth n dl)
  32.                      x        (caddr pt)
  33.                      y        (cadddr pt)
  34.                      xx        (+ x xx)
  35.                      yy        (+ y yy)
  36.                      n        (1+ n)
  37.                )
  38.              )
  39.              (setq x   (/ xx 4)
  40.                    y   (/ yy 4)
  41.                    cen (list x y)
  42.                    n   0
  43.              )
  44.              (while (< n l)
  45.                (setq pt            (cddr (nth n dl))
  46.                      ang    (angle cen pt)
  47.                      dis    (distance cen pt)
  48.                      newdis (* dis sca)
  49.                      newpt  (polar cen ang newdis)
  50.                      num    (car (nth n dl))
  51.                      newd   (cons 10 newpt)
  52.                      dd            (subst newd (nth num dd) dd)
  53.                      n            (1+ n)
  54.                )
  55.              )
  56.              (entmod dd)
  57.       )
  58.       (princ "选择的对象不是矩形!")
  59.     )
  60.     (setq m (1+ m))
  61.   )
  62.   (princ)
  63. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-22 12:42:36 | 显示全部楼层
不错不错,谢谢不过我觉得判断不是矩形时没必要每条线都判断,只要判断一次就可以了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 13:09 , Processed in 0.345755 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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