davinlee 发表于 2012-8-15 17:08:45

如何以lisp取得已知圖框圖塊的圖元名稱

最終目的是希望抓取圖框的左下角與右上角,作為出圖的範圍.

通常以(setq a (car (entsel)))點取圖塊時,可求得圖塊的圖元名稱,指令行出現
   選取物件: <圖元名稱: 7ffff60a900>

但我想程式(不用entsel)直接從已知的圖框圖塊來求得圖元名稱.

另外請問vla-getboundingbox的用法,好像可以用來取得圖塊的最大範圍.

davinlee 发表于 2012-8-15 17:14:11

若我的圖框名是aa-a4.dwg
(setq b "aa-a4")

指令: (tblsearch "block" b)
((0 . "BLOCK") (2 . "AA-A4") (70 . 0) (4 . "") (10 0.0 0.0 0.0) (-2 . <圖元名稱:
7ffff60a230>))

為何圖元名稱與(car (entsel))的不同.

Andyhon 发表于 2012-8-15 17:15:02

(ssget "X" '((2 . "BlkName")))

davinlee 发表于 2012-8-17 14:17:10

to Andyhon:
我的圖框名是aa-a4.dwg
套用(ssget "X" '((2 . "BlkName")))選擇集
程式如下
(setq blkname "AA-A4")
(setq ent (ssget "X" '((cons 2 blkname))))
(setq l 0 n (sslength ent))
(while (< l n)
(setq aa (ssname ent l))
      (setq pt (ax:GetBoundingBox aa))
       (setq x1 (caar pt) x2 (caadr pt) y1 (cadar pt) y2 (cadadr pt))
       (setq ll (listx1 y1))
       (setq ur (listx2 y2))
       (command "-plot" "y" "" "adob pdf" "" "A4" "M" "L" "N" "W" ll ur sc "C" "Y" "monochrome.ctb" "Y" "N" "N" "N" "y")
       (setq l (+ 1 l))
)

但出現
; 錯誤: 損壞的 SSGET 清單
我把選擇集改成(setq ent (ssget "x" '((0. "insert")(cons 8 blkname))))
也是出現一樣的訊息
; 錯誤: 損壞的 SSGET 清單

還請幫忙了,謝謝

Andyhon 发表于 2012-8-17 14:33:04

能提供图样(Dwg)作为校验否?

davinlee 发表于 2012-8-17 16:46:34

請收附件;
圖框是AA-A4.dwg
測試的打印文件是JH2089200B.dwg
複制了二個一樣的圖來測試.

Andyhon 发表于 2012-8-17 17:36:32

(setq ent (ssget "X" '((2 . "AA-A4"))))
or
(setq ent (ssget "X" (list (cons 2 blkname))))
...

(setq pt (cdr (assoc 10 (entget aa)))
      ll (mapcar '- pt '(200 0))
      ur (mapcar '+ pt '(0 283))
...

davinlee 发表于 2012-8-18 08:36:15

出現
; 錯誤: 損壞的引數類型: lselsetp nil
整個編程如下:
(defun c:mp-test (/ blkname lst1 ent l n aa pt ll ur)
   (setvar "cmdecho" 0)
   (setq scl 1)
   (setq blkname "AA-A4")
   (setq lst1 (LIST '(0 . "INSERT") (CONS 2 BLKNAME)))
   (setq ent (SSGET "X" LST1))
   (setq l 0)
   (setq n (sslength ent))
(while (< l n)
(setq aa (ssname ent l))
(setq pt (cdr (assoc 10 (entget aa)))
      ll (mapcar '- pt '(200 0))
      ur (mapcar '+ pt '(0 283))
)
(command "-plot" "y" "" "adob pdf" "" "A4" "M" "L" "N" "W" ll ur scl "C" "Y" "monochrome.ctb" "Y" "N" "N" "N" "y")
(setq l (+ 1 l))
)
(princ)
)

Andyhon 发表于 2012-8-18 09:26:31

(setvar "cmdecho" 0)
(setvar "OsMode" 0)   ; add this line

longer1000 发表于 2012-8-21 18:05:54

学习了
页: [1]
查看完整版本: 如何以lisp取得已知圖框圖塊的圖元名稱