AutoLisp Entmake 建立物件最少需求的圖元資料

利用entmake的方法,
我稱之為圖元創建法
(entmake 圖元資料)

在Lisp內使用entmake是需要加入最少基本的圖元資料,
否則會無法建立,
而其他忽略的值會依照系統進行預設。

圖元目錄
1.單行文字 TEXT
2.多行文字 MTEXT
3.線 LINE
4.聚合線 POLYLINE
5.圓 CIRCLE
6.弧 ARC
7.單行文字 TEXT
8.多行文字 MTEXT
9.半徑標註
10.直徑標註
11.水平標註
12.垂直標註
13.對齊標註
14.生成一般圖塊
15.插入一般圖塊
16.生成匿名圖塊
17.將選擇集中的物件製作成屬性圖塊(單行文字會轉成屬性定義)
18.創建新的圖層
19.創建新的線型
20.引線
21.建構線 XLINE
22.橢圓
23.點 POINT
24.創建新的文字樣式
25.創建新的標註樣式
26.雲形線
27.實體SOLID
29.插入屬性圖塊(但必須已有該圖塊)

1.單行文字 TEXT

(entmake '((0 . "TEXT")(1 . "50")(40 . 0)(10 0 0 0)))

2.多行文字 MTEXT

(entmakex
   (list
     (cons 0   "MTEXT")        
     (cons 100 "AcDbEntity")         
     (cons 100 "AcDbMText")  
     (cons 10 (list 0 0 0));基準點
     (cons 1 "多行文字 MTEXT")));文字內容

3.線 LINE

(entmake (list '(0 . "LINE")
        (cons 10 (getpoint));第一點
        (cons 11 (getpoint))));第二點

4.聚合線 POLYLINE

(1)基本架構
(entmake
   (list
     (cons 0 "LWPOLYLINE")
     (cons 100 "AcDbEntity")
     (cons 100 "AcDbPolyline")
     (cons 90 2) ;;這是頂點數,根據你下面輸入的頂點需做調整
     (cons 10 (getpoint)) ;;第一個點
     (cons 10 (getpoint)) ;;第二個點,更多點再增加
))
(2)多個點,已有點列表lst。
(entmake (append (list '(0 . "LWPOLYLINE")
         '(100 . "AcDbEntity")
         '(100 . "AcDbPolyline")
         (cons 90 (length lst)))
   (mapcar '(lambda (pt) (cons 10 pt)) lst))
  )
(3)多個點,選取點後創建。
(setq P1 (getpoint "\n 選取第一點:"))
(setq lst (list P1))
(while P1
    (setq P2 (getpoint P1 "\n 選取下一點:"))
    (setq P1 P2)
    (if (/= P1 nil)
 (setq lst (append lst (list P1)))
 )
    )
(entmake (append (list '(0 . "LWPOLYLINE")
         '(100 . "AcDbEntity")
         '(100 . "AcDbPolyline")
         (cons 90 (length lst)))
   (mapcar '(lambda (pt) (cons 10 pt)) lst))
  )

5.圓 CIRCLE

(entmake (list '(0 . "CIRCLE")
        (cons 10 (getpoint));圓心座標
        (cons 40 (getint))));半徑


6.弧 ARC

(entmake (list '(0 . "ARC")
        (cons 10 pt);圓心座標
        (cons 40 r);半徑
        (cons 50 ang1);起始角度
        (cons 51 ang2)));結束角度

7.單行文字 TEXT

(entmake (list '(0 . "TEXT") (cons 1 str) (cons 10 pt) (cons 40 5)))

8.多行文字 MTEXT

(entmake (list '(0 . "MTEXT") '(100 . "AcDbEntity") '(100 . "AcDbMText") '(7 . "Standard") (cons 1 str) (cons 10 pt)))

9.半徑標註

(entmake (list '(0 . "DIMENSION") '(100 . "AcDbEntity") '(100 . "AcDbDimension")(cons 10 pt) '(70 . 36) '(100 . "AcDbRadialDimension")        (cons 15 pt1) ) )

10.直徑標註

(entmake (list '(0 . "DIMENSION")
        '(100 . "AcDbEntity")
        '(100 . "AcDbDimension")
        (cons 10 pt1)
        (cons 11 pt2)
        '(70 . 163)
        '(100 . "AcDbDiametricDimension")
        (cons 15 pt3)
  )
)

11.水平標註

(entmake (list '(0 . "DIMENSION")
        '(100 . "AcDbEntity")
        '(100 . "AcDbDimension")
        (cons 10 pt)
        '(70 . 32)
        '(1 . "")
        '(100 . "AcDbAlignedDimension")
        (cons 13 pt1)
        (cons 14 pt2)
        '(100 . "AcDbRotatedDimension")
  )
)

12.垂直標註

(entmake (list '(0 . "DIMENSION")
        '(100 . "AcDbEntity")
        '(100 . "AcDbDimension")
        (cons 10 pt)
        '(70 . 32)
        '(1 . "")
        '(100 . "AcDbAlignedDimension")
        (cons 13 pt1)
        (cons 14 pt2)
        '(50 . 1.5708)
        '(100 . "AcDbRotatedDimension")
  )
)

13.對齊標註

(entmake (list '(0 . "DIMENSION")
        '(100 . "AcDbEntity")
        '(100 . "AcDbDimension")
        (cons 10 pt1)
        '(70 . 33)
        '(1 . "")
        '(100 . "AcDbAlignedDimension")
        (cons 13 pt2)
        (cons 14 pt3)
  )
)


14.生成一般圖塊

(defun emkblk (ss pt name / i)
  (entmake
    (list '(0 . "block") (cons 2 name) '(70 . 0) (cons 10 pt))
  )
  (repeat (setq i (sslength ss))
    (entmake (cdr (entget (ssname ss (setq i (1- i))))))
  )
  (entmake '((0 . "ENDBLK")))
  (command "_.erase" ss "")
  (entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))
)


15.插入一般圖塊

(entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))


16.生成匿名圖塊

(defun emkunameblk (ss pt / i name)
  (entmake
    (list '(0 . "block") '(2 . "*U") '(70 . 1) (cons 10 pt))
  )
  (repeat (setq i (sslength ss))
    (entmake (cdr (entget (ssname ss (setq i (1- i))))))
  )
  (setq name (entmake '((0 . "ENDBLK"))))
  (command "_.erase" ss "")
  (entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))
  name
)

17.將選擇集中的物件製作成屬性圖塊(單行文字會轉成屬性定義)

(defun emkattblk (ss pt name / ent i)
  (entmake
    (list '(0 . "block") (cons 2 name) '(70 . 2) (cons 10 pt))
  )
  (repeat (setq i (sslength ss))
    (setq ent (entget (ssname ss (setq i (1- i)))))
    (if (= (cdr (assoc 0 ent)) "TEXT")
      (entmake (list '(0 . "ATTDEF")
       (assoc 10 ent)
       (assoc 40 ent)
       (assoc 1 ent)
       (cons 3 (cdr (assoc 1 ent)))
       (cons 2 (cdr (assoc 1 ent)))
       '(70 . 0)
        )
      )
      (entmake (cdr ent))
    )
  )
  (entmake '((0 . "ENDBLK")))
)


18.創建新的圖層

(entmake (list '(0 . "LAYER")
        '(100 . "AcDbSymbolTableRecord")
        '(100 . "AcDbLayerTableRecord")
        '(70 . 0)
        '(6 . "Continuous")
        (cons 2 name)
  )
)


19.創建新的線型

(entmake (list '(0 . "LTYPE")
        '(100 . "AcDbSymbolTableRecord")
        '(100 . "AcDbLinetypeTableRecord")
        (cons 2 "BERDIG 5-545")
        '(3 . "Border ____ ____ ____ ____ ____")
        '(70 . 0)
        '(73 . 2)
        '(40 . 15.0)
        '(49 . 10.0)
        '(74 . 0)
        '
  (49 . -5.0)
        '(74 . 0)
  )
)


20.引線

(entmake (list '(0 . "LEADER")
        '(100 . "AcDbEntity")
        '(100 . "AcDbLeader")
        (cons 10 pt)
        (cons 10 pt1)
        (cons 10 pt2)
  )
)


21.建構線 XLINE

(entmake (list '(0 . "XLINE")
        '(100 . "AcDbEntity")
        '(100 . "AcDbXline")
        (cons 10 pt)
        (cons 11 pt1)
  )
)


22.橢圓

(entmake '((0 . "ELLIPSE")
    (100 . "AcDbEntity")
    (100 . "AcDbEllipse")
    (10 3969.6 4289.14 0.0)
    (11 -1828.47 0.0 0.0)
    (40 . 0.416093)
    (42 . 6.28319)
   )
)


23.點 POINT

(entmake (list '(0 . "POINT") (cons 10 pt)))


24.創建新的文字樣式

(entmake (list '(0 . "STYLE")
        '(100 . "AcDbSymbolTableRecord")
        '(100 . "AcDbTextStyleTableRecord")
        (cons 2 name)
        '(70 . 0)
        (cons 40 h)
        (cons 41 w)
        '(3 . "romans.shx")
        '(4 . "Hztxts.shx")
  )
)


25.創建新的標註樣式

(entmake (list '(0 . "DIMSTYLE")
        '(100 . "AcDbSymbolTableRecord")
        '(100 . "AcDbDimStyleTableRecord")
        '(70 . 0)
        (cons 340 (tblobjname "style" "Standard")) ; 文字樣式名
        (cons 2 "普通螺紋") ; 標註樣式名
        '(3 . "M<>")  ; 標註前綴
        '(40 . 0.0)  ; 標註特徵比例,縮放到佈局
        '(41 . 2.5)  ; 箭頭尺寸
        '(42 . 1.5)  ; 起點偏移量
        '(43 . 5.5)  ; 基線間距
        '(44 . 1.5)  ; 超出尺寸線
        '(47 . 0.000)  ; 上偏差
        '(48 . 0.000)  ; 下偏差
        '(71 . 0)  ; 公差無
        '(77 . 1)  ; 文字在尺寸線上方
        '(74 . 1)  ;
        '(140 . 3.0)  ; 文字高度
        '(141 . -2.5)  ; 圓心標記
        '(144 . 1.0)  ; 測量比例單位
        '(146 . 0.7)  ; 公差高度比例
        '(147 . 1.0)  ; 文字從尺寸線偏移
        '(172 . 2)  ; 尺寸界線間連線
        '(176 . 256)  ; 隨層
        '(177 . 256)  ; 隨層
        '(178 . 256)  ; 隨層
        '(271 . 3)  ; 尺寸標註精度
        '(272 . 3)  ; 公差標註精度
        '(275 . 0)  ; 角度標註制式,十進制。
        '(288 . 1)  ; 手動放置尺寸
  )
)


26.雲形線

(entmake (append
    (list '(0 . "SPLINE")
   '(100 . "AcDbEntity")
   '(100 . "AcDbSpline")
   '(71 . 3)
    )
    (mapcar '(lambda (pt) (cons 11 pt)) ptlst)
  )
)


27.實體SOLID

(entmake (list '(0 . "SOLID")
        (cons 10 pt1)
        (cons 11 pt2)
        (cons 12 pt4)
        (cons 13 pt3)
  )
)

28.生成屬性圖塊(但不插入)

  (entmake (list '(0 . "BLOCK") (cons 2 "116") (cons 10 '(0 0 0)) (cons 70 2)))
   (entmake (list (cons 0 "ATTDEF")
                (cons 1 "") ;預設值 (字串)
                (cons 2 "標籤字串") ;屬性標籤名稱
                (cons 3 "") ;提示字串
                (cons 10 '(0.0 0.0 0.0))
                (cons 70 0) ;屬性旗標, 1 = 屬性不可見
                (cons 40 250) ;文字高度
		  ));
  (entmake (list (cons 0 "ENDBLK") (cons 8 "0")))

29.插入屬性圖塊(但必須已有該圖塊)

 (entmake
   (list
     (cons 0 "INSERT")
     (cons 2 name) ;圖塊名稱
     (cons 10 pt) ;插入點
     (cons 66 1)
   )
 )
 (entmake
   (list
     (cons 0 "ATTRIB")
     (cons 10 pt) ;屬性插入點
     (cons 1 "YourCounter") ;預設值 (字串)
     (cons 2 "NUM") ;屬性標籤名稱
     (cons 40 2.0)
     (cons 70 0)
   ) ;有幾個屬性要有幾個entmake ATTRIB
 )
 (entmake
   (list
     (cons 0 "SEQEND")
   )
 )

30.雲形線 SPLINE

(defun ent-spline (lst-pts closed)
  (entmake
    (append
      (list '(0 . "SPLINE")
	    '(100 . "AcDbEntity")
	    '(100 . "AcDbSpline")
	    (cons 70
		  (if closed
		    11
		    8))
	    '(71 . 3)
	    (cons 74
		  (if closed
		    (1+ (length lst-pts ))
		    (length lst-pts ))))
(if closed
  (cons (cons 11 (last lst-pts ))
	(mapcar '(lambda (x) (cons 11 x))
		lst-pts ))
  (mapcar '(lambda (x) (cons 11 x))
	  lst-pts )))))

留言

這個網誌中的熱門文章

AutoCAD 填充線(剖面線)樣式簡易製作產生器

AutoCAD 如何自訂線型教學

AutoCAD 動態圖塊-如何在所有可見性顯示或隱藏