明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1964|回复: 13

[源码] 请求高手帮忙修改一下,谢谢!!!

[复制链接]
发表于 2013-10-13 11:17 | 显示全部楼层 |阅读模式
本帖最后由 lingduwx 于 2013-10-16 13:46 编辑

希望高手帮忙修改一下,红色文字的需要的要求,谢谢!!!
(这个是图块批量放大程序,他原来的操作是输入命令之后选择哪些图块种类,然后输入缩放倍数,然后再框选区域内的图块放大,我现在的想法是在选择图块种类的时候增加一个功能就是不选择的情况下输入放大倍数,然后选择区域,则此区域内的图块均被缩放
具体操作过程
命令: bf

请选择需缩放的块:
选择对象: 指定对角点: 找到 5 个(希望这一步增加一个功能,就是不选择对象的情况下可以直接右键继续下一步操作)

选择对象:

请输入缩放倍数:2(接上一步操作,就是不选择图块种类的情况下直接输入缩放倍数)

选择对象: 指定对角点: 找到 5 个(然后选择区域,则区域内被选择的图块均可以被缩放)

选择对象:
; 错误: 参数类型错误: stringp nil(这个原文件最后缩放成功,但是不知道怎么会有这个错误的提示)


下面是论坛里找的源码
————————————————————————————————————————————————————————————
;;;****************************************************
;;;                bsc--多块同时缩放.lsp
;;;****************************************************
(defun c:bf ()
    (command "_.undo" "_begin")
    (setq old_err *error* *error* Sb_err)
    (if (and
          (princ "\n请选择需缩放的块:")
          (setq ss (ssget '((0 . "INSERT"))))
        )
      (progn
        (setq i 0 bnm (cdr(assoc 2 (entget(ssname ss 0)))))
        (repeat (1- (sslength ss))
          (setq ent (entget(ssname ss (setq i (1+ i))))
                bnm (strcat bnm "," (cdr(assoc 2 ent))))
        )
        (initget 7)
        (setq blkfactor (getreal "\n请输入缩放倍数:"))
        (setq blksset (ssget (list (cons 0 "INSERT") (cons 2 bnm))))
        (setq donecount 0)
        (repeat (sslength blksset)
          (setq temp (ssname blksset donecount))
          (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")
    (princ)
)


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



"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2013-10-14 09:33 | 显示全部楼层
帖子沉的好快啊
发表于 2013-10-14 13:33 | 显示全部楼层
右键是干吗?结束程序还是下一个循环?
(command "scale" temp "" blkbasept blkfactor )
发表于 2013-10-14 15:36 | 显示全部楼层
没细看程序。不设置局部变量,就会有程序间变量相互影响而导致出错风险。
这样的程序我喜欢用 entmod  
 楼主| 发表于 2013-10-15 09:11 | 显示全部楼层
fl202 发表于 2013-10-14 13:33
右键是干吗?结束程序还是下一个循环?
(command "scale" temp "" blkbasept blkfactor )

右键之后继续下一步操作
发表于 2013-10-16 08:50 | 显示全部楼层
lingduwx 发表于 2013-10-15 09:11
右键之后继续下一步操作

你这不是废话?
我问你中午吃啥?你说吃饭!!!我问多大了?你说二十多!!!

下一步什么操作啊?你原初衷想让这个程序实现哪些功能?详细叙述,详细!
 楼主| 发表于 2013-10-16 13:41 | 显示全部楼层
fl202 发表于 2013-10-16 08:50
你这不是废话?
我问你中午吃啥?你说吃饭!!!我问多大了?你说二十多!!!

不好意思,可能是我没有讲完
上面我想讲的是具体操作过程想怎么样做,可能表述有点不准确,下面的内容是我的想法(不知道表述清楚了没有):
这个是图块批量放大程序,他原来的操作是输入命令之后选择哪些图块种类,然后输入缩放倍数,然后再框选区域内的图块放大,我现在的想法是在选择图块种类的时候增加一个功能就是不选择图块的情况下输入放大倍数,然后选择区域,则此区域内的图块均被缩放
发表于 2013-10-17 09:37 | 显示全部楼层
本帖最后由 fl202 于 2013-10-17 09:40 编辑
lingduwx 发表于 2013-10-16 13:41
不好意思,可能是我没有讲完
上面我想讲的是具体操作过程想怎么样做,可能表述有点不准确,下面的内容是 ...

原句上修改:在第一次选择到块时,缩放该类块;在选择空时,缩放第二次选择范围内所有的块。
其实这样还是不太好,我感觉这种选择方式有可能误选不需要缩放的块。
另:也可以做成dcl的,会更好用。
  1. (defun c:bf1 ()
  2.     (command "_.undo" "_begin")
  3.     ;(setq old_err *error* *error* Sb_err)
  4.     (setq ss nil bnm nil)
  5.     (if (and
  6.           (princ "\n请选择需缩放的块:")
  7.           (setq ss (ssget '((0 . "INSERT"))))
  8.         )
  9.       (progn
  10.         (setq i 0 bnm (cdr(assoc 2 (entget(ssname ss 0)))))
  11.         (repeat (1- (sslength ss))
  12.           (setq ent (entget(ssname ss (setq i (1+ i))))
  13.                 bnm (strcat bnm "," (cdr(assoc 2 ent))))
  14.         )
  15.          ) )
  16.         (initget 7)
  17.         (setq blkfactor (getreal "\n请输入缩放倍数:"))
  18.         (if bnm
  19.         (setq blksset (ssget (list (cons 0 "INSERT") (cons 2 bnm))))
  20.         (setq blksset (ssget (list (cons 0 "INSERT") )))
  21.         )
  22.         (setq donecount 0)
  23.         (setvar "osmode" 0)
  24.         (repeat (sslength blksset)
  25.           (setq temp (ssname blksset donecount))
  26.           (setq templist (entget temp))
  27.           (setq blkbasept (cdr (assoc 10 templist)))
  28.           (command "scale" temp "" blkbasept blkfactor)  (princ (list blkbasept blkfactor))
  29.           ;(command "scale" temp "" blkbasept blkfactor ^c)
  30.           (setq donecount (1+ donecount))
  31.         )
  32.         (setvar "osmode" 767)
  33.         (princ   (strcat   "\n完成缩放 "   (itoa donecount) " 个名称为""  bnm ""的块."    ) )
  34.    
  35.     (command "_.undo" "_end")
  36.     (princ)
  37. )

有点不对啊,怎么3k分,49个明经币的还要我帮助???给我点!

评分

参与人数 1明经币 +1 收起 理由
lingduwx + 1 这个评分怎么最多1个币啊

查看全部评分

 楼主| 发表于 2013-10-17 09:51 | 显示全部楼层
fl202 发表于 2013-10-17 09:37
原句上修改:在第一次选择到块时,缩放该类块;在选择空时,缩放第二次选择范围内所有的块。
其实这样还 ...

非常感谢,偶本来想给你10币的,但是提示24小时评分太频繁,不知道怎么回事,等明天给你哈,呵呵
平时偶主要逛一下论坛,但是一直对lsp搞不懂啊,呵呵
 楼主| 发表于 2013-10-17 09:58 | 显示全部楼层
fl202 发表于 2013-10-17 09:37
原句上修改:在第一次选择到块时,缩放该类块;在选择空时,缩放第二次选择范围内所有的块。
其实这样还 ...

大哥想再麻烦请教一下,我保存的时候选择的“Unicode”这个编码格式,在CAD加载出现错误,不知道怎么回事 啊?
提示如下:
命令: ap APPLOAD 已成功加载 新建文本文档 (5).lsp。


命令: ; 错误: 读入的 (八进制) 字符不正确: 0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-20 20:35 , Processed in 0.175037 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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