用lisp 算pline 長度,
2 posters
用lisp 算pline 長度,
蘋果爸好,可以幫我看一下,我想要將算出來的值全部再除一個值,然後再顯示,但可選擇,是否要除新的值,且可選擇要除
的數值
謝謝
;;; Hatched area Table sorted by Layer with the Color markers
;;;
(Defun c:POLYLENGHT ( / AllData ss e edata Area_table crow bn area_ ssNH fname clr )
(vl-load-com)
;;; pBe 23Apr2013 ;;;
;;; Mod for FSJ_Mo : Layer instead of Block swatches ;;;
;;; pBe 18Jul2013 ;;;
;;; karpki : Header by filename, m2 05/01/2020 ;;;
;;; Moded by hak_vz for karpki: color markers 12/01/2020 ;;;
(if
(setq AllData nil ssNH (ssadd)
ss (ssget '((0 . "POLYLINE,LWPOLYLINE")))
)
(progn
(repeat (setq i (sslength ss))
(setq e (vlax-ename->vla-object (ssname ss (Setq i (1- i)))))
(setq edata
(list
(vlax-get e 'Layer)
(IF
(not
(vl-catch-all-error-p
(setq area_ (vl-catch-all-apply 'vla-get-length (list E)))
)
)
area_
(progn (ssadd (ssname ss i) ssNH) 0.0)
)
)
)
(setq AllData
(if (setq f (assoc (car edata) AllData))
(subst (list (car f) (+ (cadr f) (cadr edata))) f Alldata)
(cons edata AllData)
)
)
)
(setq AllData (vl-sort AllData '( lambda (m n) (< (Car m) (car n))))) ;cadr вместо car если нужна сортировка по площади; знак < указывает на сортировку от меньшего к большему
(setq Area_table
(vlax-invoke
(vlax-get (vla-get-ActiveLayout
(vla-get-activedocument (vlax-get-acad-object))
)
'Block
)
'Addtable
(getpoint "\nPick point for Table:")
2 3 1500 7000
)
)
(setq fname(substr (setq str (getvar "dwgname")) 1 (- (strlen str) 4))) ;get Header name from file name
(vla-settext Area_table 0 0 fname) ;set header name
(vla-setcelltextheight Area_table 0 0 500.0)
(mapcar '(lambda (y)
(vla-settext Area_table 1 (car y) (cadr y))
(vla-setcelltextheight Area_table 1 (car y) 500.0) ;second row text height
)
(list '(0 "Category") '(1 "Total Length") '(2 "Colour"))
)
(foreach d AllData
(vla-insertrows
Area_table
(1+ (setq crow (vla-get-rows Area_table)))
1500 ;cell height from 4-th row
1
)
(vla-setcelltextheight Area_table crow 0 500.0) ;set Layer name (Category)
(vla-setCellAlignment Area_table crow 0 5)
(vla-setCellValue Area_table crow 0 (car d))
(vla-setCellValue Area_table crow 1 (cadr d)) ;set Area
(vla-setcelltextheight Area_table crow 1 500.0)
(vla-setCellAlignment Area_table crow 1 5)
(vla-setcellformat Area_table crow 1 "%lu2%pr3%ps[, --]")
;--------------
(setq x(strcat "AutoCAD.AcCmColor." (substr (getvar 'Acadver) 1 2))) ;set Color markers
(setq clr (vlax-create-object x))
(vla-put-colorindex clr (cdr (assoc 62 (tblsearch "layer" (car d)))))
(vla-SetCellBackgroundColor Area_table crow 2 clr)
;Possible editions if doesn't work :
;For Acad2015, use AutoCAD.AcCmColor.20
; - > (setq x "AutoCAD.AcCmColor.20")
;For Acad2016/17, use AutoCAD.AcCmColor.21
; - > (setq x "AutoCAD.AcCmColor.21")
;For Acad2018, use AutoCAd.AcCmColor.22
; - > (setq x "AutoCAD.AcCmColor.22")
;For Acad2019, use AutoCAD.AcCmColor.23
; - > (setq x "AutoCAD.AcCmColor.23")
;-------------------
)
)
)
(princ)
)
的數值
謝謝
;;; Hatched area Table sorted by Layer with the Color markers
;;;
(Defun c:POLYLENGHT ( / AllData ss e edata Area_table crow bn area_ ssNH fname clr )
(vl-load-com)
;;; pBe 23Apr2013 ;;;
;;; Mod for FSJ_Mo : Layer instead of Block swatches ;;;
;;; pBe 18Jul2013 ;;;
;;; karpki : Header by filename, m2 05/01/2020 ;;;
;;; Moded by hak_vz for karpki: color markers 12/01/2020 ;;;
(if
(setq AllData nil ssNH (ssadd)
ss (ssget '((0 . "POLYLINE,LWPOLYLINE")))
)
(progn
(repeat (setq i (sslength ss))
(setq e (vlax-ename->vla-object (ssname ss (Setq i (1- i)))))
(setq edata
(list
(vlax-get e 'Layer)
(IF
(not
(vl-catch-all-error-p
(setq area_ (vl-catch-all-apply 'vla-get-length (list E)))
)
)
area_
(progn (ssadd (ssname ss i) ssNH) 0.0)
)
)
)
(setq AllData
(if (setq f (assoc (car edata) AllData))
(subst (list (car f) (+ (cadr f) (cadr edata))) f Alldata)
(cons edata AllData)
)
)
)
(setq AllData (vl-sort AllData '( lambda (m n) (< (Car m) (car n))))) ;cadr вместо car если нужна сортировка по площади; знак < указывает на сортировку от меньшего к большему
(setq Area_table
(vlax-invoke
(vlax-get (vla-get-ActiveLayout
(vla-get-activedocument (vlax-get-acad-object))
)
'Block
)
'Addtable
(getpoint "\nPick point for Table:")
2 3 1500 7000
)
)
(setq fname(substr (setq str (getvar "dwgname")) 1 (- (strlen str) 4))) ;get Header name from file name
(vla-settext Area_table 0 0 fname) ;set header name
(vla-setcelltextheight Area_table 0 0 500.0)
(mapcar '(lambda (y)
(vla-settext Area_table 1 (car y) (cadr y))
(vla-setcelltextheight Area_table 1 (car y) 500.0) ;second row text height
)
(list '(0 "Category") '(1 "Total Length") '(2 "Colour"))
)
(foreach d AllData
(vla-insertrows
Area_table
(1+ (setq crow (vla-get-rows Area_table)))
1500 ;cell height from 4-th row
1
)
(vla-setcelltextheight Area_table crow 0 500.0) ;set Layer name (Category)
(vla-setCellAlignment Area_table crow 0 5)
(vla-setCellValue Area_table crow 0 (car d))
(vla-setCellValue Area_table crow 1 (cadr d)) ;set Area
(vla-setcelltextheight Area_table crow 1 500.0)
(vla-setCellAlignment Area_table crow 1 5)
(vla-setcellformat Area_table crow 1 "%lu2%pr3%ps[, --]")
;--------------
(setq x(strcat "AutoCAD.AcCmColor." (substr (getvar 'Acadver) 1 2))) ;set Color markers
(setq clr (vlax-create-object x))
(vla-put-colorindex clr (cdr (assoc 62 (tblsearch "layer" (car d)))))
(vla-SetCellBackgroundColor Area_table crow 2 clr)
;Possible editions if doesn't work :
;For Acad2015, use AutoCAD.AcCmColor.20
; - > (setq x "AutoCAD.AcCmColor.20")
;For Acad2016/17, use AutoCAD.AcCmColor.21
; - > (setq x "AutoCAD.AcCmColor.21")
;For Acad2018, use AutoCAd.AcCmColor.22
; - > (setq x "AutoCAD.AcCmColor.22")
;For Acad2019, use AutoCAD.AcCmColor.23
; - > (setq x "AutoCAD.AcCmColor.23")
;-------------------
)
)
)
(princ)
)
張景閎 在 2024-12-08, 09:36 作了第 2 次修改
張景閎- 專屬會員
- 文章總數 : 10
年齡 : 55
來自 : 台北
職業 : 技師
愛好 : 繪圖
個性 : 遊山玩水
使用年資 : 10年
使用版本 : acad 2008
經驗值 : 5462
威望值 : 0
注冊日期 : 2010-04-12
回復: 用lisp 算pline 長度,
請補充你的需求畫面及程式碼,比較能清楚你的需求,才能討論如何改寫
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
這個論壇的權限:
您 無法 在這個版面回復文章*** disclaimer. 免責聲明 ***
“AUTOCAD®, and AUTODESK® are registered trademarks of Autodesk, Inc., its subsidiaries, and/or its affiliates.”
“This website is independent of Autodesk, Inc., and is not affiliated with, authorized, endorsed, sponsored, or otherwise approved of by Autodesk, Inc.”
“AUTOCAD® 和 AUTODESK® 是 Autodesk, Inc. 及其子公司和/或關聯公司的註冊商標。此網站與 Autodesk, Inc. 無關,並且未經 Autodesk, Inc. 授權、認可、贊助或以其他方式批准”
“AutoCAD 顧問論壇為台灣創立之網站,我們以熱忱服務 AutoCAD 用戶,致力於技術討論、知識分享及教學影片(課程)等內容,為 AutoCAD 社群提供支持與貢獻”