乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 72|回复: 0

[编程交流] Lisp问题块预览

[复制链接]

7

主题

18

帖子

12

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:55:34 | 显示全部楼层 |阅读模式
大家好,
 
我有一个在互联网上找到的代码问题(代码使类似的工作lisp块计数器)。
 
Lisp可以很好地处理简单的块。。。但是,当在“列预览”区域中选择具有属性的块时,具有属性的选定块不会显示插入块时输入的值。
上面甚至没有显示初始块的真实名称。
 
下面有一个dwg文件,其中包含我的块,还有Lisp代码。
 
  1. (defun c:BlkQty (/ blk_id blk_len blk_name blks ent h header_lsp height i j TOTAL
  2.        len0 lst_blk msp pt row ss str tblobj width width1 width2 x y
  3. )
  4. ;;  By : Gia Bach, gia_bach @  www.CadViet.com
  5. ;;
  6. (vl-load-com)
  7. (defun TxtWidth (val h msp / txt minp maxp)
  8. (setq    txt (vla-AddText msp val (vlax-3d-point '(0 0 0)) h))
  9. (vla-getBoundingBox txt 'minp 'maxp )
  10. (vla-Erase txt)
  11. (-(car(vlax-safearray->list maxp))(car(vlax-safearray->list minp)))  )
  12. (defun GetOrCreateTableStyle (tbl_name / name namelst objtblsty objtblstydic tablst txtsty)
  13. (setq objTblStyDic (vla-item (vla-get-dictionaries *adoc) "ACAD_TABLESTYLE") )  
  14. (foreach itm (vlax-for itm objTblStyDic
  15.        (setq tabLst (append tabLst (list itm))))
  16.    (if (not
  17.      (vl-catch-all-error-p
  18.        (setq name (vl-catch-all-apply 'vla-get-Name (list itm)))))
  19.      (setq nameLst (append nameLst (list name)))  )  )
  20. (if (not (vl-position tbl_name nameLst))
  21.    (vla-addobject objTblStyDic tbl_name "AcDbTableStyle"))
  22. (setq objTblSty (vla-item objTblStyDic tbl_name)
  23.    TxtSty (variant-value (vla-getvariable *adoc "TextStyle")))
  24. (mapcar '(lambda (x)(vla-settextstyle objTblSty x TxtSty))
  25.          (list acTitleRow acHeaderRow acDataRow) )
  26. (vla-setvariable *adoc "CTableStyle" tbl_name) )
  27. (defun GetObjectID (obj)
  28. (if (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
  29.    (vlax-invoke-method *util 'GetObjectIdString obj :vlax-false )
  30.    (vla-get-Objectid obj)))  
  31. ;main
  32. (if (setq ss (ssget (list (cons 0 "INSERT"))))
  33.    (progn
  34.      (vl-load-com)
  35.      (setq i -1 len0
  36.      (while (setq ent (ssname ss (setq i (1+ i))))
  37.    (setq blk_name (cdr (assoc 2 (entget ent))))
  38.    (if (> (setq blk_len (strlen blk_name)) len0)
  39.      (setq str blk_name len0 blk_len) )   
  40.    (if (not (assoc blk_name lst_blk))
  41.      (setq lst_blk (cons (cons blk_name 1) lst_blk))
  42.      (setq lst_blk (subst (cons blk_name (1+ (cdr (assoc blk_name lst_blk))))
  43.                   (assoc blk_name lst_blk) lst_blk)))        )
  44.      (setq lst_blk (vl-sort lst_blk '(lambda (x y) (< (car x) (car y)) ) ))
  45.      (SETQ TOTAL 0)
  46.      (FOREACH I LST_BLK (SETQ TOTAL (+ TOTAL (CDR I))))
  47.      (or *h* (setq *h* (* (getvar "dimtxt")(getvar "dimscale"))))
  48.      (initget 6)
  49.      (setq h (getreal (strcat "\nText Height <" (rtos *h*) "> :")))      
  50.      (if h (setq *h* h) (setq h *h*) )
  51.      (or *adoc (setq *adoc (vla-get-ActiveDocument (vlax-get-acad-object))))
  52.      (setq msp (vla-get-modelspace *adoc)
  53.        *util (vla-get-Utility *adoc)
  54.        blks (vla-get-blocks *adoc))      
  55.      (setq width1 (* 4 (TxtWidth "    " h msp))
  56.        width (* 2 (TxtWidth "Text Height" h msp))
  57.        height (* 2 h))
  58.      (if str
  59.    (setq width2 (* 1.5 (TxtWidth (strcase str) h msp)))
  60.    (setq width2 width))
  61.      (if (> h 3)
  62.    (setq width (* (fix (/ width )8)
  63.          width1 (* (fix (/ width1 )8)
  64.          width2 (* (fix (/ width2 )8)
  65.          height (* (fix (/ height 5))5)))
  66.      (GetOrCreateTableStyle "CadEng")
  67.      (setq pt (getpoint "\nPlace Table :")
  68.        TblObj (vla-addtable msp (vlax-3d-point pt) (+ (length lst_blk) 3) 4 height width));CHANGE 5 TO 4
  69.      (vla-put-regeneratetablesuppressed TblObj :vlax-true)
  70.      (vla-SetColumnWidth TblObj 0 width1)
  71.      (vla-SetColumnWidth TblObj 1 width2)
  72.      (vla-put-vertcellmargin TblObj (* 0.75 h))
  73.      (vla-put-horzcellmargin TblObj (* 0.75 h))
  74.      (mapcar '(lambda (x)(vla-setTextHeight TblObj x h))
  75.          (list acTitleRow acHeaderRow acDataRow) )
  76.      (mapcar '(lambda (x)(vla-setAlignment TblObj x )
  77.          (list acTitleRow acHeaderRow acDataRow))      
  78.      (vla-MergeCells TblObj 0 0 0 3);change 4 to 3
  79.      (vla-setText TblObj 0 0 "CARTEA INDICATOARELOR RUTIERE")
  80.      (setq j -1 header_lsp (list "NR. CRT." "DENUMIRE S.T.A.S. 1848-1/2011" "TOTAL INDICATOARE" "FIG. S.T.A.S. 1848-1/2011"));;;;;;;;;;;;;;;;;;;;;;REMOVE "DON VI"
  81.      (repeat (length header_lsp)
  82.    (vla-setText TblObj 1 (setq j (1+ j)) (nth j header_lsp)))
  83.      (setq row 2 i 1)   
  84.      (foreach pt lst_blk
  85.    (setq blk_name (car pt) j -1)
  86.    (mapcar '(lambda (x)(vla-setText TblObj row (setq j (1+ j)) x))
  87.        (list i blk_name  (cdr pt)));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;REMOVE "CAI"
  88.    (vla-SetBlockTableRecordId TblObj row 3 (GetObjectID (vla-item blks blk_name)) :vlax-true);CHANGE 4 TO 3
  89.    (vla-SetCellAlignment TblObj row 1 7)
  90.    (vla-SetCellAlignment TblObj row 2 9);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CHANGE 3 TO 2
  91.    (setq row (1+ row) i (1+ i))    )
  92.        (VLA-SETTEXT TBLOBJ ROW 1 "TOTAL")
  93.        (VLA-SETTEXT TBLOBJ ROW 2 TOTAL)
  94.    (vla-SetCellAlignment TblObj row 1 7)
  95.    (vla-SetCellAlignment TblObj row 2 9)
  96.      (vla-put-regeneratetablesuppressed TblObj :vlax-false)
  97.      (vlax-release-object TblObj) )  )
  98. (princ))
[附加]62448[/ATTACH]
 
祝大家度过愉快的一天。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 21:07 , Processed in 0.443091 second(s), 56 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表