明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 87093|回复: 691

[源码] 块拉伸2.0.LSP

    [复制链接]
发表于 2014-8-24 20:06:53 | 显示全部楼层 |阅读模式
本帖最后由 langjs 于 2014-8-24 21:39 编辑

很久以前写了一个块拉伸程序,缺点是每次只能拉伸一个块。现在改进一下可以同时拉伸多个块和其它图元。
不大喜欢块编辑器和参照,直接拉拉改改块觉得方便些。
刚刚修改一个小BUG


;;; ================================================================
;;; <块拉伸2.0>    扩展stretch拉伸命令,可对含多个块的选择集进行拉伸
;;; 作者:langjs    命令:kls            日期:2014年8月12日
;;; ================================================================
(defun c:kls (/ #errkls $orr ent i j lst name pt1 pt2 pt3 pt4 pt5 ss ss1 ss2)
  (defun #errkls (s)
    (command ".UNDO" "E")
    (command ".UNDO" "")
    (setq *error* $orr))
  (setq $orr *error* *error* #errkls)
  (setvar "cmdecho" 0)
  (command ".UNDO" "BE")
  (setq lst '() ss2 (ssadd))
  (if (setq pt1 (getpoint "\n窗交对象:指定角点:"))
    (if (setq pt2 (getcorner pt1 "\n窗交对象:指定对角点:"))
      (if (setq ss (ssget "c" pt1 pt2))
        (progn
          (repeat (setq i (sslength ss))
            (setq name (ssname ss (setq i (1- i))) ent (entget name))
            (if (= (cdr (assoc 0 ent)) "INSERT")
              (progn
                (setq pt3 (cdr (assoc 10 ent)))
                (entmake (list '(0 . "POINT") (cons 10 pt3)))
                (ssadd (entlast) ss2)
                (command ".explode" name)
                (setq ss1 (ssget "p")lst (cons (list pt3 (cdr (assoc 2 ent)) ss1) lst))
                (repeat (setq j (sslength ss1))(redraw (ssname ss1 (setq j (1- j))) 3)))
              (redraw name 3)))
          (sssetfirst nil ss2)
          (while (not (setq pt4 (getpoint "\n指定基点:"))))
          (command "erase" ss2 "")
          (princ "\n指定第二个点,或相对基点位移:")
          (command "_.stretch" "c" pt1 pt2 "" pt4 pause)
          (setq pt5 (getvar "lastpoint"))
          (if (/= (distance pt4 pt5) 0.0)
            (repeat (setq i (length lst))
              (setq name (nth (setq i (1- i)) lst ) pt3 (car name))
              (if (and
                    (<= (min (car pt1) (car pt2)) (car pt3) (max (car pt1) (car pt2)))
                    (<= (min (cadr pt1)(cadr pt2))(cadr pt3)(max (cadr pt1)(cadr pt2))))
                (setq pt3 (polar pt3 (angle pt4 pt5) (distance pt4 pt5))))
              (command "block" (cadr name) "y" pt3 (caddr name) "")
              (entmake (list '(0 . "INSERT") (cons 2 (cadr name)) (cons 10 pt3))))
            (#errkls))))))
  (command ".UNDO" "E")
  (setq *error* $orr)
  (princ)
)

本帖子中包含更多资源

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

x

点评

1不要用command命令炸开,直接用vla修改?大图块炸开太慢了。 2原来的块是有xyz比例,旋转角度、图层、颜色等属性的,这样炸开再生成新的图块,属性完全丢失 3生成同名块,如果原来的块有很多个同名块,那么很混乱  发表于 2016-7-20 14:27
很实用的程序,能否改为只对编辑块进行修改?否则整个图中都会变化  发表于 2014-8-26 10:44

评分

参与人数 11明经币 +9 金钱 +106 收起 理由
sz721 + 1 很给力!
ko217 + 6 赞一个!
T_T + 1 赞一个!
crazylsp + 1 神马都是浮云
张和平 + 1 很给力!
ucuc2003 + 1
fan_zh + 50
434939575 + 1 必须支持!
菜卷鱼 + 1 很给力!
lucas_3333 + 1 谢谢E大!谢谢郎大师

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2019-12-17 17:29:57 | 显示全部楼层
cad2020 X64 调用(*push-error-using-command*)前无法从 *error* 调用(command)。
建议将(command)调用转换为(command-s)。
选择对象: 指定对角点: 找到 2 个
发表于 2022-9-7 12:25:34 | 显示全部楼层
无法使用
调用(*push-error-using-command*)前无法从 *error* 调用(command)。
建议将(command)调用转换为(command-s)。
发表于 2014-8-24 20:13:15 | 显示全部楼层
非常实用的工具。。。
发表于 2014-8-24 20:18:19 | 显示全部楼层
不错的东西
发表于 2014-8-24 20:30:14 | 显示全部楼层
谢谢郎大师!
发表于 2014-8-24 20:31:47 | 显示全部楼层
看看。谢谢。
发表于 2014-8-24 20:37:21 | 显示全部楼层
这个超实用的,感谢啦!
发表于 2014-8-24 20:43:19 | 显示全部楼层
谢谢,郎大师写的程序超实用
发表于 2014-8-24 20:49:44 来自手机 | 显示全部楼层
支持支持,感谢分享
发表于 2014-8-24 21:00:32 | 显示全部楼层
学习一下,谢谢分享。
发表于 2014-8-24 21:09:46 | 显示全部楼层
谢谢。。。。。。。。。。

评分

参与人数 1金钱 +6 收起 理由
ko217 + 6 赞一个!

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-25 14:20 , Processed in 0.217028 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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