Chuyển đến nội dung
Diễn đàn CADViet
ssg

Hướng dẫn lập trình Lisp

Các bài được khuyến nghị

Mình có một vấn đề cần hỏi: làm sao tắt mở được chế độ "osnap" trong auto lisp để khi chạy lệnh lisp không bị bắt điểm lung tung, cám ơn.

Không đâu xa cả, bạn tham khảo lisp ngay phía trên bài viết của bạn đi. biến OSMODE

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Làm thế nào để ta lấy được tọa độ các đỉnh trung gian và điểm cuối của 1 Leader

1- Bạn lọc lấy DXF 10 trong data của nó là xong ngay.

2- Xin chia sẻ một chút kinh nghiệm "vọc" lisp của ssg. Không riêng gì leader, mà với bất cứ đối tượng nào, ssg có sẵn 1 "lá bùa" vẫn load thường trực:

 

(defun C:EG( )

(setq e (car (entsel)))

(textscr)

(setq d (entget e))

)

 

Đối chiếu kết quả d nhận được với object bạn sẽ tự nghiệm ra bản chất vấn đề. Hiểu được rồi thì xử lý là chuyện nhỏ! Hy vọng kinh nghiệm nho nhỏ trên sẽ giúp được chút gì đó cho bạn.

 

Brazil-Portugal ra sân rồi, chào bạn!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
1- Bạn lọc lấy DXF 10 trong data của nó là xong ngay.

2- Xin chia sẻ một chút kinh nghiệm "vọc" lisp của ssg. Không riêng gì leader, mà với bất cứ đối tượng nào, ssg có sẵn 1 "lá bùa" vẫn load thường trực:

 

(defun C:EG( )

(setq e (car (entsel)))

(textscr)

(setq d (entget e))

)

 

Đối chiếu kết quả d nhận được với object bạn sẽ tự nghiệm ra bản chất vấn đề. Hiểu được rồi thì xử lý là chuyện nhỏ! Hy vọng kinh nghiệm nho nhỏ trên sẽ giúp được chút gì đó cho bạn.

 

Brazil-Portugal ra sân rồi, chào bạn!

 

Em cũng viết 1 "lá bùa" cho mình. hehe, sai lầm chết người của em chính từ "lá bùa lởm" này :s_big:

(defun c:tra (/ KQ i E)

(setq E (entsel) i -3)

(while (< i 500)

(setq KQ (cdr (assoc i (entget (car E)))))

(if KQ (progn

(prompt (strcat "\n"(rtos i 2 0) " - "))

(princ KQ)

))

(setq i (1+ i))

)

(textscr) (princ)

);end

Cảm ơn anh nhé :cheers:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình sd cú pháp (setq ss (ssget)) để chọn một số đối tượng , trong đó có một số block tên "truranh"

Nếu mình muốn lọc tập hợp các block "truranh" trên (trong biến ss) ra một biến khác thì làm thế nào.

Mình đã thử làm như sau nhưng kg đc, các bạn chỉ giúp. Cám ơn

(setq ss (ssget))

(command "_.select" ss "")

(setq ss1 (ssget "p" '((0 . "insert") (2 . "truranh"))))

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình sd cú pháp (setq ss (ssget)) để chọn một số đối tượng , trong đó có một số block tên "truranh"

Nếu mình muốn lọc tập hợp các block "truranh" trên (trong biến ss) ra một biến khác thì làm thế nào.

Mình đã thử làm như sau nhưng kg đc, các bạn chỉ giúp. Cám ơn

(setq ss (ssget))

(command "_.select" ss "")

(setq ss1 (ssget "p" '((0 . "insert") (2 . "truranh"))))

Mình nghỉ bạn làm như vậy là đúng rồi

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình sd cú pháp (setq ss (ssget)) để chọn một số đối tượng , trong đó có một số block tên "truranh"

Nếu mình muốn lọc tập hợp các block "truranh" trên (trong biến ss) ra một biến khác thì làm thế nào.

Mình đã thử làm như sau nhưng kg đc, các bạn chỉ giúp. Cám ơn

(setq ss (ssget))

(command "_.select" ss "")

(setq ss1 (ssget "p" '((0 . "insert") (2 . "truranh"))))

có thể block đó của bạn là block động. tên của block động sẽ thay đổi khi bạn thay đổi trạng thái của nó.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình hatch 1 vùng, sau đó muốn đo diện tích vùng đó nhưng ko muốn pick lại vùng đó giống như khi hatch. Bạn nào giúp mình viết 1 lisp sao cho chỉ cần chọn phần hatch thì sẽ xuất ra diện tích của hatch đó (ra text có sẵn). Thanks :(

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình hatch 1 vùng, sau đó muốn đo diện tích vùng đó nhưng ko muốn pick lại vùng đó giống như khi hatch. Bạn nào giúp mình viết 1 lisp sao cho chỉ cần chọn phần hatch thì sẽ xuất ra diện tích của hatch đó (ra text có sẵn). Thanks :(

Theo em ko cần dùng lisp cho tốn công nhớ lệnh ra.

Anh cứ chọn phần đã hát rồi gõ lệnh LI xem có thấy diện tích ko?

 

Command: h HATCH

Pick internal point or [select objects/remove Boundaries]: Selecting

everything...

Selecting everything visible...

Analyzing the selected data...

 

Analyzing internal islands...

 

Pick internal point or [select objects/remove Boundaries]:

Command:

Command: li LIST 1 found

 

HATCH Layer: "0"

Space: Model space

Handle = 185

Hatch pattern ANSI31

Annotative: No

Hatch scale 1.0000

Hatch angle 0

Associative

Area 69.2689

Origin X= 0.0000 Y= 0.0000 Z= 0.0000

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ah, dùng lệnh Li thì mất công xem rồi ghi lại vào text, nếu dùng lisp đo dt pick lại điểm thì lâu quá vì đã có sẵn phần hatch đó rồi. Mình có đến gần 200 cái hatch như vậy nên làm sẽ mất thời gian lắm :( , cái mình muốn là nó tự động ghi diện tích vào text có sẵn, bạn nào giúp minh với nhé!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Ah, dùng lệnh Li thì mất công xem rồi ghi lại vào text, nếu dùng lisp đo dt pick lại điểm thì lâu quá vì đã có sẵn phần hatch đó rồi. Mình có đến gần 200 cái hatch như vậy nên làm sẽ mất thời gian lắm :( , cái mình muốn là nó tự động ghi diện tích vào text có sẵn, bạn nào giúp minh với nhé!

http://www.cadviet.com/forum/index.php?sho...12432&st=40

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Không được bạn ơi, dùng lisp trên gần như là pick vào 1 vùng --- khoanh vùng đó - xuất ra dt

 

Cái mình muốn là nhấn vào hatch có sẵn và xuất ra giá trị diện tích :(

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Không được bạn ơi, dùng lisp trên gần như là pick vào 1 vùng --- khoanh vùng đó - xuất ra dt

 

Cái mình muốn là nhấn vào hatch có sẵn và xuất ra giá trị diện tích :(

 

Sài tạm cái này nè:

;=============================

(defun c:vd(/ dt p1)

(princ "\nPick Hatch tinh dientich: ")

(command "area" "OB" pause)

(setq dt (rtos (getvar "area") 2 2))

(setq p1 (getpoint "\nCHon diem dat Text: "))

(entmake (list (cons 0 "TEXT") (cons 1 dt) (cons 10 p1) (cons 40 5.0)))

(princ)

)

;=============================

 

 

Hay cái này (dùng cái này nhé, cái trên tham khảo cho zui!)

 

(defun c:vd(/ dt p1 ht)

(vl-load-com)

(setq dt (vlax-ename->vla-object (car(entsel "\nPick doi tuong tinh dien tich: ")))

dt (vlax-get-property dt 'Area)

dt (rtos dt 2 2)

)

(setq ht (getdist "\nCho vao co chu: "))

(if (not ht)(setq ht 5))

 

(setq p1 (getpoint "\nCHon diem dat Text: "))

(entmake (list (cons 0 "TEXT") (cons 1 dt) (cons 10 p1) (cons 40 ht)))

(princ)

)

 

;=============================

 

ZuiZÚi

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Lisp chạy rất tốt, thanks bạn nhé. Bạn giúp mình thêm 1 chút nữa đc ko, thay vì pick chọn vị trí text rồi ghi text vào thì bây h đổi lại là chọn 1 text đã có sẵn, ghi diện tích vào text có sẵn đó ^^'

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Lisp chạy rất tốt, thanks bạn nhé. Bạn giúp mình thêm 1 chút nữa đc ko, thay vì pick chọn vị trí text rồi ghi text vào thì bây h đổi lại là chọn 1 text đã có sẵn, ghi diện tích vào text có sẵn đó ^^'

 

Đây bạn, bạn dùng thử cái này nhé:

 

;============================

(defun c:vd2(/ dt text luu_dim)

(setq luu_dim (getvar "dimzin"))

(setvar "dimzin" 0)

(vl-load-com)

(setq dt (vlax-ename->vla-object (car(entsel "\nPick doi tuong tinh dien tich: "))))

(if (vlax-property-available-p dt 'Area)

(progn

(setq dt (vlax-get-property dt 'Area)

dt (rtos dt 2 2)

)

(setq text (vlax-ename->vla-object (car(entsel "\nPick Text ghi ket qua: "))))

(vlax-put-property text 'TextString dt)

)

(princ "\nDoi tuong chon khong co dien tich !!!")

)

(setvar "dimzin" luu_dim)

(princ)

)

;============================

 

@ Nhấn Thanks để thể hiện mọi lời cảm ơn. hì hì.........

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

khi làm việc với group, nếu muốn chỉnh sửa hoặc xoá 1 đối tuợng con trong group ta cần gõ tổ hợp fím Ctrl+Shift+A để bật/tắt liên kết của các đối tuợng trong group.

Mình đoán chắc chắn là có 1 biến hệ thống nào đó lưu giữ thông tin trạng thái ON/OFF này của group (giống như biến "ACAD_WIPEOUT_VARS" lưu trạng thái ON/OFF của wipeout) nhưng chưa tìm được. Bác nào biết thông tin giúp mình với

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
khi làm việc với group, nếu muốn chỉnh sửa hoặc xoá 1 đối tuợng con trong group ta cần gõ tổ hợp fím Ctrl+Shift+A để bật/tắt liên kết của các đối tuợng trong group.

Mình đoán chắc chắn là có 1 biến hệ thống nào đó lưu giữ thông tin trạng thái ON/OFF này của group (giống như biến "ACAD_WIPEOUT_VARS" lưu trạng thái ON/OFF của wipeout) nhưng chưa tìm được. Bác nào biết thông tin giúp mình với

Sử dụng biến hệ thống : pickstyle

 

Trích từ Help :

To control whether all grouped objects can be selected individually

Do one of the following:

- At the command prompt, enter pickstyle. Enter 1 to turn on group selection. Objects within groups can be selected as a group only, not individually.

- At the command prompt, enter pickstyle. Enter 0 to turn off group selection. Objects within groups can be selected individually only, not as a group.

- At any time, turn group selection on and off by pressing either CTRL+H or CTRL+SHIFT+A.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cho mình hỏi, mình muốn thử viết 1 lisp đổi bề dày Pline mà sao mình viết hoài ko được nhờ các bạn xem dùm mình thử

thanks

(defun c:glb ()

(setq SS (ssget '((0 . "LWPOLYLINE"))))

(setq gt (getreal "\n Cho do rong moi cua POLYLINE:"))

(command ".pedit" ss "w" gt "" )

(princ)

  )

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cho mình hỏi, mình muốn thử viết 1 lisp đổi bề dày Pline mà sao mình viết hoài ko được nhờ các bạn xem dùm mình thử

thanks

(defun c:glb ()

(setq SS (ssget '((0 . "LWPOLYLINE"))))

(setq gt (getreal "\n Cho do rong moi cua POLYLINE:"))

(command ".pedit" ss "w" gt "" )

(princ)

  )

truongthanh dùng thử LISP này (sử dụng hàm VLA-...)

(defun c:glb (/ ent gt i ss)
 (vl-load-com)
 (if (and
(setq ss (ssget '((0 . "LWPOLYLINE"))))
(setq gt (getdist "\n Chon do rong moi cua POLYLINE:"))
(setq i -1))
   (while (setq ent (ssname ss (setq i (1+ i))))
     (vla-put-ConstantWidth (vlax-ename->vla-object ent) gt))  )
 (Princ))

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cho mình hỏi, mình muốn thử viết 1 lisp đổi bề dày Pline mà sao mình viết hoài ko được nhờ các bạn xem dùm mình thử

thanks

(defun c:glb ()

(setq SS (ssget '((0 . "LWPOLYLINE"))))

(setq gt (getreal "\n Cho do rong moi cua POLYLINE:"))

(command ".pedit" ss "w" gt "" )

(princ)

  )

Của bạn được sửa lại

(defun c:glb ()
(setq SS (ssget '((0 . "LWPOLYLINE"))))
(setq gt (getreal "\n Cho do rong moi cua POLYLINE:"))
(command ".pedit" "m" ss "" "w" gt "" )
(princ)
 )

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Lính mới yêu cầu bác Bình viết ít va đúng trọng tâm thôi. hic . Em hay đọc lóm ma bác viết tùm lum lam em đọc 1 hôi không hiêu bác muốn các gì, vài câu góp ý mong bác đừng giận..

Nhân tiện đây cám ơn bác Hoàng nhiu lắm. hiii................... học lóm của bác nhiu roài mà đến giờ mới cám ơn.... nga quá

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Của bạn được sửa lại

(defun c:glb ()
(setq SS (ssget '((0 . "LWPOLYLINE"))))
(setq gt (getreal "\n Cho do rong moi cua POLYLINE:"))
(command ".pedit" "m" ss "" "w" gt "" )
(princ)
 )

cho mình hỏi code của TUE với Bác Gia Bach khác nhau như thế nào vậy?

thanks!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×