找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 932|回复: 7

[求助] [求助]:请问为什么我的LSP会这样?

[复制链接]
发表于 2002-4-17 00:25:34 | 显示全部楼层 |阅读模式

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

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

×
情况如下:
(defun c:xxxx(/ ent)
  (ssget "x" '((0 . "INSERT")))
  (COMMAND "EXPLODE" "p" "")
)
提示出现
Command: xxxx


*Invalid selection*
Expects a point or Last/Group
出错:Function cancelled
nil
Select object:

Command: 'xdrx_savsslink
Unknown command "XDRX_SAVSSLINK".  Press F1 for help.
为什么会这样?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2002-4-17 00:29:04 | 显示全部楼层
(defun c:xxxx(/ ent)
(ssget "x" '((0 . "INSERT")))
((command "change" ent "" "p" "c" "6" "")
)
改成这样却可以正常执行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-17 00:53:08 | 显示全部楼层
Block的颜色不能这样改,你要改block所在图层的颜色(而且block建立时图层color要by layer, block中对象color也要by layer才有效),不然要遍历block修改每个对象。
修改颜色可没想象中简单,像xdsoft提供的程序(dwgblack.lsp)对”tolerance” “attrib”均无效,对black中的尺寸标注颜色看起来是改了,但把block爆开你会发现它的颜色又参考回原来的dimstyle了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-4-17 01:13:41 | 显示全部楼层
其实我想把图中的块全选后再炸开。但搞不清为何不行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-17 01:25:53 | 显示全部楼层
explode命令在lisp中执行时,一次只能炸一个物体。不能对选择集操作。
在help中有说细说明。

解决办法:

1。 遍历选择集,炸开每个图块

2。 cy956提供过的秘笈:
AutoCAD有个秘密系统变量
qaflags
改成1后应该可以正常运行。
help系统中无关于此变量的说明。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-17 01:38:35 | 显示全部楼层
这里是完整的炸开所有图块的代码:

  1. [FONT=courier new]
  2. ;; 炸开所有等比缩放的图块
  3. (defun C:ExpBlk1
  4.                  (/             blocklist        ss           blockname
  5.                   i             blockobj        lastentity blockobj2
  6.                   count
  7.                  )
  8.   (setq ss (ssget '((0 . "INSERT"))))
  9.   (if (null ss)(exit))
  10.   (setq        i 0
  11.         blocklist nil
  12.   )
  13.   (while (< i (sslength ss))
  14.     (setq blockname (ssname ss i))
  15.     (setq blockobj (vlax-ename->vla-object blockname))
  16.     (if        (= (abs (vla-get-XscaleFactor blockobj))
  17.            (abs (vla-get-YScaleFactor blockobj))
  18.            (abs (vla-get-ZscaleFactor Blockobj))
  19.         )
  20.       (progn
  21.         (setq blocklist (append blocklist (list blockobj)))
  22.       )
  23.     )
  24.     (setq i (1+ i))
  25.   )

  26.   (setvar "cmdecho" 0)
  27.   (command "_.UNDO" "Auto" "off")
  28.   (command "_.UNDO" "_GROUP")
  29.   (setvar "cmdecho" 1)

  30.   (setq count 0)
  31.   (while blocklist
  32.     (setq lastentity (entlast))
  33.     (foreach blockobj blocklist
  34.                                         ; (setvar "cmdecho" 0)
  35.                                         ; (command "_.EXPLODE" (vlax-vla-object->ename blockobj))
  36.                                         ; (setvar "cmdecho" 1)
  37.                                         ;以上方法效率极低
  38.       (vla-explode blockobj)
  39.       (vla-delete blockobj)
  40.       (setq count (1+ count))
  41.       (princ "\r")
  42.       (princ count)
  43.       (princ " block(s) exploded.")
  44.       
  45.       (setq blocklist (cdr blocklist))
  46.       (while (not (eq lastentity (entlast)))
  47.         (setq lastentity (entnext lastentity))
  48.         (if (= "INSERT" (cdr (assoc 0 (entget lastentity))))
  49.           (progn
  50.             (setq blockobj2 (vlax-ename->vla-object lastentity))
  51.             (if        (= (abs (vla-get-XscaleFactor blockobj2))
  52.                    (abs (vla-get-YScaleFactor blockobj2))
  53.                    (abs (vla-get-ZscaleFactor Blockobj2))
  54.                 )
  55.               (progn
  56.                 (setq blocklist (append blocklist (list blockobj2)))
  57.               )
  58.             )
  59.           )
  60.         )
  61.       )
  62.     )
  63.   )
  64.   (setvar "cmdecho" 0)
  65.   (command "_.UNDO" "END")
  66.   (setvar "cmdecho" 1)

  67.   (princ)
  68. )

  69. ;; Expblk2 炸开所有图块
  70. (defun C:ExpBlk2
  71.                  (/             blocklist        ss           blockname
  72.                   i             blockobj        lastentity blockobj2
  73.                   count
  74.                  )
  75.   (setq ss (ssget '((0 . "INSERT"))))
  76.   (if (null ss)(exit))
  77.   (setq        i 0
  78.         blocklist nil
  79.   )
  80.   (while (< i (sslength ss))
  81.     (setq blockname (ssname ss i))
  82.     (setq blockobj (vlax-ename->vla-object blockname))
  83.                                         ;    (if        (= (abs (vla-get-XscaleFactor blockobj))
  84.                                         ;           (abs (vla-get-YScaleFactor blockobj))
  85.                                         ;           (abs (vla-get-ZscaleFactor Blockobj))
  86.                                         ;        )
  87.                                         ;      (progn
  88.     (setq blocklist (append blocklist (list blockobj)))
  89.                                         ;      )
  90.                                         ;    )
  91.     (setq i (1+ i))
  92.   )

  93.   (setvar "cmdecho" 0)
  94.   (command "_.UNDO" "Auto" "off")
  95.   (command "_.UNDO" "_GROUP")
  96.   (setvar "cmdecho" 1)

  97.   (setq count 0)
  98.   (while blocklist
  99.     (setq lastentity (entlast))
  100.     (foreach blockobj blocklist
  101.                                         ; (setvar "cmdecho" 0)
  102.                                         ; (command "_.EXPLODE" (vlax-vla-object->ename blockobj))
  103.                                         ; (setvar "cmdecho" 1)
  104.       (vla-explode blockobj)
  105.       (vla-delete blockobj)
  106.       (princ "\r")
  107.       (princ count)
  108.       (princ " block(s) exploded.")
  109.       
  110.       (setq count (1+ count))
  111.       (setq blocklist (cdr blocklist))
  112.       (while (not (eq lastentity (entlast)))
  113.         (setq lastentity (entnext lastentity))
  114.         (if (= "INSERT" (cdr (assoc 0 (entget lastentity))))
  115.           (progn
  116.             (setq blockobj2 (vlax-ename->vla-object lastentity))
  117.                                         ;            (if        (= (abs (vla-get-XscaleFactor blockobj2))
  118.                                         ;                   (abs (vla-get-YScaleFactor blockobj2))
  119.                                         ;                   (abs (vla-get-ZscaleFactor Blockobj2))
  120.                                         ;                )
  121.                                         ;              (progn
  122.             (setq blocklist (append blocklist (list blockobj2)))
  123.                                         ;              )
  124.                                         ;            )
  125.           )
  126.         )
  127.       )
  128.     )
  129.   )
  130.   (setvar "cmdecho" 0)
  131.   (command "_.UNDO" "END")
  132.   (setvar "cmdecho" 1)

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

使用道具 举报

发表于 2002-4-17 01:45:00 | 显示全部楼层
上述程序炸开所有图块,包括嵌套中的图块。避免了使用递归。原来是以为因为使用递归的原因,导致程序运行速度很慢。后来发现不是这样,是因为(command)调用很慢。所以,最后改成activex方法,速度大大提高。

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

使用道具 举报

 楼主| 发表于 2002-4-17 02:32:38 | 显示全部楼层
原来还有这样的系统变量。
谢谢秋枫斑竹的详细解答。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 23:55 , Processed in 0.414543 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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