Đến nội dung


Hình ảnh
- - - - -

[yêu cầu] xuất block nhanh !


  • Please log in to reply
29 replies to this topic

#21 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 19 December 2011 - 01:51 PM



(vl-load-com)
(if (null InsBlk)
(setq InsBlk (vlr-command-reactor nil '((:vlr-unknownCommand . call_back)))))
;;*********************************************************************
(defun call_back (calling-reactor comstrl )
(setq First_Key (strcase (substr (nth 0 comstrl) 1 1))
End_key (substr (nth 0 comstrl) 2) )
(if (and (= First_Key "F") ;;;;; (= (strlen (rtos (atof End_key) 2 0)) (strlen End_key))
)
(ham-thuc-thi)
)
)
;;*********************************************************************
(defun ham-thuc-thi()
(command "copy" (ssget) "" (getpoint) (getpoint) "")
)

Bác PTB và bác Ket cho em hỏi tý!
Cái Reactor này thì hay thiệt, nhưng với khả năng của em thì chưa hiểu thấu đáo về nó. Em hiểu nôm na là thế này:
Khi ta nhập lệnh từ command line thì cad sẽ xem text ta nhập vào là một string, mình dùng hàm để phân tích string này ra làm 2 phần, First_key và End_key (như bác PTB ),
tiếp đó ta xét nếu First_key là "F" (hoặc gì gì đó...) thì thực thi cái lệnh (hàm-thực-thi)....vậy có đúng ko ah?
Nếu trình tự nó là vậy thì em thắc mắc là sau em thay cái ham-thuc-thi đó theo một lệnh khác thì nó ko chạy dc ah?
cái nữa là cái dòng này:
(defun call_back (calling-reactor comstrl )
thì thằng calling-reactor có nghĩa gì ah, và nó thay đổi theo....tùy hứng của người viết thôi sao?

Mong chút ánh sáng từ các bác đi trước :)
  • 0
Hình đã gửi

#22 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 19 December 2011 - 01:54 PM

E đã "mượn" đoạn code của bác Bình và thay cái ham-thuc-thi ở trên :)
  • 0
Hình đã gửi

#23 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5684 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 19 December 2011 - 02:05 PM

Chú ý trong Reactor k dùng được các hàm Command.
calling-reactor là Object quản lý Reactor tương ứng. Trong hàm thục thi bạn có thể gán kết quả trả về là 2 đối số đó để nghiên cứu. Không phải lúc nào nó cũng là 1 String.
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#24 federera6

federera6

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 19 December 2011 - 02:39 PM

theo mình thì yêu cầu của bạn có lẽ ko phải là lisp, mà là đặt phím tắt F1 Cho lệnh insert block có tên là 1 có sẵn?
cái này thì phải biết cơ bản một chút về menu, tạo lệnh mới và đặt phím tắt
Theo hình của mình thì:
1) trước tiên vào customize nhấp vào biểu tượng new command
2)đặt tên lệnh là Block1
3)nhập đoạn code sau bào ô macro ^C^C-insert 1 \ 1 0
4)nắm lệnh Block1 (ở chỗ mình đánh số 2) kéo thả vào Shorcut key để tạo phím tắt
5) tại ô key nhấn phím F1
Apply rồi đóng lại, nhấn thử F1 xem thế nào?
chú ý là trong bản vẽ phải có sẵn block 1 như bạn nói nhé!

Hình đã gửi
P/S Mọi thứ trên diễn đàn là Free và công khai nha bạn, các bác ở trên trêu bạn chút thôi. Chứ muốn bảo mật thì ko ai vào CadViet làm gì nhỉ!

em làm giống hệt như của anh nhưng sao không được nhỉ ! em tìm phương pháp của anh trên diễn đàn nhưng không thấy !
  • 0

#25 federera6

federera6

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 19 December 2011 - 02:45 PM

Hề hề hề, cho mình ké ý kiến của bác lp-hai nhé
Nếu như chắc chắn rằng cái block mang tên 1 đã có trên bản vẽ thì bạn chủ thớt có thể chơi thử thằng cu này xem có đúng ý bạn không nhé. Nếu sai thì bạn phải tìm cách khác, còn nếu đúng thì bạn cứ thế mà phát huy với các block bạn muốn



(defun c:f1 ()
(defun ins ()
(command "insert" "1" (getpoint "n Chon diem nhap") 1 "" 0) )
(ins)
(while (= (strcase (setq ans (getstring "n Ban muon tiep tuc <y or n> : "))) "Y")
(ins)
)
(princ)
)

Lưu ý rằng code lisp này đượic bảo mật ở cấp không không thấy nên bạn hãy dè chừng khi sử dụng kẻo mà nó không được như ý bạn muốn đâu.
Hề hề hề,

lisp của anh, em sử dụng rất mượt, để gọi các block khác như block 2 3 4 em chỉ việc thay cấu trúc defun 2 3 4 và insert 2 3 4 là có thể đúng với mục đích của em .
tuy nhiên đối với block có gắn với lệnh ATT thì khi gọi block ra không được mượt nữa. Em cũng đang dự định làm thêm mấy cái block động ( Dynamic )
không biết lisp chạy có được không.
có gì anh update thêm vào trong lisp f1 cho em với !
em chân thành cám ơn !
  • 0

#26 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5684 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 19 December 2011 - 02:55 PM

Qua Topic phát hiện ra lúc Download, nếu 2 lisp cùng tên nó chỉ down thằng đằng sau, thành ra nếu down code của Ketxu sẽ được code của bác Bình ^^. Mọi người chú ý tốt nhất nên kích vào Reply để trả lời 1 bài nào đó để lấy code
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#27 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 19 December 2011 - 03:52 PM

lisp của anh, em sử dụng rất mượt, để gọi các block khác như block 2 3 4 em chỉ việc thay cấu trúc defun 2 3 4 và insert 2 3 4 là có thể đúng với mục đích của em .
tuy nhiên đối với block có gắn với lệnh ATT thì khi gọi block ra không được mượt nữa. Em cũng đang dự định làm thêm mấy cái block động ( Dynamic )
không biết lisp chạy có được không.
có gì anh update thêm vào trong lisp f1 cho em với !
em chân thành cám ơn !

Hế hề hề,
Như bạn đã thấy lisp trên thực chất là sử dụng lệnh Insert của Cad thông qua dòng code (command "insert" ....) Vì thế nếu bạn muốn sử dụng với bolck có chứa thuộc tính thì bạn cần hiểu rõ nội dung của block thuộc tính này và trật tự của các thuộc tính khi insert block này vào bản vẽ. Sau đó bạn cứ thế mà bổ sung thêm phần nhập các giá trị của thuộc tinh cho block vào trong dòng lệnh (command "insert ..... là OK)
Do chả biết block thuộc tính của bạn có chứa bao nhiêu thuộc tính và những thuộ tính đó được sắp xếp thế nào trong block nên mình khôn thể bổ sung như bạn yêu cầu được. vậy nên mình chỉ hướng dẫn về mặt nguyên tắc và bạn hãy thử thực hiện xem sao nhé. Nếu không làm được thì bạn phải upload cái block thuộc tinh của bạn lên mình mới có thể bổ sung theo yêu cầu được.
@ Bác lp_hai: Thực chất thì mình cũng mới chỉ lọ mọ với cái thằng reactor này nên cũng như bác chưa thể hiểu thấu đáo nó được và cũng có khá nhiều nỗi niềm biết tỏ cùng ai lắm bác ạ.
Về cái bác hỏi, thì thực lòng là mình cũng chỉ hiểu thông qua ví dụ của bác Ketxu. Vì thế nếu có giả nhời sai bác cũng đừng mắng nhé.
1/- Trước hết phải nói tới cái hàm (vlr-command-reactor ....)
Theo help deverloper thì:

Constructs an editor reactor that notifies of a command event
(vlr-command-reactor data callbacks)
Arguments
data
Any AutoLISP data to be associated with the reactor object; otherwise nil if no data is to be associated with the reactor.
callbacks
A list of pairs of the following form:
(event-name . callback_function)
where event-name is one of the symbols listed in the Command Reactor Events table below, and callback_function is a symbol representing a function to be called when the event fires. Each callback function accepts two arguments:
reactor_object The VLR object that called the callback function
list A list containing a single element, the string identifying the command.
Return Values
The reactor_object argument.
Command reactor events
Event name
Description
:vlr-unknownCommand
A command not known to AutoCAD was issued
:vlr-commandWillStart
An AutoCAD command has been called
:vlr-commandEnded
An AutoCAD command has completed
:vlr-commandCancelled
An AutoCAD command has been canceled
:vlr-commandFailed
An AutoCAD command failed to complete


Cứ theo cái vốn bập bẹ về tiếng Anh của mình thì đại khái đây là cái hàm dùng để thiết lập một reactor mỗi khi có một sự kiện chi chi đó xảy ra ở dòng command của CAD (nghĩa là khi ai đó khoái chí gõ bừa vào đó.)
Về tham số data của hàm: ở đây nhập là nil có nghĩa rắng bất chấp việc nhập đó là só hay là chữ, miễn rằng có gõ là được. (Có thể trong một vài trường hợp nào đó mà người dùng chỉ khoái là nhập text thôi thì cái thằng data này sẽ phải thay đổi thành cái chi chi rứa bác ạ)
Cái thằng call_back chình là cái phản ứng (reactor) mà cad sẽ phải thực hiện khi có sụ kiện xảy ra (Ví như khi thấy có sột soạt ở cổng thì ông dog phải gầm gừ, kiểm tra và quyết định xem có nên sủa hay không bác ạ)
Vì thế nên thằng này luôn có hai đối số
1/- Làm gì
2/- Làm thế nào
Thằng làm gì thì được quyết định bởi ông chủ CAD: ấy là cái bảng nội quy ở phía dưới của help.
Còn làm thế nào ấy là do ông thầy huấn luyện nó (là những người hay khoái nghịch lisp) tạo ra.
Rất có thể như bác ketxu đã chỉ là bác có quyền bắt chú dog phải một công đôi ba việc. nhưng dù là việc gì cũng phải đúng với nội quy mà CAD đã đưa ra.

Về công tác huấn luyện chó này thì mỗi người một phách. Bác cứ thoải mái mà huấn luyện, miễn rằng chịu khó tôn trọng cái quy định chung của trường nghiệp vụ (ở đây là cái ông hiệu trưởng Lisp đặt ra). Tỷ như không được cho chó ăn bả chuột chẳng hạn (cái thằng command là một thứ bả chuột với thằng cẩu reactor đấy)....
Và cái nghề huấn luyện lisp cẩu này cũng nhiều hiểm nguy lắm. (lơ mơ bị cẩu sực như chơi đấy bác ạ). Mình cũng mới đang chân thấp chân cao, giơ mông ra trước để đi vào tham quan cái trường huấn luyện này. hễ thấy không êm thì chuồn lẹ cho đỡ mất thời gian phải quay đầu bác ạ.

Hề hề hề, ấy là mấy dòng "cảm tưởng" của mình khi bác hỏi về mấy món chuyên dùng để dạy .... lisp cẩu....
Chúc bác luôn vui vẻ và an toàn khi dạy cái giống .... lisp cẩu này.

Hề hề hề...
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#28 only102

only102

    biết vẽ pline

  • Advance Member
  • PipPip
  • 63 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 19 December 2011 - 04:14 PM

Thía rùi muốn xem cái Help (F1) và AutoCAD Text Window (F2) Snap ON/OFF... thì tính sao nhể (?)
Sao ko dùng "11", "22", "33"...chẳng đụng chạm ai cóa phải là sướng ko ?
  • 0
Không sợ việc gì khó! Chỉ sợ việc bất khả thi...

#29 federera6

federera6

    biết zoom

  • Members
  • Pip
  • 17 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 19 December 2011 - 04:14 PM

theo em nghĩ thì món lisp này cũng là dạng marco bên excel, công dụng chủ đạo của nó là:
+ làm nhanh thao tác thực hiện công việc
+ thực hiện những công việc không không có sẵn trong chương trình !
cách học nhanh nhất marco bên excel là chế độ record macor, em không biết bên autocad này có cái đó không ?
  • 0

#30 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5684 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 19 December 2011 - 05:07 PM

Thía rùi muốn xem cái Help (F1) và AutoCAD Text Window (F2) Snap ON/OFF... thì tính sao nhể (?)
Sao ko dùng "11", "22", "33"...chẳng đụng chạm ai cóa phải là sướng ko ?

Bạn đọc và phân biệt kỹ câu hỏi của OP. F1 và "F1" khác hẳn nhau

cách học nhanh nhất marco bên excel là chế độ record macor, em không biết bên autocad này có cái đó không ?

Chắc là không bạn ạ
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC