找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 825|回复: 0

[LISP程序]:急急急,哪位高手帮忙看看这段程序,在视口内操作也会出错而且在CAD2008

[复制链接]
发表于 2008-12-11 09:25:48 | 显示全部楼层 |阅读模式

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

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

×
急急急,哪位高手帮帮忙看看这段程序,在布局空间的视口内操作也会出错,而且在CAD2008和2009中运行不了。
(defun NB_makeblock (sset baspoint   name          /
             blkobj    activespace          BlockDef
             blocks    sArray       idx          doc
             vla-objects       regen_flag errorsave
            )
  (setq errorsave *error*)
  (defun *error* (msg)
    (setq *error* errorsave)
  )
  (setq baspoint (trans baspoint 1 0))
  (setq    doc    (vla-get-activedocument (vlax-get-acad-object))
    blocks (vla-get-blocks doc)
  )
  (setq    activespace
     (cond ((= (vla-get-activespace doc) 1) (vla-get-modelspace doc))
           ((= (vla-get-activespace doc) 0) (vla-get-paperspace doc))
     )
  )
  (setq    vla-objects
     '()
    idx -1
    regen_flag
     nil
    self_ref nil
  )
  (repeat (sslength sset)
    (setq vla-objects
       (append vla-objects
           (list
             (vlax-ename->vla-object (ssname sset (setq idx (1+ idx))))
           )
       )
    )
  )
  (if (not (vl-catch-all-error-p
         (vl-catch-all-apply 'vla-item (list blocks name))
       )
      )
    (progn
      (initget 1 "Yes No")
      (if
    (= (getkword
         (strcat "\n" name "已定义。是否重定义? (Yes or No) ")
       )
       "Yes"
    )
     (progn
       (if
         (apply
           'or
           (mapcar
         '(lambda (x)
            (and (= (vla-get-objectname x) "AcDbBlockReference")
             (= (vla-get-name x) name)
            )
          )
         vla-objects
           )
         )
          (progn (princ (strcat "\n" name "自参照。建块失败。"))
             (exit)
          )
       )
       (setq regen_flag T)
       (setq BlockDef (vla-item blocks name))
       (vlax-for itm BlockDef
         (vla-delete itm)
       )
     )
     (progn
       (princ "\n函数被取消")
       (exit)
     )
      )
    )
  )
  (foreach itm vla-objects
    (vla-move itm
          (vlax-3d-point baspoint)
          (vlax-3d-point '(0 0 0))
    )
  )
  (setq
    blkobj (vla-add blocks (vlax-3d-point '(0 0 0)) name)
    sArray
       (vlax-safearray-fill
         (vlax-make-safearray
           vlax-vbObject
           (cons 0 (1- (length vla-objects)))
         )
         vla-objects
       )
  )
  (vla-copyobjects doc sArray blkobj)
  (mapcar 'vla-delete vla-objects)
  (if regen_flag
    (vla-regen doc acAllViewports)
  )
  (setq *error* errorsave)
  (vla-insertblock
    activespace
    (vlax-3d-point baspoint)
    (vla-get-name blkobj)
    1
    1
    1
    0
  )
;;返回块名
(CDR (ASSOC 2 (ENTGET (vlax-vla-object->ename blkobj))))
)

这是一个制作图块的功能,我觉得非常的好用。

急急急,哪位高手帮帮忙修正一下!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-23 05:05 , Processed in 0.285285 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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