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

vấn đề về lệnh tắt trong cad

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

Bác Hà chưa release nó sau khi dùng lisp ^^

 

@toiyeuvietnam :

- Nếu không nhớ lệnh (hay như trong ví dụ của bạn là các hàm viết bằng lisp), tại sao bạn không tạo menu, hoặc tạo Toolbar bằng lệnh CUI của CAD ?

- Nếu không rành tạo menu thì tạo Tool Palette

- Nếu đã dùng lisp gọi bảng lệnh thì nên làm theo gợi ý của bác Duy, không nên tốn chỗ cho 1 file lisp + 1 file txt list lệnh, ngoài ra khi gọi sang chương trình khác sẽ làm gián đoạn quá trình làm việc của bạn, bất kể là word hay txt thì sau đó cũng phải back ngược lại về CAD và đánh lệnh

Mình viết cho bạn 1 cái hiển thị bảng lệnh - hoặc lisp. Sau khi chọn lệnh bạn có thể ấn nút OK để CAD thực hiện lệnh đó luôn.

Cách thêm lệnh bạn xem trong code mình ghi chú rồi đó. Sau khi thêm các lệnh sẽ được sắp xếp theo thứ tự abc.

Bạn có thể đánh dòng ghi chú bằng tiếng việt không dấu, hoặc tiếng việt có dấu dạng TCVN3, hoặc Unicode Hexa (tìm tool convert trong các bài tiếng việt trong Lisp), tuyệt đối không đánh trực tiếp font Unicode

 

 

Ghichulenh.jpg


(defun c:lc(/ LM:ListBox str lstData ST:SendKeys)
(setq lstData
(acad_strlsort (list
;Viet tiep cac lenh vao duoi dong nay theo mau "Ten lenh Noi dung"
"Erase Xoa doi tuong"
"Copy Sao chep doi tuong"
"Mirror Lay doi xung"
"CO Copy th\U+00F4ng minh"
))
)
(defun ST:SendKeys (keys / ws)
(vlax-invoke-method (setq ws (vlax-create-object "WScript.Shell")) 'sendkeys keys)
(vlax-release-object ws)
(princ)
)
(defun LM:ListBox ( title data multiple / file tmp dch return )
(cond
(
(not
(and (setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w"))
(write-line
(strcat "listbox : dialog { label = \"" title
"\"; spacer; : list_box { key = \"list\"; multiple_select = "
(if multiple "true" "false") "; } spacer; ok_cancel;}"
)
file
)
(not (close file)) (< 0 (setq dch (load_dialog tmp))) (new_dialog "listbox" dch)
)
)
)
(
t
(start_list "list")
(mapcar 'add_list data) (end_list)

(setq return (set_tile "list" "0"))
(action_tile "list" "(setq return $value)")

(setq return
(if (= 1 (start_dialog))
(mapcar '(lambda ( x ) (nth x data)) (read (strcat "(" return ")")))
)
)
)
)
(if (< 0 dch) (unload_dialog dch))
(if (setq tmp (findfile tmp)) (vl-file-delete tmp))
return
)
(cond (
(setq str (LM:ListBox "Ghi ch\U+00FA l\U+1EC7nh - lisp CAD - @ketxu - 2/6/2012 :" lstData nil))
(setq str (car str))
(ST:SendKeys (strcat (substr str 1 (vl-string-position 32 str)) "\n"))
)
)
(princ)
)

 

 

 

 

 

Cái này , về ý tưởng rất tuyệt bác ah. Nhưng mà bác cho em hỏi như em hiểu thì cái lips này của bác chỉ add được các lệnh có trong cad , chứ em add các lệnh tắt của lips khác thì lại không được hả bác.Hay là phải làm thế nào , bác chỉ dẫn giúp em 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

Cơ chế Senkey nên bạn muốn add gì vô cũng được, kể cả 1 đoạn lisp, một biểu thức, một định nghĩa biến hệ thống, một lệnh NET , lệnh tắt ...

Có điều hình như mình mới lấy từ đầu làm chuỗi gửi đi, nên có hơi hạn chế với đoạn mã dài. Lisp viết lâu lắm rùi, ngại sửa lắm ^^

Riêng với trường hợp lệnh của lisp khác, hay của module nào khác thì add như thường, bạn có thấy cái dòng CO ngay đầu ví dụ của mình không ? Đó là lisp khác chứ chi

Bạn đã thử chưa 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

em có thử rồi, cái lệnh CO không làm việc, và em thay lệnh CO = các lệnh tắt khác cũng không được ah, chỉ có các lệnh nguyên thủy của cad thì ok. Bác xem lại giúp em.

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

Đã thử, vẫn bình thường :)) CO hay CU gì thì lệnh lisp của bạn cũng phải vậy 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

Em xin lỗi bác, em thử lại thì lại được rồi.

Nhân đây bác cho em hỏi thêm 1 xíu nữa. Với lips của bác, em có thêm 1 lệnh tắt LN vào trong lips của bác, nó thực hiện ngon lành rồi, code thì em vẫn để nguyên của bác vậy .

;; free lisp from cadviet.com

;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=49784&st=20

(defun c:lc(/ LM:ListBox str lstData ST:SendKeys)

(setq lstData

(acad_strlsort (list

;Viet tiep cac lenh vao duoi dong nay theo mau "Ten lenh Noi dung"

" offset copy lien tuc"

"Erase Xoa doi tuong"

"Copy Sao chep doi tuong"

"Mirror Lay doi xung"

"ln Copy th\U+00F4ng minh"

))

)

(defun ST:SendKeys (keys / ws)

(vlax-invoke-method (setq ws (vlax-create-object "WScript.Shell")) 'sendkeys keys)

(vlax-release-object ws)

(princ)

)

(defun LM:ListBox ( title data multiple / file tmp dch return )

(cond

(

(not

(and (setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w"))

(write-line

(strcat "listbox : dialog { label = \"" title

"\"; spacer; : list_box { key = \"list\"; multiple_select = "

(if multiple "true" "false") "; } spacer; ok_cancel;}"

)

file

)

(not (close file)) (< 0 (setq dch (load_dialog tmp))) (new_dialog "listbox" dch)

)

)

)

(

t

(start_list "list")

(mapcar 'add_list data) (end_list)

 

(setq return (set_tile "list" "0"))

(action_tile "list" "(setq return $value)")

 

(setq return

(if (= 1 (start_dialog))

(mapcar '(lambda ( x ) (nth x data)) (read (strcat "(" return ")")))

)

)

)

)

(if (< 0 dch) (unload_dialog dch))

(if (setq tmp (findfile tmp)) (vl-file-delete tmp))

return

)

(cond (

(setq str (LM:ListBox "Ghi ch\U+00FA l\U+1EC7nh - lisp CAD - @ketxu - 2/6/2012 :" lstData nil))

(setq str (car str))

(ST:SendKeys (strcat (substr str 1 (vl-string-position 32 str)) "\n"))

)

)

(princ)

)

vì là cái LN là 1 file.vlx . Giờ em muốn thêm 1 đoạn code vào lips của bác để nó thực hiện lặp cái command LN với từng đối tượng được chọn. Mong bác giúp đỡ.

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

Vấn đề này bạn hỏi lại nhiều quá rồi (hoặc bạn khác hỏi nhưng mình chán trả lời câu này rồi)! Code người ta để trong vlx mình can thiệp sao được. Có code cho phép làm điều đó, tức là viết code ngoài để giúp lệnh trong vlx chạy lặp lại với nhiều đối tượng, có code KHÔNG!

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

Chào diễn đàn. Tôi có vấn đề về lệnh tắt như sau: trước máy đã cài cad mechanic 2008 (đĩa có crack). Copy vào ổ e của máy. Sau đó gỡ đi để cài cad 2012 (cũng là đĩa DVD crack). Thực hiên ngon việc thay đôi lệnh tắt như hướng dẫn trên diễn đàn. Sau đó lại gỡ cad 2012 rồi cài lại cad mechanic 2008 từ ổ e của máy, cài xong là xong , máy không yêu cầu keygen. nhưng đây là vấn đề muốn diễn đàn giải thích: không chỉnh sửa lệnh tắt được: mở file acad.pgp ra, sửa lệnh xong, tắt đi máy hỏi có save changes không, save. nhưng máy hiện lên folder chứa file acad, khi tích vào ô save, máy hỏi có muốn thay thế file đang có không, lại save, nhưng máy cho ra bảng thông báo (notepad) rằng: "access is denied". Đành phải OK và gửi lên đây mong được giải đáp, giúp đỡ. thans

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

Em xin lỗi bác, em thử lại thì lại được rồi.

Nhân đây bác cho em hỏi thêm 1 xíu nữa. Với lips của bác, em có thêm 1 lệnh tắt LN vào trong lips của bác, nó thực hiện ngon lành rồi, code thì em vẫn để nguyên của bác vậy .

 

vì là cái LN là 1 file.vlx . Giờ em muốn thêm 1 đoạn code vào lips của bác để nó thực hiện lặp cái command LN với từng đối tượng được chọn. Mong bác giúp đỡ.

Bác cho mình hỏi là muốn chèn 1 cái thông báo menu với cả lệnh kèm luôn sao mình copy đoạn lisp vào toàn báo lỗ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

Bác Hà chưa release nó sau khi dùng lisp ^^

 

@toiyeuvietnam :

- Nếu không nhớ lệnh (hay như trong ví dụ của bạn là các hàm viết bằng lisp), tại sao bạn không tạo menu, hoặc tạo Toolbar bằng lệnh CUI của CAD ?

- Nếu không rành tạo menu thì tạo Tool Palette

- Nếu đã dùng lisp gọi bảng lệnh thì nên làm theo gợi ý của bác Duy, không nên tốn chỗ cho 1 file lisp + 1 file txt list lệnh, ngoài ra khi gọi sang chương trình khác sẽ làm gián đoạn quá trình làm việc của bạn, bất kể là word hay txt thì sau đó cũng phải back ngược lại về CAD và đánh lệnh

Mình viết cho bạn 1 cái hiển thị bảng lệnh - hoặc lisp. Sau khi chọn lệnh bạn có thể ấn nút OK để CAD thực hiện lệnh đó luôn.

Cách thêm lệnh bạn xem trong code mình ghi chú rồi đó. Sau khi thêm các lệnh sẽ được sắp xếp theo thứ tự abc.

Bạn có thể đánh dòng ghi chú bằng tiếng việt không dấu, hoặc tiếng việt có dấu dạng TCVN3, hoặc Unicode Hexa (tìm tool convert trong các bài tiếng việt trong Lisp), tuyệt đối không đánh trực tiếp font Unicode

 

 

 

 

Ghichulenh.jpg

(defun c:lc(/ LM:ListBox str lstData ST:SendKeys)
(setq lstData
    (acad_strlsort (list
;Viet tiep cac lenh vao duoi dong nay theo mau "Ten lenh Noi dung"
    "Erase Xoa doi tuong"
    "Copy Sao chep doi tuong"
    "Mirror Lay doi xung"
    "CO Copy th\U+00F4ng minh"    
    ))
)
(defun ST:SendKeys (keys / ws)
  (vlax-invoke-method (setq ws (vlax-create-object "WScript.Shell"))  'sendkeys keys)
  (vlax-release-object ws)
  (princ)
)
(defun LM:ListBox ( title data multiple / file tmp dch return )
  (cond
	(
  	(not
    	(and (setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w"))
      	(write-line
        	(strcat "listbox : dialog { label = \"" title
          	"\"; spacer; : list_box { key = \"list\"; multiple_select = "
          	(if multiple "true" "false") "; } spacer; ok_cancel;}"
        	)
        	file
      	)
      	(not (close file)) (< 0 (setq dch (load_dialog tmp))) (new_dialog "listbox" dch)
    	)
  	)
	)
	(
  	t    
  	(start_list "list")
  	(mapcar 'add_list data) (end_list)
 
  	(setq return (set_tile "list" "0"))
  	(action_tile "list" "(setq return $value)")
 
  	(setq return
    	(if (= 1 (start_dialog))
      	(mapcar '(lambda ( x ) (nth x data)) (read (strcat "(" return ")")))
    	)
  	)          
	)
  )
  (if (< 0 dch) (unload_dialog dch))
  (if (setq tmp (findfile tmp)) (vl-file-delete tmp))
  return
)
(cond (
        (setq str (LM:ListBox "Ghi ch\U+00FA l\U+1EC7nh - lisp CAD - @ketxu - 2/6/2012 :" lstData nil))
        (setq str (car str))
        (ST:SendKeys (strcat (substr str 1 (vl-string-position 32 str)) "\n"))
        )
)
(princ)
)

 

 

 

anh ơi cho em hỏi em muốn mấy chữ dưới đây hiển thị trên màn hình không theo thứ tự A, B, C, D mà em muốn nó hiện theo thứ tự từng dòng từ trên xuống dưới như mình đã sắp xếp thì làm thế nào anh nhỉ?

(ĐÂY LÀ HIỆN KHÔNG THEO NHỮ DÒNG MÌNH SẮP XẾP MÀ THEO A,B,C,D)

116810_ghichulenh.jpg

"Erase Xoa doi tuong"                I

"Copy Sao chep doi tuong"        I  ĐÂY LÀ HIỂN THỊ TỪNG DÒNG THEO THỨ TỰ MÌNH SẮP XẾP ĐÂY!

"Mirror Lay doi xung"                  I

"CO Copy th\U+00F4ng minh"    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

trong lisp thứ tự có thay đổi như thế nào thì nó vẫn hiện ra màn hình khi gọi lệnh là A rồi tới B và C.... (đó là nguyên bản của anh Ket và hiện bảng của anh Ket bị thay đổi như em giải thích) anh coi giúp em nhe!

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

Bạn bỏ chữ (acad_strlsort và 1 dấu ) dưới chữ minh " 

chắc là OK

Chào bạn cho mình hỏi hiện nay có cách nào coppy toàn bộ code các lệnh trong lisp của mình vào file lisp của bạn để thành 1 file không? mình làm thử nó chỉ hiện bảng lệnh nhưng không sử dụng được chức năng chọn lệnh bằng cách tich và tên lệnh, hay code cua mình dài quá nên nó không nhận. Xin cảm ơn bạ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 có chia sẻ kinh nghiệm của bản thân về vấn đề lệnh tắt. Bản thân mình vào express vào mục commant editer để đổi lệnh theo ý của mình. Ở đây có toàn bộ lệnh của cad. Mình đi làm cũng sử dụng rất nhiều list nhưng việc sửa list về theo ý mình không phải ai cũng làm được. Các bạn nên đổi những lệnh tắt về các phím bên tay trái để tiện sử dụng.

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 có chia sẻ kinh nghiệm của bản thân về vấn đề lệnh tắt. Bản thân mình vào express vào mục commant editer để đổi lệnh theo ý của mình. Ở đây có toàn bộ lệnh của cad. Mình đi làm cũng sử dụng rất nhiều list nhưng việc sửa list về theo ý mình không phải ai cũng làm được. Các bạn nên đổi những lệnh tắt về các phím bên tay trái để tiện sử dụng.

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

Bạn ơi cho mình hỏi nếu muốn thay đổi kích thước khung của menu thì làm thế nào, cái này nó hơi bé

Bác Hà chưa release nó sau khi dùng lisp ^^

@toiyeuvietnam :
- Nếu không nhớ lệnh (hay như trong ví dụ của bạn là các hàm viết bằng lisp), tại sao bạn không tạo menu, hoặc tạo Toolbar bằng lệnh CUI của CAD ?
- Nếu không rành tạo menu thì tạo Tool Palette
- Nếu đã dùng lisp gọi bảng lệnh thì nên làm theo gợi ý của bác Duy, không nên tốn chỗ cho 1 file lisp + 1 file txt list lệnh, ngoài ra khi gọi sang chương trình khác sẽ làm gián đoạn quá trình làm việc của bạn, bất kể là word hay txt thì sau đó cũng phải back ngược lại về CAD và đánh lệnh
Mình viết cho bạn 1 cái hiển thị bảng lệnh - hoặc lisp. Sau khi chọn lệnh bạn có thể ấn nút OK để CAD thực hiện lệnh đó luôn.
Cách thêm lệnh bạn xem trong code mình ghi chú rồi đó. Sau khi thêm các lệnh sẽ được sắp xếp theo thứ tự abc.
Bạn có thể đánh dòng ghi chú bằng tiếng việt không dấu, hoặc tiếng việt có dấu dạng TCVN3, hoặc Unicode Hexa (tìm tool convert trong các bài tiếng việt trong Lisp), tuyệt đối không đánh trực tiếp font Unicode

 

 

 

 

Ghichulenh.jpg

(defun c:lc(/ LM:ListBox str lstData ST:SendKeys)(setq lstData    (acad_strlsort (list;Viet tiep cac lenh vao duoi dong nay theo mau "Ten lenh Noi dung"    "Erase Xoa doi tuong"    "Copy Sao chep doi tuong"    "Mirror Lay doi xung"    "CO Copy th\U+00F4ng minh"        )))(defun ST:SendKeys (keys / ws)  (vlax-invoke-method (setq ws (vlax-create-object "WScript.Shell"))  'sendkeys keys)  (vlax-release-object ws)  (princ))(defun LM:ListBox ( title data multiple / file tmp dch return )  (cond	(  	(not    	(and (setq file (open (setq tmp (vl-filename-mktemp nil nil ".dcl")) "w"))      	(write-line        	(strcat "listbox : dialog { label = \"" title          	"\"; spacer; : list_box { key = \"list\"; multiple_select = "          	(if multiple "true" "false") "; } spacer; ok_cancel;}"        	)        	file      	)      	(not (close file)) (< 0 (setq dch (load_dialog tmp))) (new_dialog "listbox" dch)    	)  	)	)	(  	t      	(start_list "list")  	(mapcar 'add_list data) (end_list)   	(setq return (set_tile "list" "0"))  	(action_tile "list" "(setq return $value)")   	(setq return    	(if (= 1 (start_dialog))      	(mapcar '(lambda ( x ) (nth x data)) (read (strcat "(" return ")")))    	)  	)          	)  )  (if (< 0 dch) (unload_dialog dch))  (if (setq tmp (findfile tmp)) (vl-file-delete tmp))  return)(cond (        (setq str (LM:ListBox "Ghi ch\U+00FA l\U+1EC7nh - lisp CAD - @ketxu - 2/6/2012 :" lstData nil))        (setq str (car str))        (ST:SendKeys (strcat (substr str 1 (vl-string-position 32 str)) "\n"))        ))(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

Cái vụ thay đổi kích thước khung thì bạn có thểm thêm

 

width = 100; height = 20; fixed_width = true; allow_accept = true; //allow double clicking

 

Trước dòng 

 

    (if multiple "true" "false") "; } spacer; ok_cancel;}"

 

 

là được. Nhờ ai đó giúp mình với. Như câu lệnh "Erase TAB  Xoa doi tuong" để trình bày, vì khi chạy nhìn nó hơi kì, mình muốn dòng giải thích lệnh nó thẳng hàng. Cảm ơ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

Cái vụ thay đổi kích thước khung thì bạn có thểm thêm

 

width = 100; height = 20; fixed_width = true; allow_accept = true; //allow double clicking

 

Trước dòng 

 

  (if multiple "true" "false") "; } spacer; ok_cancel;}"

 

là được. Nhờ ai đó giúp mình với. Như câu lệnh "Erase TAB  Xoa doi tuong" để trình bày, vì khi chạy nhìn nó hơi kì, mình muốn dòng giải thích lệnh nó thẳng hàng. Cảm ơn.

Sao mình làm như thế mà cái khung nó không to ra được 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

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


×