Jump to content
InfoFile
Tác giả: Doan Van Ha
Bài viết gốc: 209798
Tên lệnh: v2t t2v t2x x2t t2u u2t
Hello!

Lisp chuyển qua lại giữa các kiểu font:TCVN, Unicode, VNI và font "Xuyệc".
Gồm 6 kiểu chuyển. Còn 6 kiểu nữa sẽ bổ sung sau.

Filename: 209798_v2t_t2v_t2x_x2t_t2u_u2t.lsp
Tác giả: Tue_NV
Bài viết gốc: 209793
Tên lệnh: test
lisp đổi layer cho các text.


Quick Code đây bạn :

Filename: 209793_test.lsp
Tác giả: Tue_NV
Bài viết gốc: 78508
Tên lệnh: dim100
Viết lisp theo yêu cầu [phần 2]


Hãy chạy lại thử Code sau :

Filename: 78508_dim100.lsp
Tác giả: gia_bach
Bài viết gốc: 81364
Tên lệnh: po
Viết lisp theo yêu cầu [phần 2]

Bạn cung cấp dữ liệu đầu vào đơn giản quá.
Đây là Lisp xuất ra tọa độ của các point dưới dạng bảng (table) ở dạng đơn giản.

Filename: 81364_po.lsp
Tác giả: gia_bach
Bài viết gốc: 81408
Tên lệnh: po
Viết lisp theo yêu cầu [phần 2]

To : eng-hiep
Như tui đã viết ở trên : Bạn cung cấp dữ liệu đầu vào đơn giản quá. Do đó kết quả đầu ra làm sao mà khá hơn đuợc!
Đằng nào thì LISP cũng không đạt yêu cầu thì "tội gì" phải viết chi tiết hóa. Viết càng nhiều thì càng dễ lạc đề.

Ở yêu cầu đầu tiên bạn đâu có viết : khi ta pick vào 1 point thì chương trình sẽ kêu ta đặt tên cho point đó...
>>

To : eng-hiep
Như tui đã viết ở trên : Bạn cung cấp dữ liệu đầu vào đơn giản quá. Do đó kết quả đầu ra làm sao mà khá hơn đuợc!
Đằng nào thì LISP cũng không đạt yêu cầu thì "tội gì" phải viết chi tiết hóa. Viết càng nhiều thì càng dễ lạc đề.

Ở yêu cầu đầu tiên bạn đâu có viết : khi ta pick vào 1 point thì chương trình sẽ kêu ta đặt tên cho point đó ........
Có lẽ bạn nên đọc bài viết : Viết yêu cầu (Request) và trả lời (Response) như thế nào?

Với yêu cầu tạo bảng : ngoài những thuộc tính cơ bản (layer, color, linetype, ...) 1 thuộc tính quan trọng nhất (đối với tôi) là chiều cao Text.
Có chiều cao Text, bạn mới có thể tính đuợc chiều rộng Text, từ đó xác định chiều cao của 1 dòng, chiều rộng của 1 cột. Đó là các thông số cơ bản của 1 TABLE.
Không có các thông số này thì Bảng sẽ không có đuợc tính cân đối.

Gửi bạn LISP tạo Bảng Tọa độ các Point X, Y (chưa có tên Point)
Về ý tuởng khi ta pick vào 1 point thì chương trình sẽ kêu ta đặt tên cho point đó ........ , theo tui nên tách ra thành 1 Lisp độc lập.

<<

Filename: 81408_po.lsp
Tác giả: hantinh
Bài viết gốc: 184698
Tên lệnh: ccb
[Nhờ viết Lsp] nhờ các cao thủ viết hộ cái lsp mir-tag ghi chú thép trong ASD
sau khi đọc bài của ae giúp đỡ mình đã sửa lại nó như sau

(defun C:ccb (/ ename ename1 ename2 ename3 ename4 ename5
x1 x2 x3 x4 y1 y2 y3 y4 p1 p2 p3 p4)
(setq
ename (ssget "\n Chon doi tuong :")
ename1 (car ename)
ename2 (entget ename1)
ename3 (cdr (assoc 340 ename2))
ename4 (entget ename3)
)
(setq ss (ssget
'((-4 . "<or")
(0 ....
>>
sau khi đọc bài của ae giúp đỡ mình đã sửa lại nó như sau

(defun C:ccb (/ ename ename1 ename2 ename3 ename4 ename5
x1 x2 x3 x4 y1 y2 y3 y4 p1 p2 p3 p4)
(setq
ename (ssget "\n Chon doi tuong :")
ename1 (car ename)
ename2 (entget ename1)
ename3 (cdr (assoc 340 ename2))
ename4 (entget ename3)
)
(setq ss (ssget
'((-4 . "<or")
(0 . "RBCRENBARSHAPEDESC")
(0 . "RBCR_ENDE_BARDDESC")
(-4 . "or>")
)
)
)
(setq
p3 (nth 50 ename3)
p2 (nth 47 ename3)
p1 (nth 44 ename3)
x1 (cadr
(nth 44 ename3)
)
x2 (cadr
(nth 47 ename3)
)
x3 (cadr
(nth 50 ename3)
)
)
(if (> x3 x2)
(setq x4 (- x2 kcach))
(setq x4 (+ x2 kcach))
)
(setq
ename5 (subst p4 p3 ename4)
ename1 (append enam1 neame5)
);;;
(entmod ename1)
)
(Command: "_.mirror" ss "")
(princ)
)

đến đoạn

(if (> x3 x2)
(setq x4 (- x2 kcach))
(setq x4 (+ x2 kcach))
)


thì nó báo lỗi. mình xem lại thì cái biến "kcach" chưa được khi báo.
cái này là dư liệu mình càn đánh dấu( chọn)

((-4 . "<or")
(0 . "RBCRENBARSHAPEDESC")
(0 . "RBCR_ENDE_BARDDESC")
(-4 . "or>")
)


mình khai báo thế nầy hok hiểu đã đúng chưa
<<

Filename: 184698_ccb.lsp
Tác giả: Tue_NV
Bài viết gốc: 115089
Tên lệnh: ntt
Viết lisp theo yêu cầu [phần 2]

Bạn thử với cái này xem vừa ý không nhé :
Tick Thanks thay cho bài viết cảm ơn
Hy vọng bạn hài lòng

Filename: 115089_ntt.lsp
Tác giả: vuminhchau
Bài viết gốc: 209851
Tên lệnh: kkt
nhờ các bác chỉnh thêm cho code kích thước
các bác trên diễn đàn ơi, có thể giúp em thêm phần chọn hiện kích thước ra ngoài khung kín hay trong khung kín như hình trên với!
cảm ơn các bác nhiều.


(defun c:kkt(/ chon lenlist i ename tdx tdy)
(setq chon (ssget))
(if (/= chon nil)
(progn
(setq lenlist (sslength chon))
(princ "so phan tu da chon : ")(princ lenlist)
(princ "\n")
(setq i 0)
...
>>
các bác trên diễn đàn ơi, có thể giúp em thêm phần chọn hiện kích thước ra ngoài khung kín hay trong khung kín như hình trên với!
cảm ơn các bác nhiều.


(defun c:kkt(/ chon lenlist i ename tdx tdy)
(setq chon (ssget))
(if (/= chon nil)
(progn
(setq lenlist (sslength chon))
(princ "so phan tu da chon : ")(princ lenlist)
(princ "\n")
(setq i 0)
(while (< i lenlist)
(princ "he he he")
(setq ename (ssname chon i))
(setq ename (entget ename))
(setq tdx (cdr (assoc 10 ename)))
(setq tdy (cdr (assoc 11 ename)))
(command "dimaligned" tdx tdy tdy "")
(setq i (+ 1 i))
)
)
)
)


như hình dưới:
http://www.cadviet.com/upfiles/3/104547_banve_2.jpg
<<

Filename: 209851_kkt.lsp
Tác giả: Tue_NV
Bài viết gốc: 103954
Tên lệnh: aic
Array đối tượng trong vùng

Như vậy thì Lisp chỉ áp dụng với đối tượng dạng điểm như point, Block, Text, Mtext và Lisp xử lý nó theo điểm chèn phải không bạn?
Trong 3 thao tác của bạn thì Tue_NV thấy thao tác thứ 2 và thao tác thứ 3 : bạn làm không OK lắm
- Thao tác thứ 2 : Ngay ở dòng select object (khi thực thi Lisp), bạn muốn lọc thì Lisp lọc, bạn muốn chọn thì Lisp chọn, không cần thiết phải làm như ý...
>>

Như vậy thì Lisp chỉ áp dụng với đối tượng dạng điểm như point, Block, Text, Mtext và Lisp xử lý nó theo điểm chèn phải không bạn?
Trong 3 thao tác của bạn thì Tue_NV thấy thao tác thứ 2 và thao tác thứ 3 : bạn làm không OK lắm
- Thao tác thứ 2 : Ngay ở dòng select object (khi thực thi Lisp), bạn muốn lọc thì Lisp lọc, bạn muốn chọn thì Lisp chọn, không cần thiết phải làm như ý của bạn vì không hiệu quả khi sử dụng vì như bạn nói : nó hơi thừa
- Thao tác thứ 3 : Bạn chọn đối tượng nằm trong, trên hay ngoài vùng chọn => Thực hiện lệnh chọn đối tượng để tuỳ mình xử lý
Đã là chọn Tren rồi thì có cần phải hỏi là "Có chọn cả những đối tượng bị cắt ngang qua hay không ?" Vì đã nằm trên rồi thì đương nhiên Polyline phải cắt qua chứ phải không bạn? Có thể là Tue_NV hiểu chưa được đúng. Bạn nói rõ hơn nhé.

Bổ sung thêm 1 ý nữa là Lisp có thể áp dụng cho Spline kín chứ không riêng gì Polyline
Tue_NV đang bận. Lúc rãnh mới có thể viết Lisp được

@Anh Duy : Tue_NV mới thấy bài của anh hôm qua, sao anh vội del đi thế?
Nếu anh thấy các hàm vl khó hiểu thì Tue_NV viết code này, không có sử dụng hàm vl, hy vọng anh Duy và bạn thanhDuan dễ hiểu hơn :
Đây là code :

Trong Code có sử dụng hàm (ACET-GEOM-EXTENTS ent) : hàm trả về điểm min và max của ent trong 1 list
Ví dụ : (ACET-GEOM-EXTENTS (car(entsel)))

Hàm (ACET-GEOM-INTERSECTWITH en1 en2 flag)
Hàm trả về listpoint tọa độ các điểm giao của 2 đối tượng en1 en2.
flag là số interger, cờ quy định các kiểu giao:
- 0: không mở rộng 2 đối tượng en1 en2
- 1: mở rộng đối tượng en1, không mở rộng đối tượng en2.
- 2: không mở rộng đối tượng en1, mở rộng đối tượng en2.
- 3: mở rộng 2 đối tượng en1 en2

Trong code trên thì Tue_NV đã sử dụng kiểu cờ flag=0
Các hàm này nằm trong phụ trợ Express
<<

Filename: 103954_aic.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 209563
Tên lệnh: scl
Nhờ viết giùm lisp Scan nhiều nhóm đối tượng mà giữ nguyên gốc

Hề hề hề,
Yêu cầu 1 bạn hãy đọc bài trả lời của bác DoanVanHa.
Yêu cầu 2: dùng thử cái này coi đã ưng ý chưa nhé.

Chúc bạn vui.

Filename: 209563_scl.lsp
Tác giả: Tue_NV
Bài viết gốc: 210122
Tên lệnh: kkt
[Yêu cầu] nhờ các bác chỉnh thêm cho code kích thước

Sửa lại code cho bạn đây:

Filename: 210122_kkt.lsp
Tác giả: gia_bach
Bài viết gốc: 112149
Tên lệnh: test1
Cho minh hỏi về xuất thuộc tính của group như xuất block thuộc tình
Củ chuối thì sao nhỉ ?
Củ chuối hay củ khoai đều có giá trị của nó.
Bạn thử "củ khoai" này với củ chuối xem sao ?

Mong các bạn sớm cho ý kiến
he he : bạn làm tôi chợt nhớ đến lời ca khúc : "... gặp nhau lần nào cũng vội...."
"Quan có cần nhưng dân chưa vội
....................... "

Filename: 112149_test1.lsp
Tác giả: ketxu
Bài viết gốc: 127441
Tên lệnh: m1
xin lisp move 1 giá trị nhất định

Em nghĩ ý bạn ấy là như thế này :

Khoảng cách 500 thay tực tiếp trong lisp

Filename: 127441_m1.lsp
Tác giả: master_worse
Bài viết gốc: 77279
Tên lệnh: match-text
Lisp MATTEXT bị lỗi ???


còn ddd và xx kìa đổi thử luôn xem sao

bạn lỗi lúc nào: ngay lúc gõ lệnh hay sau khi chọn đối tượng muốn chỉnh

không được thì bạn sử dụng tam cái này:

Filename: 77279_match-text.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 210349
Tên lệnh: ha u2t
[Yêu cầu] Lisp chuyển Font12 (font xuyệc (/)) sang UNICODE hay TCVN-3
Lisp này tôi đang viết để chuyển qua lại giữa 4 font chữ: Unicode, TCVN3, VNI, và "Xuyệc", nhưng chưa hoàn chỉnh. Tuy nhiên chủ topic có thể dùng để chuyển từ font "Xuyệc" qua TCVN3, Unicode, VNI. Riêng với TCVN3 thì bạn cần tạo trước 2 kiểu font mẫu: TCVN3 chữ thường và TCVN3 chữ hoa để chọn font mẫu cho phù hợp.

Filename: 210349_ha_u2t.lsp
Tác giả: hantinh
Bài viết gốc: 210437
Tên lệnh: sd
[nhờ sửa] sửa giúp lsp chia dim
hiện tại con lsp này nó hok chia dim ra thành từng dim nhỏ trong khoảng dim của nó
(defun C:SD (/sel newpt ent edata elist)
(if (and
(setq sel (entsel "\nSelect Demension to Split."))
(setq newpt (getpoint "\Select new Dim Point"))
)
(progn
(setq ent (car sel)
edata (entget ent)
elist (vl-remove-if
'(lambda (pair)
(member
(car pair)
(list -1 2 5 102 310 300 330 331...
>>
hiện tại con lsp này nó hok chia dim ra thành từng dim nhỏ trong khoảng dim của nó
(defun C:SD (/sel newpt ent edata elist)
(if (and
(setq sel (entsel "\nSelect Demension to Split."))
(setq newpt (getpoint "\Select new Dim Point"))
)
(progn
(setq ent (car sel)
edata (entget ent)
elist (vl-remove-if
'(lambda (pair)
(member
(car pair)
(list -1 2 5 102 310 300 330 331 340 350 350 410)
)
)
edata
)
)
(entmod
(subst (cons 14 newpt)
(assoc 14 elist)
)
)
(entmakex
(subst
(cons 13 newpt)
(assoc 13 elist)
elist
)
)
)
)
(princ "SplitDims")
)

http://i110.photobucket.com/albums/n90/nguyenxuanminh_01/Untitled-1.png
<<

Filename: 210437_sd.lsp
Tác giả: ketxu
Bài viết gốc: 125596
Tên lệnh: mcd
Viết lisp theo yêu cầu [phần 2]
Bạn ấy nói nhầm ấy mà bác.Vẽ tỉ lệ 1:20 thì nhập 300 nó sẽ ra 15 unit thôi ^^
Nếu đã mặc định 1:20 rồi thì chẳng cần phải hỏi tỉ lệ chi nữa cho dài dòng, ta cứ chia số nhập cho 20 luôn hè ^^


Filename: 125596_mcd.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 210545
Tên lệnh: ha
[Yêu cầu] Lisp vẽ đường cong qua các tọa độ cho trước trong cad3d
Lisp vẽ Spline 3D đi qua các điểm được ghi trong file txt.

Filename: 210545_ha.lsp
Tác giả: thanhduan2407
Bài viết gốc: 210560
Tên lệnh: chm chd cdlt
Xin lisp nội suy cao độ ?
Mình cứ đưa lên đây lisp nội suy độ cao thông thường
Với Lệnh chm (chèn measure) tức là chọn 2 điểm để lấy độ cao và tự động nó chèn các text vào giữa 2 điểm đó theo số điểm bạn muốn chèn vào giữa.
Lệnh chd (chèn divide) cũng tương tự như vậy nhưng nó là nhập khoảng cách giữa 2 điểm chèn.
2 lệnh trên dành cho những người lười chèn điểm.
Lệnh cdlt (chèn điểm...
>>
Mình cứ đưa lên đây lisp nội suy độ cao thông thường
Với Lệnh chm (chèn measure) tức là chọn 2 điểm để lấy độ cao và tự động nó chèn các text vào giữa 2 điểm đó theo số điểm bạn muốn chèn vào giữa.
Lệnh chd (chèn divide) cũng tương tự như vậy nhưng nó là nhập khoảng cách giữa 2 điểm chèn.
2 lệnh trên dành cho những người lười chèn điểm.
Lệnh cdlt (chèn điểm liên tiếp) tức là chèn theo điểm mình kích chọn sau khi chọn 2 điểm.

(defun c:chm()
(setq i 1)
(command "osnap" "node,center,ins,end,mid")
(or *chieucao* (setq *chieucao* 1))
(setq chieucao (getreal (strcat "\n Chi\U+1EC1u cao text <"
(rtos *chieucao* 2 2)
"> :"
)
)
)
(if (not chieucao) (setq chieucao *chieucao*) (setq *chieucao* chieucao))
(or *xoay* (setq *xoay* 0))
(setq xoay (getreal (strcat "\n G\U+00F3c xoay text <"
(rtos *xoay* 2 2)
"> :"
)
)
)

(if (not xoay) (setq xoay *xoay*) (setq *xoay* xoay))
(command "undo" "be")
(setq pt1 (getpoint "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 nh\U+1EA5t : "))
(setq x1 (car pt1))
(setq y1 (cadr pt1))
(setq z1 (caddr pt1))
(setq pt2 (getpoint "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 hai : "))
(setq x2 (car pt2))
(setq y2 (cadr pt2))
(setq z2 (caddr pt2))
(setq Diem1 (list x1 y1))
(setq Diem2 (list x2 y2))
(setq d (distance diem1 diem2))
(setq n (getint "\nNh\U+1EADp s\U+1ED1 \U+0111i\U+1EC3m c\U+1EA7n ch\U+00E8n: "))
(setq kcl (/ d n))
(setq gocdt (angle diem1 diem2))
(while (< i n)
(command "osnap" "Off")
(setq pt_i (polar diem1 gocdt (* i kcl)))
(setq x3 (car pt_i))
(setq y3 (cadr pt_i))
(setq d1 (distance diem1 pt_i))
(setq d2 (distance diem2 pt_i))
(setq kcdai (+ d1 d2))
(setq dz12 (- z2 z1))
(setq dhz (* dz12 (/ d1 kcdai)))
(setq z3 (+ z1 dhz))
(setq Caodo (rtos z3 2 2))
(setq pt_i (list x3 y3 (atof Caodo)))
(entmake (list (cons 0 "TEXT")(cons 1 caodo) (cons 10 pt_i) (cons 40 chieucao)(cons 50 (DTR xoay))))
(entmake (list (cons 0 "POINT") (cons 10 pt_i)))
(setq i (1+ i))
)
(command "undo" "end")
(princ)
)
(defun c:chd()
(setq i 1)
(command "osnap" "node,center,ins,end,mid")
(or *chieucao* (setq *chieucao* 1))
(setq chieucao (getreal (strcat "\n Chi\U+1EC1u cao text <"
(rtos *chieucao* 2 2)
"> :"
)
)
)
(if (not chieucao) (setq chieucao *chieucao*) (setq *chieucao* chieucao))
(or *xoay* (setq *xoay* 0))
(setq xoay (getreal (strcat "\n G\U+00F3c xoay text <"
(rtos *xoay* 2 2)
"> :"
)
)
)
(if (not xoay) (setq xoay *xoay*) (setq *xoay* xoay))
(command "undo" "be")
(setq pt1 (getpoint "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 nh\U+1EA5t : "))
(setq x1 (car pt1))
(setq y1 (cadr pt1))
(setq z1 (caddr pt1))
(setq pt2 (getpoint "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 hai : "))
(setq x2 (car pt2))
(setq y2 (cadr pt2))
(setq z2 (caddr pt2))
(setq Diem1 (list x1 y1))
(setq Diem2 (list x2 y2))
(setq d (distance diem1 diem2))
(setq kcl (getint "\nNh\U+1EADp kho\U+1EA3ng c\U+00E1ch gi\U+1EEFa 2 \U+0111i\U+1EC3m: "))
(setq n (/ d kcl))
(setq gocdt (angle diem1 diem2))
(while (< i n)
(command "osnap" "Off")
(setq pt_i (polar diem1 gocdt (* i kcl)))
(setq x3 (car pt_i))
(setq y3 (cadr pt_i))
(setq d1 (distance diem1 pt_i))
(setq d2 (distance diem2 pt_i))
(setq kcdai (+ d1 d2))
(setq dz12 (- z2 z1))
(setq dhz (* dz12 (/ d1 kcdai)))
(setq z3 (+ z1 dhz))
(setq Caodo (rtos z3 2 2))
(setq pt_i (list x3 y3 (atof Caodo)))
(entmake (list (cons 0 "TEXT")(cons 1 caodo) (cons 10 pt_i) (cons 40 chieucao)(cons 50 (DTR xoay))))
(entmake (list (cons 0 "POINT") (cons 10 pt_i)))
(setq i (1+ i))
)
(command "undo" "end")
(princ)
)
(defun c:cdlt() ;chen diem lien tiep
(setq i 1)
(command "osnap" "node,center,ins,end,mid")
(or *chieucao* (setq *chieucao* 2))
(setq chieucao (getreal (strcat "\n Chi\U+1EC1u cao text <"
(rtos *chieucao* 2 2)
"> :"
)
)
)
(if (not chieucao) (setq chieucao *chieucao*) (setq *chieucao* chieucao))
(or *xoay* (setq *xoay* 5))
(setq xoay (getreal (strcat "\n G\U+00F3c xoay text <"
(rtos *xoay* 2 2)
"> :"
)
)
)
(if (not xoay) (setq xoay *xoay*) (setq *xoay* xoay))
(command "undo" "be")
(setq pt1 (getpoint "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 nh\U+1EA5t : "))
(setq x1 (car pt1))
(setq y1 (cadr pt1))
(setq z1 (caddr pt1))
(setq pt2 (getpoint "\nCh\U+1ECDn \U+0111i\U+1EC3m th\U+1EE9 hai : "))
(setq x2 (car pt2))
(setq y2 (cadr pt2))
(setq z2 (caddr pt2))
(setq Diem1 (list x1 y1))
(setq Diem2 (list x2 y2))
(setq d (distance diem1 diem2))
(while
(progn
(command "osnap" "Off")
(setq pt_i (getpoint "\n Ch\U+1ECDn \U+0111i\U+1EC3m c\U+1EA7n ch\U+00E8n: "))
(setq x3 (car pt_i))
(setq y3 (cadr pt_i))
(setq d1 (distance diem1 pt_i))
(setq d2 (distance diem2 pt_i))
(setq kcdai (+ d1 d2))
(setq dz12 (- z2 z1))
(setq dhz (* dz12 (/ d1 kcdai)))
(setq z3 (+ z1 dhz))
(setq Caodo (rtos z3 2 2))
(setq pt_i (list x3 y3 (atof Caodo)))
(entmake (list (cons 0 "TEXT")(cons 1 Caodo) (cons 10 pt_i) (cons 40 chieucao)(cons 50 (DTR xoay))))
(entmake (list (cons 0 "POINT") (cons 10 pt_i)))
(setq i (1+ i))
)
)
(command "undo" "end")
(princ)
)
(defun DTR (A) (/ (* A pi) 180.0))


Nếu bạn muốn yêu cầu thao tác như thế nào thì hãy mô tả và kèm theo bản vẽ nhé
<<

Filename: 210560_chm_chd_cdlt.lsp
Tác giả: thanhduan2407
Bài viết gốc: 210650
Tên lệnh: cvt3d
Xin lisp nội suy cao độ ?

Đã chỉnh sửa lisp trên theo yêu cầu của bạn. Bạn down lại nhé
Nếu muốn chọn text mà cao độ text lại bằng "0" thì lấy nội dung text làm cao độ. Vậy thì dùng lisp Convert Text 3D để tạo text có cao độ. Mình lười nên dùng cái có sẵn. Ngại viết.

(defun ST:Text-Base (ent)
(setq Ma10 (cdr (assoc 10 (entget ent))))
(setq Ma11 (cdr (assoc 11 (entget ent))))
(setq X11 (car...
>>

Đã chỉnh sửa lisp trên theo yêu cầu của bạn. Bạn down lại nhé
Nếu muốn chọn text mà cao độ text lại bằng "0" thì lấy nội dung text làm cao độ. Vậy thì dùng lisp Convert Text 3D để tạo text có cao độ. Mình lười nên dùng cái có sẵn. Ngại viết.

(defun ST:Text-Base (ent)
(setq Ma10 (cdr (assoc 10 (entget ent))))
(setq Ma11 (cdr (assoc 11 (entget ent))))
(setq X11 (car Ma11))
(setq Ma71 (cdr (assoc 71 (entget ent))))
(setq Ma72 (cdr (assoc 72 (entget ent))))
(if (or (and (= Ma71 0) (= Ma72 0) (= X11 0))
(and (= Ma71 0) (= Ma72 3) )
(and (= Ma71 0) (= Ma72 5) )
)
Ma10
Ma11
)
)
(defun C:CVT3D (/ ss Z_value temp koord)
(command "undo" "be")
(command "osnap" "off")
(setq ss (ssget (list (cons 0 "TEXT"))))
(setq s1 ((lambda (sec) (+ (* 86400 (- sec (fix sec))) 60)) (getvar "DATE")))
(progn
(setq ss (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss))))
(foreach item ss
(setq temp (entget item))
(setq Tdo (ST:Text-Base item ))
(setq Caodo (cdr (assoc 1 temp))
h (cdr (assoc 40 temp))
Pnt (list (car Tdo)
(cadr Tdo)
(atof caodo)
)
)
(entdel item)
(entmake (list (cons 0 "TEXT") (cons 10 Pnt) (cons 40 h) (cons 1 Caodo)))
)
)
(setq s2 ((lambda (sec) (+ (* 86400 (- sec (fix sec))) 60)) (getvar "DATE")))
(setq stop (getvar "date"))
(command "undo" "end")
(princ "\n")
(alert (strcat "Th\U+1EDDi gian th\U+1EF1c hi\U+1EC7n ch\U+01B0\U+01A1ng tr\U+00ECnh l\U+00E0: " (rtos (- s2 s1) 2 3) " gi\U+00E2y"))
(princ)
)


<<

Filename: 210650_cvt3d.lsp

Trang 103/330

103