Jump to content
InfoFile
Tác giả: VUVUZELA
Bài viết gốc: 101099
Tên lệnh: ct
cộng đều các góc quay của text

Đây bạn ơi
Có gì pm mình

Filename: 101099_ct.lsp
Tác giả: hochoaivandot
Bài viết gốc: 193233
Tên lệnh: ibi
Cần tìm Lisp chèn block tại các điểm giao nhau(intersection)

Bạn thử cái này có đúng ý bạn không

(defun LM:IntersectionsinSet ( ss / a b i j l )
(setq i (sslength ss))
(while (not (minusp (setq j (1- i) i (1- i))))
(setq a (vlax-ename->vla-object (ssname ss i)))
(while (not (minusp (setq j (1- j))))
(setq b (vlax-ename->vla-object (ssname ss j))
l (cons (LM:GroupByNum (vlax-invoke a 'IntersectWith b acExtendNone) 3) l)
)
)
)
(apply...
>>
Bạn thử cái này có đúng ý bạn không

(defun LM:IntersectionsinSet ( ss / a b i j l )
(setq i (sslength ss))
(while (not (minusp (setq j (1- i) i (1- i))))
(setq a (vlax-ename->vla-object (ssname ss i)))
(while (not (minusp (setq j (1- j))))
(setq b (vlax-ename->vla-object (ssname ss j))
l (cons (LM:GroupByNum (vlax-invoke a 'IntersectWith b acExtendNone) 3) l)
)
)
)
(apply 'append l)
)
(defun LM:GroupByNum ( l n / r)
(if l
(cons
(reverse (repeat n (setq r (cons (car l) r) l (cdr l)) r))
(LM:GroupByNum l n)
)
)
)
(defun dxf (code e) (cdr (assoc code (entget e))))
(defun C:ibi(/ os ss lst en pt item)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(princ "\n Chon cac doi tuong giao nhau")
(setq
ss (ssget)
lst (LM:IntersectionsinSet ss)
en (car (entsel "\nChon Block"))
pt (dxf 10 en)
)
(foreach item lst
(command "copy" en "" pt item)
)
(setvar "osmode" os)
)

<<

Filename: 193233_ibi.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 193240
Tên lệnh: arm
Lisp arm (array kết hợp với move)

Hề hề hề,
Luôn thì luôn đây. Tuy nhiên mình không phải là bác ketxu nên mình chỉ luôn được đến thế này. Cái vụ chọn điểm nguồn và điểm đích của việc move mình để cho người dùng chọn bằng tay cho nó ...... khỏi phải nghĩ. Bởi vì theo mình nghĩ thì như thế có khi lại thuận lợi cho nhiều người dùng hơn, Cái yệu cầu của chủ thớt là điểm nguồn phải là tâm của nhóm đối...
>>

Hề hề hề,
Luôn thì luôn đây. Tuy nhiên mình không phải là bác ketxu nên mình chỉ luôn được đến thế này. Cái vụ chọn điểm nguồn và điểm đích của việc move mình để cho người dùng chọn bằng tay cho nó ...... khỏi phải nghĩ. Bởi vì theo mình nghĩ thì như thế có khi lại thuận lợi cho nhiều người dùng hơn, Cái yệu cầu của chủ thớt là điểm nguồn phải là tâm của nhóm đối tượng và điểm đích là tâm của một HCN khác mà mình thì chả biết cái HCN ây của chủ thớt ở đâu nên cứ làm thế này đã. Nếu chủ thớt không khoái có thể tự chỉnh lại lisp cho nó vuông được mà.
Hề hề hề
Luôn đây:


Chúc mọi người luôn vui vẻ.
<<

Filename: 193240_arm.lsp
Tác giả: ketxu
Bài viết gốc: 188331
Tên lệnh: mine2
Viết lại các hàm Express
Update Progress Status dạng đơn giản. Ở mức độ sử dụng thì e thấy tạm thời chỉ cần thế này thôi, không nhất thiết phải chia ra làm mấy hàm như ACET (do đó không dùng biến đếm Global mà sử dụng chung với biến tăng của vòng lặp)

;| Status Bar Progress
Show Percent in Status Bar
@Ketxu 03-01-12
Var : bien tang (nam trong ham loop)
Total : tong so lan lap (biet truoc)
InProMsg : Message...
>>
Update Progress Status dạng đơn giản. Ở mức độ sử dụng thì e thấy tạm thời chỉ cần thế này thôi, không nhất thiết phải chia ra làm mấy hàm như ACET (do đó không dùng biến đếm Global mà sử dụng chung với biến tăng của vòng lặp)

;| Status Bar Progress
Show Percent in Status Bar
@Ketxu 03-01-12
Var : bien tang (nam trong ham loop)
Total : tong so lan lap (biet truoc)
InProMsg : Message luc dang chay
DoneMsg : Message luc chay xong
|;
(defun CV:Ui-Progress (var Total InProMsg DoneMsg / tmp)
(if (>= Var (1- Total))(grtext -1 DoneMsg)(grtext -1 InProMsg))
(setq tmp "")
(repeat (fix (* 15 (/ var Total 1.0)))
(setq tmp (strcat tmp "\U+2588"))
)
; Doan nay lam min
(setq tmp (strcat tmp
(nth (rem (fix (/ var (/ (/ Total 15.0) 8.0))) 8)
(list "\U+258F" "\U+258E" "\U+258D" "\U+258C" "\U+258B" "\U+258A" "\U+2589" "\U+2588" )
)
)
) ; Ket thuc
(grtext -2 (strcat tmp "..." (rtos (/ (* 100.0 Var) Total) 2 0) "%..." ))
)

Ví dụ sử dụng :

(defun C:mine2 (/ K L)
(setq K 0 L 10000)
(while (< k 10000)
(CV:Ui-Progress K L "Vui l\U+00F2ng ch\U+1EDD trong l\U+00FAc CAD \U+0111ang c\U+00E0y ^^" "CAD c\U+00E0y xong r\U+1ED3i, gi\U+1EDD \U+0111\U+1EBFn b\U+1EA1n c\U+00E0y ^^")
(setq k (1+ k) )
)
(princ)
)

<<

Filename: 188331_mine2.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 193311
Tên lệnh: cy
Tác giả: thiep
Bài viết gốc: 65900
Tên lệnh: nut
Viết Lisp theo yêu cầu
"Một đoạn lisp nhỏ, chưa lời đáp
Cho đến bây giờ mặt vẫn chau"
(cảm ơn Haanh đã nhắc lại bài thơ "Các vị La Hán chùa Tây Phương" của Huy Cận trên diễn đàn)

Đó là cái lisp tạo hatch này. Tạo 1 hatch kiểu solid, hình tròn, bán kính và điểm pick tâm hình tròn do user chọn:


Lisp không báo lỗi, nhưng lại không tạo hatch trên màn hình,...
>>
"Một đoạn lisp nhỏ, chưa lời đáp
Cho đến bây giờ mặt vẫn chau"
(cảm ơn Haanh đã nhắc lại bài thơ "Các vị La Hán chùa Tây Phương" của Huy Cận trên diễn đàn)

Đó là cái lisp tạo hatch này. Tạo 1 hatch kiểu solid, hình tròn, bán kính và điểm pick tâm hình tròn do user chọn:


Lisp không báo lỗi, nhưng lại không tạo hatch trên màn hình, thiep không hiểu lỗi gì, mong các anh em Cadviet chỉnh sửa giúp.
Trân trọng.
<<

Filename: 65900_nut.lsp
Tác giả: Tue_NV
Bài viết gốc: 131100
Tên lệnh: df df
Nhờ viết hộ lisp chia trần siêu tốc


Bài toán cũng khá đơn giản mà sao bạn làm các bước khá "lâu" vậy
Bạn thử code này nhé :

Filename: 131100_df_df.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 193405
Tên lệnh: ha
Lisp Ghép Text Cần Giúp Đỡ

Hề, hề!
Hôm qua post bài sai quy định nên qua "tạm trú" bên thùng rác rồi.
Đây là lisp theo y/c dựa vào bản vẽ hôm qua bạn gởi. Hết sức chú ý để chọn đối tượng!

Filename: 193405_ha.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 122242
Tên lệnh: slblt
Chon đối tượng theo dang đường linetype !

Hề hề hề,
Không biết cái này bạn có xài được không hỉ???

Chúc bạn vui.

Filename: 122242_slblt.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 193436
Tên lệnh: ha2
Lisp Ghép Text Cần Giúp Đỡ

Lisp này xử lý theo height của 2 nhóm text. Yêu cầu text số lớn phải có height lớn hơn text số nhỏ. Các text phải đi liền từng cặp, không có text "ngoại lai" trong đó.
Vì các text trên các bản vẽ bạn gởi là rất "vô kỹ luật" nên hết sức thận trọng khi chọn chúng!!!

Filename: 193436_ha2.lsp
Tác giả: Nguyen Hoanh
Bài viết gốc: 15295
Tên lệnh: cpl
Lọc đối tượng polyline với độ dầy


Lệnh CPL dưới đây sẽ chỉ chọn các pline kín:

Filename: 15295_cpl.lsp
Tác giả: loc2210
Bài viết gốc: 192861
Tên lệnh: giao
Lệnh (vlax-ename->vla-object e1)....
bác có thể giải thich cho em đoạn lisp tính giao điểm này này được không, tại em không hiểu mấy cái lệnh vlx..., vlax....


(defun c: giao ()
(defun GiaoDT (ent1 ent2)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
...
>>
bác có thể giải thich cho em đoạn lisp tính giao điểm này này được không, tại em không hiểu mấy cái lệnh vlx..., vlax....


(defun c: giao ()
(defun GiaoDT (ent1 ent2)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)
);;het GiaoDT
(setq ent1 e1)
(redraw ent1 3)
(setq ent2 e2))
(redraw ent1 4)
(setq giao (giaodt ent1 ent2))
(if giao
(foreach pp giao
(entmake (list (cons 0 "POINT") (cons 10 pp)))
)
(alert "2 doi tuong khong giao nhau!")
)
(princ)
)

<<

Filename: 192861_giao.lsp
Tác giả: metavn
Bài viết gốc: 188552
Tên lệnh: ce center
Điểm chèn khi insert file
Cho mình hỏi là khi insert 1 file A vào file B thì điểm chèn của file A có phải là điểm (0,0) không?

Ví dụ: mình có 2 file ce.dwg và center.dwg đều vẽ 2 lá cờ chéo nhau, file ce.dwg mình để điểm giao của 2 lá cờ ở điểm (0,0) còn file center.dwg thì không phải điểm (0,0) nhưng lúc insert sang 1 file khác thì cả 2 đều có điểm chèn là điểm giao của 2 lá cờ. File ce.dwg là mình tạo ra còn file...
>>
Cho mình hỏi là khi insert 1 file A vào file B thì điểm chèn của file A có phải là điểm (0,0) không?

Ví dụ: mình có 2 file ce.dwg và center.dwg đều vẽ 2 lá cờ chéo nhau, file ce.dwg mình để điểm giao của 2 lá cờ ở điểm (0,0) còn file center.dwg thì không phải điểm (0,0) nhưng lúc insert sang 1 file khác thì cả 2 đều có điểm chèn là điểm giao của 2 lá cờ. File ce.dwg là mình tạo ra còn file center.dwg là của người khác nhưng đều ra kết quả giống nhau, mình không hiểu vì sao lại như vậy, xin mọi người chỉ giúp.

Đây là 2 file ce.dwg và center.dwg: http://www.mediafire...qyzr4roqf7ty9j7
Đầy là hình ảnh sau khi insert 2 file này: http://www.mediafire...lwfv2y9e2e2y06c

Mình insert bằng lisp này:

(defun c:ce()
(command "undo" "be")
(setq scale (getvar "dimscale")
pt1 (getpoint "\nPick the need point center:")
)
(command "insert" "D:/block/ce.dwg" pt1 scale "" "" "")
(setvar "osmode" 255)
(command "undo" "end")
(princ)
)


(defun c:center()
(command "undo" "be")
(setq scale (getvar "dimscale")
pt1 (getpoint "\nPick the need point center:")
)
(command "insert" "D:/block/center.dwg" pt1 scale "" "" "")
(setvar "osmode" 255)
(command "undo" "end")
(princ)
)
<<

Filename: 188552_ce_center.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 193613
Tên lệnh: ha
Nhờ anh em giúp lisp ghi cao độ mặt cắt ngang
@cocobubu: lần sau post bài nhớ đọc kỹ nội quy kẻo bị đưa qua tạm trú ở thùng rác thì khổ.
Code nhanh cho bạn đây:

Filename: 193613_ha.lsp
Tác giả: Tue_NV
Bài viết gốc: 41006
Tên lệnh: cdla cola ctla cbla chla
Muốn chập 2 hay nhiều layer làm 1 thì làm thế nào

Đây là líp mình sưu tầm được
.
Bạn thử xem nhé.

Filename: 41006_cdla_cola_ctla_cbla_chla.lsp
Tác giả: thanhduan2407
Bài viết gốc: 193725
Tên lệnh: ikn
Lisp in nhiều bản vẽ trong model mà chỉ cần 1 layout


(defun c:ikn (/ olmode pre D1 D2 ent i dsdinh) ;;;In khung nghieng
(vl-load-com)
(command "undo" "be")
(setq olmode (getvar "OSMODE"))
(setvar "OSMODE" 1)
(setq h 2) ;;;;Chieu cao chu (Ten so hieu ban ve)
(setq pre "< KC, CN KT>: ")
(entmake (list (cons 0 "TEXT") (cons 40 h) (cons 1 pre) (cons 10 '(0 0 0))))
(command "ddedit" (entlast) "")
>>


(defun c:ikn (/ olmode pre D1 D2 ent i dsdinh) ;;;In khung nghieng
(vl-load-com)
(command "undo" "be")
(setq olmode (getvar "OSMODE"))
(setvar "OSMODE" 1)
(setq h 2) ;;;;Chieu cao chu (Ten so hieu ban ve)
(setq pre "< KC, CN KT>: ")
(entmake (list (cons 0 "TEXT") (cons 40 h) (cons 1 pre) (cons 10 '(0 0 0))))
(command "ddedit" (entlast) "")
(setq pre (cdr(assoc 1 (entget(entlast)))))
(entdel (entlast))
(setq dau (getint "\n Danh so bat dau (n):"))
(command "PSPACE")
(setq
po (getpoint "\nChon vi tri dat so hieu ban ve : ")
D1 (getpoint "\nChon diem thu nhat: ")
D2 (getpoint "\nChon diem thu hai: ")

)
(command "MSPACE")
(setq ent (entsel "\nChon pline "))
(setq i 0)
(setq dsdinh (acet-geom-vertex-list (car ent)))
(setq n (/ (length dsdinh) 2))
(if ent
(progn
(repeat n
(alignspace (nth i dsdinh)(nth (1+ i) dsdinh) D1 D2)
(command "PSPACE")
(setq txt (strcat pre (if (< dau 10) (strcat "0" (itoa dau)) (itoa dau)) "/" (if (< n 10) (strcat "0" (rtos n 2 0)) (rtos n 2 0))))
(entmake (list (cons 0 "TEXT") (cons 40 h) (cons 1 txt) (cons 10 pO)))
(setq Elast (entlast))
(command "_plot" "" "" "" "" "" "" "")
(command "erase" Elast "")
(command "MSPACE")
(setq dau (+ dau 1))
(setq i (+ i 2))
)
)
)
(command "plan" "w")
(command "PSPACE")
(setvar "OSMODE" olmode)
(command "undo" "end")
(princ)
)


Bạn vẽ Pline đi qua 2 góc dưới cùng của bản vẽ và khi kích chọn điểm thứ nhất và điểm thứ 2, bạn kích chọn 2 điểm bên dưới của Mview để nó sẽ lấy 2 điểm dưới cùng của bản vẽ vừa khít với cạnh dưới cùng của Mview. Bạn hiểu lisp thì bạn sẽ làm được thôi. Mình tranh thủ gửi cho bạn.
P/s: Bạn nên tìm hiểu phần đánh số hiệu bản vẽ của bác Thaistress...gì gì đó. Lâu rồi ko vào nên quên. Sorry bác ý. Hii
<<

Filename: 193725_ikn.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 193727
Tên lệnh: ha
Tác giả: Doan Van Ha
Bài viết gốc: 193782
Tên lệnh: ikn
Lisp in nhiều bản vẽ trong model mà chỉ cần 1 layout

Tôi không có máy in, chưa test thử. Gặp sự cố thì báo lại giùm.

Filename: 193782_ikn.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 193877
Tên lệnh: tko
Lisp lọc các số sau chữ L, rồi tính tổng.

Hề hề hề,
Bạn dùng thử cái này coi đã ưng ý chưa nhé.
Cái này được viết theo yêu cầu của người khác nên cách dùng có khác với cách bạn trình bày.
1/- Gõ lệnh tko
2/- Quét chọn toàn bộ vùng chứa các text mà bạn muốn tính.
3/- Nhập giá trị đường kính mà bạn muốn tính
4/- Lisp trả ra kết quả tổng chiều dài các đoạn ống có đường kính đã chọn và...
>>

Hề hề hề,
Bạn dùng thử cái này coi đã ưng ý chưa nhé.
Cái này được viết theo yêu cầu của người khác nên cách dùng có khác với cách bạn trình bày.
1/- Gõ lệnh tko
2/- Quét chọn toàn bộ vùng chứa các text mà bạn muốn tính.
3/- Nhập giá trị đường kính mà bạn muốn tính
4/- Lisp trả ra kết quả tổng chiều dài các đoạn ống có đường kính đã chọn và nằm trong vùng chọn của bạn.
5/- Nếu muốn lisp có thể thay thế giá trị này vào một text đã có trên bản vẽ của bạn.

Hãy dùng thử và nếu có ý kiến gì thì post lên mình sẽ sửa lại.



Chúc bạn vui...
<<

Filename: 193877_tko.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 193880
Tên lệnh: ha chon
[Yêu cầu] Lisp lọc các số sau chữ L, rồi tính tổng.

Thử thêm cái này cho vui luôn:

Filename: 193880_ha_chon.lsp

Trang 81/330

81