VisualLisp若干常用代碼


  1 ;;;當前AutoCAD任務中的頂層AutoCAD應用程序對象
  2 (Vlax-Get-Acad-Object)
  3 (Setq acadObject (Vlax-Get-Acad-Object))
  4 
  5 ;;;當前的文檔
  6 (Vla-Get-ActiveDocument (Vlax-Get-Acad-Object))
  7 (Setq acadDocument (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument))
  8 
  9 ;;;當前的布局
 10 (Vla-Get-ActiveLayout (Vla-Get-ActiveDocument (Vlax-Get-Acad-Object)))
 11 (Setq activeLayout (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'ActiveLayout ))
 12 
 13 ;;;模型空間對象
 14 (Vla-Get-ModelSpace (Vla-Get-ActiveDocument (Vlax-Get-Acad-Object)))
 15 (Setq mSpace (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'ModelSpace ))
 16 
 17 ;;;圖紙空間對象
 18 (Vla-Get-PaperSpace (Vla-Get-ActiveDocument (Vlax-Get-Acad-Object)))
 19 (Setq pSpace (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'PaperSpace ))
 20 
 21 ;;;當前文檔標注樣式的集合
 22 (Setq DimStyles (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'DimStyles ))
 23 
 24 ;;;當前文檔圖層的集合
 25 (Setq Layers (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'Layers ))
 26 
 27 ;;;當前文檔線型的集合
 28 (Setq Linetypes (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'Linetypes ))
 29 
 30 ;;;當前文檔文字樣式的集合
 31 (Setq textStylesObj (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'TextStyles ))
 32 
 33 ;;;當前文檔塊定義的集合
 34 (setq blocks (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
 35 
 36 ;;;已知文字樣式名稱,獲取該文字樣式對象
 37 (Setq textStyleObj (Vlax-Invoke-Method (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'TextStyles) 'Item "Ecidi_romans"))
 38 
 39 ;;;已知圖層名稱,獲取該圖層對象
 40 (Setq LayObj (Vlax-Invoke-Method (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'Layers) 'Item "0"))
 41 
 42 ;;;已知某圖層對象LayObj,獲取該圖層的名稱
 43 (vla-get-name LayObj)
 44 (Setq LayerName (Vlax-Get LayObj 'Name))
 45 
 46 ;;;已知文字樣式對象名,獲取字體文件、大字體文件
 47 (Setq fontFile (Vlax-Get textStyleObj 'fontFile))
 48 (Setq BigFontFile (Vlax-Get textStyleObj 'BigFontFile))
 49 
 50 ;;;獲取應用程序或文檔的名稱,包括路徑。
 51 (setq fullName (vlax-get (Vla-Get-ActiveDocument (Vlax-Get-Acad-Object)) 'FullName))
 52 (getvar "DWGPREFIX")
 53 (getvar "dwgname")
 54 ;;;DWGPREFIX:存儲圖形的驅動器和文件夾前綴
 55 ;;;DWGNAME:存儲當前圖形的名稱
 56 
 57 ;;;建立選擇集,且篩選圖元類型
 58 (setq ss (ssget '((0 . "TEXT,LINE,LWPOLYLINE"))))
 59 
 60 ;;;已知VLA對象名obj,獲取句柄handle
 61 (setq handle (Vlax-Get obj 'Handle ))
 62 
 63 ;;;已知多段線VLA對象名plineObj,獲取其頂點二維坐標表plineCoordinates
 64 (Setq plineCoordinates (Vlax-Get plineObj 'Coordinates ))
 65 (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget (car (entsel "\nSel Pline"))))
 66 (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget (car (entsel "\nSel Pline")))))
 67 
 68 ;;;獲取圖元類型
 69 (setq szEntType (cdr (assoc 0 (entget (car (entsel))))));;返回值為一個字符串
 70 (setq szObjName (Vlax-Get (Vlax-Ename->Vla-Object (car (entsel))) 'ObjectName));;返回值為一個字符串
 71 (setq nEntType (Vlax-Get (Vlax-Ename->Vla-Object (car (entsel))) 'EntityType));;返回值為一個整數,(= AcText 32)的返回值為T
 72 ;;;《AutoCAD VBA開發精彩實例教程》(張帆 鄭立楷 王華傑 編著)86頁:
 73 ;;;要判斷實體的對象類型,既可以使用ObjectName屬性,又可以使用EntityType屬性。如果使用ObjectName屬性,它的取值是ARX中對應的類的名稱,一般來說,是對象的類型加上AcDb前綴;如果使用EntityType屬性(該屬性在VBA中無法獲得幫助信息,但是確實能夠使用,對它的使用方法,並未獲得權威資料的考證),一般來說可以在對象的類型前面加上Ac前綴。
 74 
 75 ;;;修改單行文字對象的文字樣式
 76 (Vlax-Put-Property (Vlax-Ename->Vla-Object (car (entsel))) 'StyleName "Ecidi_romans" );;返回值為nil
 77 
 78 ;;;獲取單行文字對象的高度
 79 (setq textHeight (Vlax-Get (Vlax-Ename->Vla-Object (car (entsel))) 'Height ))
 80 
 81 ;;;獲取單行文字對象的寬度比例
 82 (setq scaleFactor (Vlax-Get (Vlax-Ename->Vla-Object (car (entsel))) 'ScaleFactor ))
 83 
 84 ;;;改單行文字對象的文字樣式
 85 (Vlax-Put-Property (Vlax-Ename->Vla-Object (car (entsel))) 'StyleName (getvar "Ecidi_romans") )
 86 
 87 ;;;改單行文字對象的內容
 88 (Vlax-Put-Property txtObjName 'TextString "99初名機工888株式會社99")
 89 
 90 ;;;改單行文字對象的顏色
 91 (Vlax-Put-Property txtObjName 'Color 42 )
 92 
 93 ;;;改單行文字對象的對正方式
 94 (Vlax-Put-Property txtObjName 'Alignment 4 )
 95 ;;;Alignment                對正            justifytext命令對正選項
 96 ;;;acAlignmentLeft            0    基線左對齊    L
 97 ;;;acAlignmentCenter        1    基線居中    C
 98 ;;;acAlignmentRight            2    基線右對齊    R
 99 ;;;acAlignmentAligned        3    對齊        A
100 ;;;acAlignmentMiddle        4    中間        M
101 ;;;acAlignmentFit            5    布滿        F
102 ;;;acAlignmentTopLeft        6    左上        TL
103 ;;;acAlignmentTopCenter        7    中上        TC
104 ;;;acAlignmentTopRight        8    右上        TR
105 ;;;acAlignmentMiddleLeft    9    左中        ML
106 ;;;acAlignmentMiddleCenter    10    正中        MC
107 ;;;acAlignmentMiddleRight    11    右中        MR
108 ;;;acAlignmentBottomLeft    12    左下        BL
109 ;;;acAlignmentBottomCenter    13    中下        BC
110 ;;;acAlignmentBottomRight    14    右下        BR
111 ;對齊到 acAlignmentLeft 的文字使用 InsertionPoint 屬性來放置文字。
112 ;對齊到 acAlignmentAligned 或 acAlignmentFit 的文字同時使用 InsertionPoint 以及 TextAlignmentPoint 屬性來放置文字。
113 ;對齊到其它任何位置的文字使用 TextAlignmentPoint 屬性來放置文字。
114 
115 ;;;改單行文字對象的對齊點
116 (Vlax-Put-Property txtObjName 'TextAlignmentPoint (vlax-3D-point midPt) )
117 
118 ;;;改單行文字對象的插入點
119 (Vlax-Put-Property (Vlax-Ename->Vla-Object (car (entsel))) 'InsertionPoint (vlax-3D-point pt) )
120 
121 ;;;獲取圓對象的圓心
122 (setq LstCenter (cdr (assoc 10 (entget (car (entsel))))));返回值為一個三維圓心坐標表
123 (setq variantCenter (Vla-Get-Center circleObj));返回值類型為變體,(vlax-safearray->list (vlax-variant-value (Vla-Get-Center (vlax-ename->vla-object (car (entsel))))))
124 (Setq LstCenter (Vlax-Get circleObj 'Center));返回值為一個三維圓心坐標表
125 
126 ;;;遍歷塊定義中每個圖元
127 (vlax-for obj (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) "塊名")
128     ...
129 )
130 
131 ;;;遍歷當前文檔塊定義的集合,獲取每個塊定義的名稱,並存入表blockNameLst中
132 (setq blocks (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
133 (setq blockNameLst nil)
134 (vlax-for block blocks
135     (setq blockName (Vlax-Get block 'Name ))
136     (setq blockNameLst (append blockNameLst (list blockName)))
137 )
138 
139 ;;;當前文檔中塊定義的個數
140 (Vlax-Get (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'Blocks) 'Count )
141 
142 ;;;第i個塊定義對象
143 (Vlax-Invoke-Method (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'Blocks) 'item i)
144 
145 ;;;第i個塊定義對象的名稱
146 (Vlax-Get (Vlax-Invoke-Method (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'Blocks) 'item i) 'Name )
147 (vla-get-name (Vlax-Invoke-Method (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'Blocks) 'item i))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM