明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9858|回复: 25

请求高手帮忙写一个图块批量放大程序,谢谢!

  [复制链接]
发表于 2013-3-7 11:03:16 | 显示全部楼层 |阅读模式
5明经币
偶想要的操作步骤:假设“图块放大命令为bf”
1、输入bf,回车,提示选择图块(若不选择图块则直接回车),选择(可以框选)图块 A和B     ,(主要是选择作为参考,同一图块可以选择多个),回车。
2、提示选择区域(若第一步没有选择图块的话,则默认选择区域内的所有图块),若第一步选择了图块的话,则区域内的其它图块或则物体都不会被选择。
3、回车确定选择图块后,提示输入缩放比例,输入之后回车,OK.
特别要求:1、要支持动态块、无名块、属性块(支持属性块的文字同时进行缩放)
                  2、图块基点不变

下面是测试CAD文件,2004格式


望高手帮忙啊!!!
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-3-7 11:03:17 | 显示全部楼层
Ok here

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-3-7 12:40:45 | 显示全部楼层
选择图块原位比例缩放:
  1. (defun c:tt (/ scale ss n obj)
  2.   (while (setq ss (ssget ":L" '((0 . "insert"))))
  3.     (if (null *scale)
  4.       (setq *scale 2.0)
  5.       )
  6.     (initget 6)
  7.     (setq scale (getreal (strcat "\n缩放比例<" (rtos *scale 2 2) ">:")))
  8.     (if (null scale)
  9.       (setq scale *scale)
  10.       (setq *scale scale)
  11.       )
  12.     (repeat (setq n (sslength ss))
  13.       (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
  14.       (vla-ScaleEntity obj (vla-get-InsertionPoint obj) scale)
  15.       )
  16.     )
  17.   (princ)
  18.   )
回复

使用道具 举报

 楼主| 发表于 2013-3-7 15:38:05 | 显示全部楼层
Gu_xl 发表于 2013-3-7 12:40
选择图块原位比例缩放:

谢谢G版的热心关注,偶先试用了一下,非常好,不过要是能实现以下功能就好了。
假若一个图里面有很多不同的图块,我只想缩放选择区域内的图块A,或者图块A、图块B一起缩放,或者图块A、图块B、图块C或者更多,主要是经常在一个区域内有不同的图块,只想缩放其中的某几种图块,要是能实现这个功能就更好了
回复

使用道具 举报

发表于 2013-3-7 16:26:07 | 显示全部楼层
lingduwx 发表于 2013-3-7 15:38
谢谢G版的热心关注,偶先试用了一下,非常好,不过要是能实现以下功能就好了。
假若一个图里面有很多不同 ...

修改这句即可:
(setq ss (ssget ":L" '((0 . "insert"))))

==》
(setq ss (ssget ":L" '((0 . "insert")(2 . "A,B"))))
回复

使用道具 举报

 楼主| 发表于 2013-3-7 17:50:54 | 显示全部楼层
谢谢版主,图块A和图块B或者还有图块c只是我举的一个例子,实际应用中可能是其它不同的图块名字

点评

晕!你不会举一反三么?鱼和渔同样重要!  发表于 2013-3-8 08:57
回复

使用道具 举报

 楼主| 发表于 2013-3-7 17:52:31 | 显示全部楼层
本帖最后由 lingduwx 于 2013-3-7 18:01 编辑
Gu_xl 发表于 2013-3-7 16:26
修改这句即可:
(setq ss (ssget ":L" '((0 . "insert"))))


谢谢版主,图块A和图块B或者还有图块c只是我举的一个例子,实际应用中可能是其它不同的图块名字
偶收藏的一个“多块同时缩放的LSP”,不知道是哪位高手写的,他的第一步就是要求输入图块名字,如果不输入的话,则默认所有图块,这个工具有两点不能满足我的要求:1、输入图块名字要是改为直接在图形中选择图块就好了。2、就是不支持属性块中的文字缩放。
      现在偶提供源码如下(主要是偶不懂改LSP)
;****************************************************
;                    bsc--多块同时缩放.lsp
;                    
;*****************************************************

;****************************************************多块同时缩放
(defun c:bsc ()
  (command "_.undo" "_begin")
  (setq        old_err        *error*
        *error*        Sb_err
  )
  (setq blkname (getstring "\n请输入需缩放的块名称:"))
  (initget 7)
  (setq blkfactor (getreal "\n请输入缩放倍数:"))
  (setq blksset (ssget (list (cons 0 "INSERT") (cons 2 blkname))))
  (setq blksscnt (sslength blksset))
  (setq donecount 0)
  (while (> blksscnt 0)
    (setq temp (ssname blksset (setq blksscnt (1- blksscnt))))
    (setq templist (entget temp))
    (setq blkbasept (cdr (assoc 10 templist)))
    (command "scale" temp "" blkbasept blkfactor ^c)
    (setq donecount (1+ donecount))
  )
  (princ (strcat "\n完成缩放 "
                 (itoa donecount)
                 " 个名称为"
                 "\""
                 blkname
                 "\""
                 "的块."
         )
  )
  (command "_.undo" "_end")
)

(defun Bs_err (s)
  (princ "\n命令中止!")
  (setq *error* old_err)
  (princ)
)

(princ)

回复

使用道具 举报

发表于 2013-3-7 23:42:43 | 显示全部楼层
试试这样的。

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-3-8 08:36:02 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2013-3-8 23:30 编辑

  1. ;****************************************************
  2. ;                bsc--多块同时缩放.lsp
  3. ;****************************************************
  4. (defun c:bsc ()
  5. (command "_.undo" "_begin")
  6. (setq old_err *error* *error* Sb_err)
  7. (if (and (princ "\n请选择需缩放的块:")
  8.           (setq ss (ssget '((0 . "INSERT"))))) (progn
  9.   (setq i 0 bnm (cdr(assoc 2 (entget(ssname ss 0)))))
  10.   (repeat (1- (sslength ss))
  11.    (setq ent (entget(ssname ss (setq i (1+ i))))
  12.          bnm (strcat bnm "," (cdr(assoc 2 ent))))
  13.   )
  14.   (initget 7)
  15.   (setq blkfactor (getreal "\n请输入缩放倍数:"))
  16.   (setq blksset (ssget (list (cons 0 "INSERT") (cons 2 bnm))))
  17.   (setq donecount 0)
  18.   (repeat (sslength blksset)
  19.    (setq temp (ssname blksset donecount))
  20.    (setq templist (entget temp))
  21.    (setq blkbasept (cdr (assoc 10 templist)))
  22.    (command "scale" temp "" blkbasept blkfactor ^c)
  23.    (setq donecount (1+ donecount))
  24.   )
  25.   (princ (strcat "\n完成缩放 " (itoa donecount)
  26.                  " 个名称为\"" blkname "\"的块."))
  27. ))
  28. (command "_.undo" "_end")
  29. (princ)
  30. )
  31. (defun Bs_err (s)
  32. (princ "\n命令中止!")
  33. (setq *error* old_err)
  34. (princ)
  35. )
  36. (princ)
回复

使用道具 举报

 楼主| 发表于 2013-3-8 09:24:10 | 显示全部楼层
ZZXXQQ 发表于 2013-3-8 08:36

谢谢版主,但是不知道为什么,我加载之后输入bsc后,提示未知命令

点评

试试于 27列 补 ') ==> )))  发表于 2013-3-8 09:49
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 01:06 , Processed in 0.241485 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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