找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 922|回复: 6

[LISP程序]:自动添加明细表件号项(记录行)

[复制链接]
发表于 2004-11-26 06:33:24 | 显示全部楼层 |阅读模式

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

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

×
自动添加明细表件号项(记录行)
用法:加载并运行程序,鼠标点击件号或件号所在行其他项目。
功能:在指定行上下(前后)添加新的件号及其项目及明细表外框线;
后续各行自动上下移动;
件号自动重新排序;
可自动识别表头上下位置。
适用于插入点为左上或左下角的属性块制作的明细表。
欢迎使用并提出意见。
[PHP]
26/11/04
(defun c:testa (/ blk pat blkobj pins doc blkref up
                  ps pe rows cols atts h n rline space p pss txs)
  (vl-cmdf "ucs" "w" "")
  (setvar "osmode" 0)
  (vl-load-com)
  (setq blk (entsel))
  (setq pat (cadr blk))
  (setq blk (car blk))
  (if (null blk)(progn (acet-ui-message "Block is not Selected" "SmartTool" 48)(quit)))
  (setq blkobj (vlax-ename->vla-object blk))
  (setq pins (vlax-get blkobj "insertionpoint"))
  (if (equal (cadr pins)(cadr (car (acet-geom-extents blk))) 0.001)(setq up t))
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (setq blkref (vla-item (vla-get-blocks doc)(vla-get-name blkobj)))
  (vlax-for item blkref
    (cond
      ((= (vla-get-objectname item) "AcDbLine")
        (setq ps (vlax-get item "startpoint"))
        (setq pe (vlax-get item "endpoint"))
        (if (equal (cadr ps)(cadr pe) 0.001)
          (setq rows (cons (list ps pe item) rows))
          (setq cols (cons (list ps pe item) cols))
        ))
      ((= (vla-get-objectname item) "AcDbAttributeDefinition")
       (setq atts (cons item atts)))
    )
  )  
  (setq rows (vl-sort rows '(lambda (p1 p2)(< (cadr (car p1))(cadr (car p2))))))
  (setq h (- (cadr (car (cadr rows)))(cadr (car (car rows)))) n 1)
  (if (null up)(setq h (- h)))
  (if up (setq rline (last (last rows)))(setq rline (last (car rows))))
  (vla-copy rline)
  (vla-move rline (vlax-3d-point '(0 0 0))(vlax-3d-point (list 0 h 0)))
  (foreach i cols
    (if (or (and up (> (cadr (car i))(cadr (cadr i))))
            (and (null up)(< (cadr (car i))(cadr (cadr i)))))
      (vla-put-startpoint (last i)(vlax-3d-point (list (car (car i))
                                           (- (cadr (car i)) h)(last (car i)))))
      (vla-put-endpoint (last i)(vlax-3d-point (list (car (cadr i))
                               (+ (cadr (cadr i)) h)(last (cadr i)))))
    )
  );f
  (if (= (getvar "tilemode") 1)
    (setq space (vla-get-modelspace doc))
    (setq space (vla-get-paperspace doc))
  )
  (setq atts (reverse atts))
  (setq pat (mapcar '- pat pins))
  (foreach i atts
    (setq p (vlax-get i "textalignmentpoint"))
    (if (equal (cadr p)(cadr pat)(/ (abs h) 2))
      (setq pss (append pss (list p))
            txs (append txs (list (vla-get-textstring i))))
    )
  )
  (setq pss (vl-sort pss '(lambda (p1 p2)(< (car p1)(car p2)))))
  (setq atts nil)
  (vlax-for item blkref
    (if (= (vla-get-objectname item) "AcDbAttributeDefinition")
      (setq atts (cons item atts))
    )
  )
  (foreach i atts
      (setq p (vlax-get i "textalignmentpoint"))
      (if (or (and up (> (cadr p)(cadr pat)))
                (and (null up)(< (cadr p)(cadr pat))))
      (progn
        (vla-put-textalignmentpoint i (vlax-3d-point (list (car p)
                                                   (+ (cadr p) h)(last p))))
        (if (equal (car p)(car (car pss)) 0.001)
          (vla-put-textstring i (itoa (+ (atoi (vla-get-textstring i)) n)))
        )
      )
    )
  )
  (setq ntag (* (- (length rows) 2)(1- (length cols))))
  (setq   tt (list "" "\nPart Number: " "\nDrawing Number: " "\nQuantity: "))
  (setq  lay (vla-get-layer (car atts))
         col (vla-get-color (car atts))
          th (vla-get-height (car atts))
         sty (vla-get-stylename (car atts)))
  (setvar "clayer" lay)
  (setvar "cecolor" (itoa col))
  (setq i 0)
  (while (< i (length pss))
    (setq ipt (list (car (nth i pss))(+ (cadr (nth i pss)) h)(last (nth i pss))))
    (if (= i 0)
      (setq tn (1+ ntag) num (itoa (1+ (atoi (car txs)))))
      (setq tn (+ ntag 1 i) num (strcase (getstring (nth i tt))))
    )
    (setq obj (vlax-ename->vla-object blk))
    (setq blkdef (vla-item (vla-get-blocks doc)(vla-get-name obj)))
    (setq  ipt (vlax-3d-point ipt))
    (setq attdef (vla-addattribute blkdef th acAttributeModeverify ""
                            ipt (strcat "T" (itoa tn)) num))
    (vla-put-alignment attdef 10)
    (vla-put-stylename attdef sty)
    (vla-put-textalignmentpoint attdef ipt)
    (vla-insertblock space (vlax-3d-point pins)(vla-get-name blkdef) 1 1 1 0)
    (vla-delete obj)
    (setq blk (entlast))
    (setq i (1+ i))
  )  
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-12-7 21:54:30 | 显示全部楼层
不行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-10 11:14:07 | 显示全部楼层
不能用耶
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-13 06:50:07 | 显示全部楼层
2楼,3楼:怎么个不行?不能用法?请详细说明?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-13 10:07:08 | 显示全部楼层

  1. ;;沒有測試圖及使用說明!
  2.   (arxload "acetutil.arx" NIL)                ;LUCAS
  3.   (vl-cmdf "ucs" "w")                        ; "");LUCAS
  4.   (setvar "osmode" 0)
  5.   (vl-load-com)
  6.   (setq BLK (entsel));選甚麼??帶屬性BLOCK??附圖較好!
  7.   (setq PAT (cadr BLK))
  8.   (setq BLK (car BLK))
  9.   (if (null BLK)
  10.     (progn (acet-ui-message "Block is not Selected" "SmartTool" 48)
  11.            (quit)
  12.     )
  13.   )
  14.   (setq BLKOBJ (vlax-ename->vla-object BLK))
  15.   (setq PINS (vlax-get BLKOBJ "insertionpoint"))
  16.   (if (equal (cadr PINS)
  17.              (cadr
  18.                (car (acet-ent-geomextents ;|ACET-GEOM-EXTENTS|; BLK))
  19.                                         ;LUCAS
  20.              )
  21.              0.001
  22.       )
  23.     (setq UP t)
  24.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-1-9 15:35:46 | 显示全部楼层
期待这样的程序...最好是ARX的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2010-1-7 14:56:55 | 显示全部楼层
试验后,在发表
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 18:21 , Processed in 0.294514 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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