Info | File |
Tác giả: phamthanhbinh
Bài viết gốc: 106075
Tên lệnh: chsize |
Viết lisp theo yêu cầu [phần 2]
Chào bạn nguyentuyen6,
Đây là lisp mình bổ sung đoạn chỉnh sửa khoảng cách giữa đường kích thước và text kích thước. Do dimension có cấu tạo rất phức tạp mà mình chưa đủ khả năng giải quyết nên lisp này chỉ có tác dụng với cái dim style mà bạn đã post nhưng trước khi chạy lisp bạn phải modìy nó thành dạng text above đường kích thước.
Bạn có thể so sánh sự khác nhau giữa... >>
Chào bạn nguyentuyen6,
Đây là lisp mình bổ sung đoạn chỉnh sửa khoảng cách giữa đường kích thước và text kích thước. Do dimension có cấu tạo rất phức tạp mà mình chưa đủ khả năng giải quyết nên lisp này chỉ có tác dụng với cái dim style mà bạn đã post nhưng trước khi chạy lisp bạn phải modìy nó thành dạng text above đường kích thước.
Bạn có thể so sánh sự khác nhau giữa hai đoạn lisp trước và sau khi sửa để thấy rõ cách làm của mình. Từ đó bạn có thể tùy chỉnh lisp cho các dim style khác của bạn.
Do trình độ có hạn nên chưa thể giải quyết triệt để vấn đề của bạn, mong bạn thông cảm.
<<
|
Filename: 106075_chsize.lsp
|
|
Tác giả: conghoa
Bài viết gốc: 341749
Tên lệnh: linkt |
Lisp link giá trị đối tượng
lisp này copy text từ đối tượng này sang đối tượng khác và tự động thay đổi khi đối tượng nguồn thay đổi,không chỉ chọn đc 1 đối tượng đích mà còn chọn nhiều giá trị đích hơn
|
Filename: 341749_linkt.lsp
|
|
Tác giả: Tot77
Bài viết gốc: 317261
Tên lệnh: tty+%C2%A0 |
Lisp Copy Text Cad sang Excel
Cái này cũng gần giống cái trên.
(defun c:tty (/ ss ss1 y xlApp xlCells row col i iPt)
(vl-load-com)
(setq xlApp (vlax-get-or-create-object "Excel.Application")
xlCells (vlax-get-property
(vlax-get-property
(vlax-get-property
(vlax-invoke-method
...
>> Cái này cũng gần giống cái trên.
(defun c:tty (/ ss ss1 y xlApp xlCells row col i iPt)
(vl-load-com)
(setq xlApp (vlax-get-or-create-object "Excel.Application")
xlCells (vlax-get-property
(vlax-get-property
(vlax-get-property
(vlax-invoke-method
(vlax-get-property xlApp "Workbooks")
"Add") "Sheets") "Item" 1) "Cells") row 0 col 1)
(vla-put-visible xlApp :vlax-true)
(while (setq ss (ssget '((0 . "*TEXT"))))
(setq ss (mapcar '(lambda (x) (list (vlax-get (vlax-ename->vla-object x) 'InsertionPoint)
(vlax-ename->vla-object x)))
(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(while ss
(setq ss (vl-sort ss '(lambda (x y) (> (cadr (car x)) (cadr (car y)))))
ss1 (vl-remove-if-not '(lambda (x) (equal (cadr (caar ss)) (cadr (car x)) 0.2)) ss)
ss1 (vl-sort ss1 '(lambda (x y) (< (caar x) (caar y))))
ss (vl-remove-if '(lambda (x) (member x ss1)) ss)
)
(foreach z ss1
(setq iPt (car z)
y (list (vla-get-TextString (last z)) (rtos (car iPt) 2 2) (rtos (cadr iPt) 2 2) (rtos (caddr iPt) 2 2))
)
(if (> row 65536) (setq col 5))
(setq i -1 row (1+ row))
(mapcar '(lambda (x) (vlax-put-property xlCells "Item" row (+ col (setq i (1+ i))) x)) y)
)
)
)
(mapcar 'vlax-release-object (list xlApp xlCells))
(princ)
)
<<
|
Filename: 317261_tty+%C2%A0.lsp
|
|
Tác giả: pphung183
Bài viết gốc: 342089
Tên lệnh: fixs fixstyle | |
Tác giả: dckonhi1987
Bài viết gốc: 342172
Tên lệnh: 1 11 12 13 14 15 16 17 18 19 | |
Tác giả: phamthanhbinh
Bài viết gốc: 344324
Tên lệnh: atc |
Cộng trừ nhân chia các số trong block att
Hề hề hề,
Không biết cái này có đúng ý bạn chưa???
>>
Hề hề hề,
Không biết cái này có đúng ý bạn chưa???
http://www.cadviet.com/upfiles/4/5194_attcalculation_1.lsp
(defun c:atc (/ goc cal e1 en ph)
(setq goc (atof (cdr (assoc 1 (entget (car (nentsel "\n Chon text goc tinh toan")))))))
(setq cal (getstring "\n Chon phep tinh toan <+ - * /> : "))
(while (setq e1 (nentsel "\n Chon text can tinh toan"))
(setq ph (atof (cdr (assoc 1 (entget (car e1 ))))))
(cond
((= cal "+") (setq goc (+ goc ph)))
(( = cal "-") (setq goc (- goc ph)))
((= cal "*") (setq goc (* goc ph)))
((= cal "/") (setq goc (/ goc ph)))
(T nil)
)
goc
)
(setq en (car (nentsel "\n Chon text can thay the")))
(entmod (subst (cons 1 (rtos goc 2 2)) (assoc 1 (entget en)) (entget en)))
(entupd en)
)
<<
|
Tác giả: gia_bach
Bài viết gốc: 345353
Tên lệnh: thkl |
Nh? vi?t lisp thông kê giá tr? trong block ATT
Nhờ cả nhà viết giúp mình lisp thống kê các giá trị trong block ATT như sau:
- Đánh lệnh THT, select chọn các block att cần thống kê giá trị
- Chọn một giá trị trong block att để làm giá trị lọc
- Chọn số thứ tự cột để lấy giá trị tổng các att có giá trị lọc như trên
- Chọn một...
>>
Nhờ cả nhà viết giúp mình lisp thống kê các giá trị trong block ATT như sau:
- Đánh lệnh THT, select chọn các block att cần thống kê giá trị
- Chọn một giá trị trong block att để làm giá trị lọc
- Chọn số thứ tự cột để lấy giá trị tổng các att có giá trị lọc như trên
- Chọn một Dtext hoặc Mtext để gán kết quả
Mọi người xem bản vẽ sẽ hiểu được ý của mình:
http://www.cadviet.com/upfiles/4/136880_thong_ke.dwg
Block att mình có gán giá trị Field nha các bạn
Mong mọi nguời viết giúp lisp hoặc có phương án nào để tổng hợp như trên thì xin chỉ giúp
Cảm ơn mọi người trước nha!
Dùng thử Lisp này xem sao :
(defun c:ThKl (/ doc)
(vl-load-com)
(princ "\nChon Block can tong hop :")
(if (ssget (list (cons 0 "INSERT")(cons 66 1)))
(tkatt (vla-get-ActiveSelectionSet (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))))
(vla-get-modelspace doc) "DK" "TCD" "TKL" )
(princ "\nKhong chon duoc Block thuoc tinh."))
(princ))
(defun tkatt (ssets msp idTag val1tag val2tag / asoc h i id lst pt row tblobj val1 val2 width)
;; By : Gia_Bach, www.CadViet.com 2015 ;;
(vlax-for obj ssets
(setq id nil val1 nil val2 nil)
(foreach att (vlax-invoke obj 'GetAttributes)
(cond
( (= (vla-get-TagString att) idTag)
(setq id (vla-get-TextString att)) )
( (= (vla-get-TagString att) val1Tag)
(setq val1 (vla-get-TextString att)) )
( (= (vla-get-TagString att) val2Tag)
(setq val2 (vla-get-TextString att)) ) ))
(if (and id (distof id 2) val1 val2(setq val1 (distof val1 2))(setq val2 (distof val2 2)))
(if (setq asoc (assoc id lst))
(setq lst (subst (cons id (list (+ val1 (car(cdr asoc))) (+ val2 (cadr(cdr asoc))))) asoc lst))
(setq lst (append lst (list (cons id (list val1 val2)))) )) ))
(cond
( (not lst )
(princ "\nKhong tim duoc so lieu.") )
( (> (atof (substr (getvar "ACADVER") 1 4)) 16.0)
(if (setq pt (getpoint "\nDiem dat Bang tong hop:"))
(progn
(setq h 1.8 width (* 6 h)
TblObj (vla-addtable msp (vlax-3d-point pt) (+ (length lst) 2) 4 (* 2 h) width))
(vla-put-regeneratetablesuppressed TblObj :vlax-true)
(vla-put-vertcellmargin TblObj (* 0.75 h))
(mapcar '(lambda (x)(vla-setTextHeight TblObj x h))
(list acTitleRow acHeaderRow acDataRow) )
(mapcar '(lambda (x)(vla-setAlignment TblObj x 8))
(list acTitleRow acHeaderRow acDataRow))
(vl-catch-all-error-p (vl-catch-all-apply (function(lambda () (vla-MergeCells TblObj 0 0 0 3)) )))
(vla-setText TblObj 0 0 "Bang tong hop")
(vla-setText TblObj 1 0 "STT")
(vla-setText TblObj 1 1 idTag)
(vla-setText TblObj 1 2 val1Tag)
(vla-setText TblObj 1 3 val2Tag)
(setq row 2 i 1)
(foreach pt (vl-sort lst '(lambda (x y) (< (car x) (car y))))
(vla-setText TblObj row 0 (itoa i))
(vla-setText TblObj row 1 (car pt))
(vla-setText TblObj row 2 (rtos(car(cdr pt))2 2))
(vla-setText TblObj row 3 (rtos(cadr(cdr pt))2 2))
(setq row (1+ row) i (1+ i)) )
(vla-put-regeneratetablesuppressed TblObj :vlax-false)
(vlax-release-object TblObj) )))
( t
(foreach it (vl-sort lst '(lambda (x y) (< (car x) (car y))))
(princ (strcat "\n"(car it) " : " (rtos(car(cdr it))2 2) " : " (rtos(cadr(cdr it))2 2)))) ) )
)
<<
|
Filename: 345353_thkl.lsp
|
|
Tác giả: phamthanhbinh
Bài viết gốc: 345460
Tên lệnh: thkl |
Lisp thông kê giá trị trong block ATT
- Đánh lệnh THT, select chọn các block att cần thống kê giá trị
- Chọn một giá trị trong block att để làm giá trị lọc
- Chọn số thứ tự cột để lấy giá trị tổng các att có giá trị lọc như trên
- Chọn một Dtext hoặc Mtext để gán kết quả
|
Filename: 345460_thkl.lsp
|
|
Tác giả: huaductiep
Bài viết gốc: 317807
Tên lệnh: tty+%C2%A0 |
Lisp Copy Text Cad sang Excel
Lisp #11 này rất ok rồi. Nhờ các bác sửa giúp mình thêm tính năng chia các giá trị text theo các layer khác nhau ra các cột khác nhau và vẫn theo thứ tự như vậy.
Như trong file cad mình gửi thì có 3 layer. Mình vẫn thao tác như cũ, nhưng text thuộc layer nào thì xuất kqua ra cùng lúc 3 cột khác nhau cho 3 layer. Cách xuất thì vẫn y như lisp TTY vậy.
Nếu bác làm dc vậy thì bác làm giúp mình cả...
>> Lisp #11 này rất ok rồi. Nhờ các bác sửa giúp mình thêm tính năng chia các giá trị text theo các layer khác nhau ra các cột khác nhau và vẫn theo thứ tự như vậy.
Như trong file cad mình gửi thì có 3 layer. Mình vẫn thao tác như cũ, nhưng text thuộc layer nào thì xuất kqua ra cùng lúc 3 cột khác nhau cho 3 layer. Cách xuất thì vẫn y như lisp TTY vậy.
Nếu bác làm dc vậy thì bác làm giúp mình cả với trường hợp lisp TTX trên tại #6 kia nữa với nha. Thanks bác nhiều ạ ^^
http://www.cadviet.com/upfiles/3/64997_tty_new.dwg
Cái này cũng gần giống cái trên.
(defun c:tty (/ ss ss1 y xlApp xlCells row col i iPt)
(vl-load-com)
(setq xlApp (vlax-get-or-create-object "Excel.Application")
xlCells (vlax-get-property
(vlax-get-property
(vlax-get-property
(vlax-invoke-method
(vlax-get-property xlApp "Workbooks")
"Add") "Sheets") "Item" 1) "Cells") row 0 col 1)
(vla-put-visible xlApp :vlax-true)
(while (setq ss (ssget '((0 . "*TEXT"))))
(setq ss (mapcar '(lambda (x) (list (vlax-get (vlax-ename->vla-object x) 'InsertionPoint)
(vlax-ename->vla-object x)))
(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(while ss
(setq ss (vl-sort ss '(lambda (x y) (> (cadr (car x)) (cadr (car y)))))
ss1 (vl-remove-if-not '(lambda (x) (equal (cadr (caar ss)) (cadr (car x)) 0.2)) ss)
ss1 (vl-sort ss1 '(lambda (x y) (< (caar x) (caar y))))
ss (vl-remove-if '(lambda (x) (member x ss1)) ss)
)
(foreach z ss1
(setq iPt (car z)
y (list (vla-get-TextString (last z)) (rtos (car iPt) 2 2) (rtos (cadr iPt) 2 2) (rtos (caddr iPt) 2 2))
)
(if (> row 65536) (setq col 5))
(setq i -1 row (1+ row))
(mapcar '(lambda (x) (vlax-put-property xlCells "Item" row (+ col (setq i (1+ i))) x)) y)
)
)
)
(mapcar 'vlax-release-object (list xlApp xlCells))
(princ)
)
<<
|
Filename: 317807_tty+%C2%A0.lsp
|
|
Tác giả: Nguyen Hoanh
Bài viết gốc: 10401
Tên lệnh: | |
Tác giả: nhimret
Bài viết gốc: 346778
Tên lệnh: 44 | |
Tác giả: Doan Van Ha
Bài viết gốc: 346874
Tên lệnh: aob |
Lisp add đối tượng vào block
Đầu vào: Lisp : add_ob_block
Gõ Lệnh: aob
Chọn block cần chỉnh sửa -> enter
Chọn đối tượng muốn thêm vào block -> enter
Kết quả block add thêm đối tượng đã chọn như mong muốn ( Ví dụ: tỷ lệ scale của block là 1.5 theo cả 3 tọa độ X, Y, Z thì add đối tượng ngoài không gian model vào cũng vẫn là tỷ lệ đó
|
Tác giả: VUVUZELA
Bài viết gốc: 105738
Tên lệnh: aboutvld vld |
Xem giúp đoạn lisp của mình vẽ pline có nhập chiều dài và góc
"Dục Tốc Bất Đạt"
Chú cứ từ từ, khoan sử dụng menuload cái đã
Khi nào sử dụng thành thạo và câu lệnh Autolisp chạy OK thì mới lồng tiếp câu lệnh load menu
Chú thử riêng cái này anh mới sửa thử xem nhé
Chỉ cần thay đường dẫn của biến path của riêng chú vào
Bỏ các file *.DCL *.dwg của block vào là OK
Có j pm anh
Bon ... on ... n
|
Filename: 105738_aboutvld_vld.lsp
|
|
Tác giả: hungdlcm
Bài viết gốc: 105721
Tên lệnh: remvld aboutvld vld |
Xem giúp đoạn lisp của mình vẽ pline có nhập chiều dài và góc
Các bác ui! Sau 2 ngày mày mò và nhờ sự chỉ bảo của các bác em đã làm được như dưới đây nhưng bây jờ còn 1 lỗi gì mà em mò hoài không ra mong các bác xem và chỉnh júp em.
Đầu tiên đây là 3 file của em gồm có file VLD.DCL, VLD.mns và VLD.pls:
1/ FILE VLD.DCL:
Và đây là giao diện hộp thoại để người dùng nhập số liệu của em:
>> Các bác ui! Sau 2 ngày mày mò và nhờ sự chỉ bảo của các bác em đã làm được như dưới đây nhưng bây jờ còn 1 lỗi gì mà em mò hoài không ra mong các bác xem và chỉnh júp em.
Đầu tiên đây là 3 file của em gồm có file VLD.DCL, VLD.mns và VLD.pls:
1/ FILE VLD.DCL:
Và đây là giao diện hộp thoại để người dùng nhập số liệu của em:
http://i375.photobucket.com/albums/oo197/hung_dlcm/dialog.png
Mô tả cách thức hoạt động của chương trình:
- Khi load file VLD.pls sẽ load ra Menu Ve Luoi Dien trong ACAD.
- Chọn Menu Ve Luoi Dien -> chọn Bat Dau Ve
- Hiển thị hộp thoại. Người dùng nhập vào Khoảng Cách, nhập Hướng Góc, click vào 1 trong 2 radio button để chọn 1 loại trụ (mỗi loại trụ em đã tạo 1 block sẵn, ứng với Trụ 12m sẽ là block "Tru12" và ứng với Trụ 10m sẽ là block "Tru10").
- Click vào 1 trong 2 radio button để chọn 1 điểm chèn (Chọn "Diem 1" thì sẽ chèn block trụ điện mà người dùng đã click chọn ở bước trên vào điểm thứ nhất (P1) của đường PLine; Chọn "Diem 2" thì sẽ chèn vào điểm thứ 2 (P2) của đường Pline)
- Click OK -> người dùng click chọn điểm đầu -> vẽ đường Pline và chèn block trụ điện vào điểm mà người dùng đã chọn ở bước trên.
- Lặp lại quá trình từ mở hộp thoại nhập cho đến khi nào người dùng click Cancel.
Vấn đề vấp phải là:
- Các bước thực hiện đều OK ngoại trừ việc chèn block trụ điện vào đường Pline.
- Khi vẽ đường Pline đầu tiên thì CAD vẫn vẽ đúng đường Pline, vẫn có chèn block trụ điện nhưng chèn không đúng vị trí, block trụ điện được chèn ở 1 vị trí ngoài đường Pline (???).
- Khi hộp thoại được lặp lại để vẽ lần thứ 2 và các lần tiếp theo thì block trụ được chèn vào đúng điểm đầu của các đường Pline nhưng tùy chọn chèn block trụ điện vào "Diem 2" hoàn toàn không có tác dụng (!!!???).
=> Nói chung vấn đề nằm ở chỗ chèn block trụ điện không được đúng vị trí như ta mong muốn. Và 1 vấn đề nữa là không bít sao mà sau khi vẽ đường PLine đầu tiên vẫn hiện lên hộp thoại để nhập tiếp nhưng CAD còn hiện thêm thông báo "_VLD Unknown command "VLD". Press F1 for help." (???) Như zạ là em sai chỗ nào zạ???
Các bác copy các file của em về test thử júp em nhé!! xem júp em là em đã viết sai code chỗ nào zạ!? về phần block trụ điện vì trong bản vẽ của các bác chắc chắn sẽ chưa có 2 block là "Tru12" và "Tru10" thì các bác cứ tạo 2 block có tên y như vậy nhé, còn hình dạng block này như thế nào thì tùy các bác, miễn sao đại khái có block để test thử xem nó được chèn thế nào thui!!
Em nói dài dòng chứ thực ra các bác lúc test thử chắc sẽ hỉu "ý đồ" của em thui nhỉ! Mong các bác "ra tay nghĩa hiệp mổ xẻ" jùm cái đoạn LISP của em nhé!
Đang đợi REPLY của các bác! Trăm ngàn lần cảm ơn các bác!! <<
|
Filename: 105721_remvld_aboutvld_vld.lsp
|
|
Tác giả: snowman.hms
Bài viết gốc: 348842
Tên lệnh: edm |
Lisp đổi màu text sau khi sửa
;; Mark EDited texts,mtexs,attribs,dimensions...
(defun c:EDM (/ ent enx s str _sel LM:editbox LM:startundo LM:endundo
LM:acdoc *error*
)
;; Edit Box - Lee Mac
;; Displays a DCL Edit Box to obtain a string from the user
;; str - [str] Initial value to display ("" for none)
;; Returns: [str] Edit box contents if user pressed OK, else nil
(defun LM:editbox (str / han)
(and (< 0 (setq han (load_dialog "acad")))
...
>>
;; Mark EDited texts,mtexs,attribs,dimensions...
(defun c:EDM (/ ent enx s str _sel LM:editbox LM:startundo LM:endundo
LM:acdoc *error*
)
;; Edit Box - Lee Mac
;; Displays a DCL Edit Box to obtain a string from the user
;; str - [str] Initial value to display ("" for none)
;; Returns: [str] Edit box contents if user pressed OK, else nil
(defun LM:editbox (str / han)
(and (< 0 (setq han (load_dialog "acad")))
(new_dialog "acad_txtedit" han)
(set_tile "text_edit" str)
(action_tile "text_edit" "(setq str $value)")
(if (zerop (start_dialog))
(setq str nil)
)
)
(if (< 0 han)
(unload_dialog han)
)
str
)
(defun *error* (msg)
(LM:endundo (LM:acdoc))
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **"))
)
(princ)
)
;; Start Undo - Lee Mac
;; Opens an Undo Group.
(defun LM:startundo (doc)
(LM:endundo doc)
(vla-startundomark doc)
)
;; End Undo - Lee Mac
;; Closes an Undo Group.
(defun LM:endundo (doc)
(while (= 8 (logand 8 (getvar 'undoctl)))
(vla-endundomark doc)
)
)
;; Active Document - Lee Mac
;; Returns the VLA Active Document Object
(defun LM:acdoc nil
(eval (list 'defun
'LM:acdoc
'nil
(vla-get-activedocument (vlax-get-acad-object))
)
)
(LM:acdoc)
)
;; Select Text/Mtext/Attrib/Dimensiontext only
(defun _sel (/ ent str)
(while
(progn
(setvar 'errno 0)
(setq ent (nentsel "\nSelect Text/Mtext/Attrib/Dimension..."))
(cond
((= 7 (getvar 'errno)) (princ "\nMissed, try again."))
((= 'ename (type (car ent)))
(if (wcmatch (cdr (assoc 0 (setq enx (entget (car ent)))))
"TEXT,MTEXT,ATTRIB"
)
(progn
(cond
((= 2 (length ent))
(setq ent (vlax-ename->vla-object (car ent)))
nil
)
((and
(= 4 (length ent))
(= "DIMENSION"
(cdr
(assoc 0 (entget (setq ent (car (last ent)))))
)
)
)
(setq ent (vlax-ename->vla-object ent))
nil
)
(t)
)
)
(princ "\nInvalid object selected.")
)
)
)
)
)
ent
)
;; ===============================================================;;
(LM:startundo (LM:acdoc))
(alert "Please Enter the Color code: \n(ex: 1=Red; 2=Yellow...)")
(if (or (setq cl (rem (getint) 256))
(setq cl 1)
)
(while (setq ent (_sel))
(if (and (setq str (LM:editbox (setq s (cdr (assoc 1 enx)))))
(/= str s)
)
(progn
(if (wcmatch (vla-get-objectname ent) "AcDb*Dimension")
(progn
(vlax-put ent 'TextOverride str)
(vlax-put ent 'textcolor cl)
)
(progn
(vlax-put ent 'textstring str)
(vlax-put ent 'color cl)
)
)
)
(princ (strcat "\nThe Text object unchanged!!!"
"\nPlease try again!!!"
)
)
)
)
)
(LM:endundo (LM:acdoc))
(princ)
)
;|«Visual LISP© Format Options»
(70 2 1 2 nil "_eof " 100 9 0 0 1 T T T T)
;*** DO NOT add text below the comment! ***|;
<<
|
Tác giả: huunhantvxdts
Bài viết gốc: 349998
Tên lệnh: xkl |
Lisp xuẩt khối lượng trắc ngang qua excel
up lại cho bạn
(defun c:xkl (/ dem1 lstkm point kcach point1 pointtim diemtam xuongdong kt)
(setvar "CMDECHO" 0)
(defun sosanh (e1 e2 / p1 p2)
(setq p1 (car e1)
p2 (car e2)
)
(if (equal (cadr p1) (cadr p2) fuzz)
(< (car p1) (car p2))
(> (cadr p1) (cadr p2))
)
)
(defun inra(lst)
(setq index 1
oldy nil)
(foreach en lst
(if (equal oldy (cadr (car en)) fuzz)
(progn
(if (< index 4)
(progn
(princ...
>> up lại cho bạn
(defun c:xkl (/ dem1 lstkm point kcach point1 pointtim diemtam xuongdong kt)
(setvar "CMDECHO" 0)
(defun sosanh (e1 e2 / p1 p2)
(setq p1 (car e1)
p2 (car e2)
)
(if (equal (cadr p1) (cadr p2) fuzz)
(< (car p1) (car p2))
(> (cadr p1) (cadr p2))
)
)
(defun inra(lst)
(setq index 1
oldy nil)
(foreach en lst
(if (equal oldy (cadr (car en)) fuzz)
(progn
(if (< index 4)
(progn
(princ "," fid)
(setq index (1+ index))
)
(progn
(setq index 1)
(princ "\n" fid)
)
)
)
(progn
(if hangdau
(progn (setq index 1)
(princ "\n" fid))
(setq hangdau t))
)
)
(princ (cdr en) fid)
(setq oldy (cadr (car en)))
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(prompt "\nChon doi tuong coc hoac ly trinh lam lop chuan.")
(setq dtltc (car (entsel)))
(setq lop1 (cdr (assoc 8 (entget dtltc))))
(prompt "\nChon doi tuong ghi dien tich lam lop chuan.")
(setq lop2 (car (entsel)))
(setq lop2 (cdr (assoc 8 (entget lop2))))
(prompt "\nChon trac ngang.")
(setq danhsachkm (acet-ss-to-list (ssget (list (cons 8 lop1) (cons 1 "K*")))))
(setq lstkm (mapcar '(lambda (e) (cons (cdr (assoc 11 (entget e))) (cdr (assoc 1 (entget e))))) danhsachkm))
(setq lstkm (vl-sort lstkm '(lambda(x y / tmx tmy) (setq tmx (timlt x) tmy (timlt y))
(or (< (car tmx) (car tmy))
(and (= (car tmx) (car tmy)) (< (last tmx) (last tmy)))))))
(setq ss (acet-ss-to-list (ssget "X" '((0 . "LINE")(8 . "ENTTNTUNHIEN")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq fn (getfiled "Chon file de save" "" "csv" 1))
(setq fid (open fn "w"))
(setq dem1 1)
(setq sodt (length danhsachkm)
ta
(chr 8)
stxoa (strcat ta ta ta ta ta ta ta ta ta ta ta ta ta ta
ta ta ta ta ta ta)
stxuly "Xu ly duoc: "
ptcu nil
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(foreach ent lstkm
(setq point (car ent))
(setq kcach (distance point (cdr (assoc 11 (entget (nth 0 ss))))))
(foreach enxt ss
(setq point1 (cdr (assoc 11 (entget enxt))))
(setq toay (cadr point1))
(if (and (< (distance point1 point) kcach) (< toay (cadr point)) (equal (car point1) (car point) 1))
(progn
(setq pointtim (cdr (assoc 11 (entget enxt))))
(setq kcach (distance pointtim point))
)
)
)
(setq diemtam (polar pointtim (/ pi 2) (/ kcach 2)))
;;; zoom den tung trac ngang nhung khong thay no chay
;;;;
(vla-ZoomCenter (vlax-get-acad-object) (vlax-3D-point diemtam) (+ kcach 50))
;(command "ZOOM" "C" diemtam (+ kcach 20))
(setq dd (acet-ss-to-list (ssget "C" (polar pointtim (/ pi 4) 0.1 ) (polar pointtim (/ pi -4) 0.1 ) '((0 . "LINE")(8 . "ENTTNTUNHIEN")))))
(setq diemdau (cdr (assoc 10 (entget (car dd)))))
(setq diemcuoi (cdr (assoc 11 (entget (car dd)))))
(setq diemtren (polar point (/ pi 2) 50))
(command ".RECTANGLE" diemdau diemtren)
(setq text (ssget "C" diemdau diemtren (list (cons 0 "text"))))
(setq lst0 (ss2ent text lop1))
(setq lst0 (mapcar '(lambda (e) (cons (cdr (assoc 10 (entget e))) (cdr (assoc 1 (entget e))))) lst0))
(setq lst2 (ss2ent text lop2))
(setq lst2 (mapcar '(lambda (e) (cons (cdr (assoc 10 (entget e))) (cdr (assoc 1 (entget e))))) lst2))
(setq
caotext (cdr (assoc 40 (entget (ssname text 0))))
fuzz (* caotext 1.0)
lst0 (vl-sort lst0 'sosanh)
lst2 (vl-sort lst2 'sosanh)
)
(setq xuongdong 0)
(if (= kt nil) (setq kt 0))
(foreach em lst0
(if (= kt 0)
(if (= xuongdong 0)
(progn
(princ (cdr em) fid)
(princ "\n" fid)
(setq xuongdong 1))
(if (= xuongdong 1)
(progn
(princ (cdr em) fid)
(setq xuongdong 2)
)
)
)
(if (= xuongdong 0)
(progn
(princ "\n" fid)
(princ (cdr em) fid)
(princ "\n" fid)
(setq xuongdong 1))
(if (= xuongdong 1)
(progn
(princ (cdr em) fid)
(setq xuongdong 2)
)
)
)
)
)
(setq kt 1)
(inra lst2)
(command ".RECTANGLE" diemcuoi diemtren)
(setq text1 (ssget "C" diemcuoi diemtren (list (cons 0 "text"))))
(setq lst3 (ss2ent text1 lop2))
(setq lst3 (mapcar '(lambda (e) (cons (cdr (assoc 10 (entget e))) (cdr (assoc 1 (entget e))))) lst3))
(setq lst3 (vl-sort lst3 'sosanh))
(inra lst3)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; xu ly phan tram chay o duoi
(setq pt (* (/ (* dem1 1.0) sodt) 100.0)
dem1 (+ dem1 1)
)
(if (/= pt ptcu)
(progn
(princ (strcat stxoa stxuly (rtos pt 2 0) "%"))
(setq ptcu pt)
)
)
;(princ "\nDang xu ly")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setvar "MODEMACRO" "DANG CHUYEN DU LIEU CHO TRONG GIAY LAT")
)
(if fid (close fid))
(setvar "CMDECHO" 1)
(thoi)
)
(defun timlt (st / tm)
(setq tm (vl-string->list (substr (strcase (cdr st)) (+ 3 (vl-string-search "KM" (strcase (cdr st)))))))
(read (strcat "(" (vl-list->string (subst 32 43 (subst 32 58 tm))) ")"))
)
(defun ss2ent (ss lop / sodt index lstent)
(setq sodt (if ss (sslength ss) 0)
index 0)
(repeat sodt
(setq ent (ssname ss index))
(setq index (1+ index))
(if (= (cdr (assoc 8 (entget ent))) lop)
(setq lstent (cons ent lstent))
)
)
(reverse lstent)
)
<<
|
Tác giả: Tr.CongSon
Bài viết gốc: 350099
Tên lệnh: tinh |
Lisp tính tổng text
khi text có dạng ví dụ như là @230x5 va (1328.4) thi lisp không tính được và báo lỗi. mình muốn khi khi gặp dạng @2230x5 thi lips phải hiểu la 230 nhân 5, còn số (1328.4) thi phải hiểu là số 1328.4
|
Filename: 350099_tinh.lsp
|
|
Tác giả: Tr.CongSon
Bài viết gốc: 350529
Tên lệnh: chon |
Lisp chọn dim
chỉ giữ lại các dim style mà mình muốn giữ lại (còn các dim khác ẩn đi)
như là bên layer có layoff,layon đấy ạ
công việc này dùng Fi cũng được nhưng tốn nhiều thời gian hơn
|
Filename: 350529_chon.lsp
|
|
Tác giả: Tr.CongSon
Bài viết gốc: 350888
Tên lệnh: pd | |
Tác giả: phamhuy1
Bài viết gốc: 306021
Tên lệnh: ltt |
Lisp hiệu chỉnh lưới trục
Em nhờ các bác Lisper chỉnh giùm lisp này cho nó chạy ạ :unsure:
(defun c:ltt (/ ng du pt pt1 pt2 b mm1 mm2 oldlst hg hg1 kh c c1 kc)
(setq oldlst (mapcar 'getvar (list "cmdecho" "osmode")))
(setvar "cmdecho" 0)
(setq pt (getpoint "\nDiem: ")
b (getreal "\nDoan ria: ")
hg (getreal "\nSo hang: ")
hg1 (1- hg)
kh (getreal "\nKhoang cach hang: ")
du (* hg1 kh)
c (getreal "\nSo cot: ") c1 (1- c)
kc (getreal "\nKhoang cach cot: ") ng (* c1...
>> Em nhờ các bác Lisper chỉnh giùm lisp này cho nó chạy ạ :unsure:
(defun c:ltt (/ ng du pt pt1 pt2 b mm1 mm2 oldlst hg hg1 kh c c1 kc)
(setq oldlst (mapcar 'getvar (list "cmdecho" "osmode")))
(setvar "cmdecho" 0)
(setq pt (getpoint "\nDiem: ")
b (getreal "\nDoan ria: ")
hg (getreal "\nSo hang: ")
hg1 (1- hg)
kh (getreal "\nKhoang cach hang: ")
du (* hg1 kh)
c (getreal "\nSo cot: ") c1 (1- c)
kc (getreal "\nKhoang cach cot: ") ng (* c1 kc))
(setq pt1 (polar pt pi b) pt2 (polar pt 0 (+ ng b)))
(setq pt3 (polar pt (* pi 1.5) b) pt4 (polar pt (* pi 0.5) (+ du b)))
(setvar "osmode" 0)
(command ".line" pt1 pt2 "")
(command "-array" "L" "R" hg "1" kh "")
(command ".line" pt3 pt4 "")
(command "-array" "L" "R" "1" c kc "")
(mapcar 'setvar (list "cmdecho" "osmode") oldlst)
(princ))
<<
|