Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2851 replies to this topic

#1401 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 06 December 2012 - 03:16 PM

Đoạn code trên không ổn ketxu ạ. nó chỉ có tác dụng với các lệnh của cad. có 2 vấn đề sảy ra nó không giải quyết được:
- Các lệnh lisp (defun c:lenh....) nó hoàn toàn không nhận biết.
- Các lệnh lisp có sử dụng hàm command bên trong, nó sẽ lấy luôn command cuối cùng sử dụng trong lệnh lisp đó. mà thường thì đó là các lệnh UCS hoặc Undo.
Lệnh mà mình muốn lấy là lệnh cuối cùng giống như khi ta vừa sử dụng 1 lệnh, space hay enter tiếp thì cad gọi lại lệnh vừa sử dụng í.

vlr-command-reactor dùng cho các lệnh của CAD.

Muốn theo dõi các lệnh-hàm Lisp thì dùng : vlr-lisp-reactor : ( vlr-lispWillStart, vlr-lispEnded, vlr-lispCancelled)
  • 1

#1402 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 December 2012 - 05:21 PM

Lệnh là Lệnh Command, nó khác với user define command chứ ^^. Yêu cầu ban đầu ra răng thì nó như vậy Thuylinh ơi :) Chứ ngoài lisp ra còn VBA, NET, ARX ... thì mấy dòng kia làm sao giải quyết vấn đề được ^^
  • 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


#1403 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 07 December 2012 - 08:38 AM

Thế có nghĩa là với đoạn code trên, kể cả khi sửa lại với các hàm bạn gia_bach nêu bên trên thì cũng chỉ giải quyết được với lệnh cad và lệnh lisp. Các lệnh viết bằng VBA, NET, ARX ... như bạn nêu sẽ không lấy được phải không?
Mình nghĩ chủ quan rằng Cad lấy được như vậy thì chắn hẳn họ (lập trình viên autodesk) phải lưu nó vào đâu đó chứ nhỉ. Kiếm hoài không ra :(

PS: Ketxu hay gia_bach có thể giúp mình sửa lại đoạn code trên không? Mấy hàm trên hơi trừu tượng, mình đã cố thử sửa nhưng kết quả lung tung hết cả. Mình không sử dụng các ứng dụng VBA, NET, Arx nên chỉ cần chạy với lệnh cad và lệnh lisp là tốt rồi. Nếu có thể thì các bạn viết thành 1 hàm con với kết quả cuối cùng trả về là string để mình sử dụng nó như thế này :
(defun c:xxx
... do something...
(command (get-last-cmd) ... )
... keep doing something...
(princ)); end program.
Cảm ơn các bạn!
  • 0

#1404 duy267

duy267

    biết vẽ point

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

Đã gửi 09 December 2012 - 10:04 PM

Các bác cho hỏi các hàm reactor chỉ có tác dụng trên bản vẽ hiện hành phải không, khi đóng bản vẽ và mở lại thì không còn tác dụng? Ví dụ lisp vẽ đường tâm của Leemac. Bác nào biết trả lời giúp. Thanks.

;;--------------=={ Associative Centerlines }==---------------;;
;; ;;
;; Uses reactors to update centerlines following ;;
;; modification of associated circles. Stores entity handles ;;
;; in entity xData to enable reactor rebuild upon loading, ;;
;; allowing retention of associativity between sessions. ;;
;;------------------------------------------------------------;;
;; Author: Lee Mac, Copyright ? 2011 - www.lee-mac.com ;;
;;------------------------------------------------------------;;
;; Version 1.0 - 12-05-2011 ;;
;;------------------------------------------------------------;;
(setq cl:ratio 1.25 cl:app "LMAC_CL")
;;------------------------------------------------------------;;
(defun c:cl ( / _line ss e c r l1 l2 )
(if
(and
(setq ss
(ssget
(list '(0 . "CIRCLE") '(-4 . "<NOT") (list -3 (list cl:app)) '(-4 . "NOT>"))
)
)
(or (tblsearch "APPID" cl:app) (regapp cl:app))
)
(progn
(defun _line ( p1 p2 h )
(entmakex
(list (cons 0 "LINE") (cons 10 p1) (cons 11 p2)
(list -3
(list cl:app
(cons 1002 "{") (cons 1005 h) (cons 1002 "}")
)
)
)
)
)
(repeat (setq i (sslength ss))
(setq e (entget (ssname ss (setq i (1- i))))
h (cdr (assoc 5 e))
c (cdr (assoc 10 e))
r (* cl:ratio (cdr (assoc 40 e)))
l1 (_line (polar c 0. r) (polar c pi r) h)
l2 (_line (polar c (/ pi 2.) r) (polar c (/ (* 3. pi) 2.) r) h)
)
(entmod
(list (assoc -1 e)
(list -3
(list cl:app
(cons 1002 "{")
(cons 1005 (cdr (assoc 5 (entget l1))))
(cons 1005 (cdr (assoc 5 (entget l2))))
(cons 1002 "}")
)
)
)
)
(vlr-object-reactor (list (vlax-ename->vla-object (cdr (assoc -1 e)))) (list cl:app h)
(list
(cons :vlr-modified 'cl:circle:callback)
)
)
(vlr-object-reactor (mapcar 'vlax-ename->vla-object (list l1 l2)) (list cl:app h)
(list
(cons :vlr-modified 'cl:line:callback)
)
)
)
)
)
(princ)
)
;;------------------------------------------------------------;;
(defun c:clremove ( / _massoc ss fl i e r d h x )
(defun _massoc ( x l )
(if (setq a (assoc x l))
(cons (cdr a) (_massoc x (cdr (member a l))))
)
)

(princ "\nSelect Circles to Remove Associativity <All>: ")
(setq fl (list '(0 . "CIRCLE") (list -3 (list cl:app))) i -1)

(if
(setq ss
(cond
( (ssget fl) )
( (ssget "_X" fl) )
)
)
(while (setq e (ssname ss (setq i (1+ i)))) (setq e (entget e (list cl:app)))
(foreach r (cdar (vlr-reactors :vlr-object-reactor))
(if
(and
(setq d (vlr-data r))
(listp d)
(eq cl:app (car d))
(or (not (cadr d)) (eq (cdr (assoc 5 e)) (cadr d)))
)
(vlr-remove r)
)
)
(foreach h (_massoc 1005 (cdadr (assoc -3 e)))
(if (setq x (entget (handent h)))
(entmod (list (assoc -1 x) (list -3 (list cl:app))))
)
)
(entmod (list (assoc -1 e) (list -3 (list cl:app))))
)
)
(princ)
)
;;------------------------------------------------------------;;
(defun cl:circle:callback ( owner reactor params / xtyp xval c r )
(if
(and
(vlax-read-enabled-p owner)
(progn (vla-getxdata owner cl:app 'xtyp 'xval) xval)
(setq
c (vlax-get owner 'center)
r (* cl:ratio (vlax-get owner 'radius))
)
)
(mapcar
(function
(lambda ( h a )
(if (or (entget (setq h (handent h))) (entdel h))
(entmod
(list (cons -1 h) (cons 10 (polar c a r)) (cons 11 (polar c (+ a pi) r)))
)
)
)
)
(cddr (mapcar 'vlax-variant-value (vlax-safearray->list xval))) (list 0. (/ pi 2.))
)
)
(princ)
)
;;------------------------------------------------------------;;
(defun cl:line:callback ( owner reactor params )
(setq *data (list owner reactor))
(vlr-command-reactor (list cl:app)
(list
(cons :vlr-commandended 'cl:line:modify)
(cons :vlr-commandcancelled 'cl:line:cancelled)
(cons :vlr-commandfailed 'cl:line:cancelled)
)
)
(vlr-remove reactor)
(princ)
)
;;------------------------------------------------------------;;
(defun cl:line:modify ( reactor params / xtyp xval h ) (vlr-remove reactor)
(if
(and *data (not (vlax-erased-p (car *data))) (progn (vla-getxdata (car *data) cl:app 'xtyp 'xval) xval)
(or
(entget
(setq h
(handent
(caddr
(mapcar 'vlax-variant-value (vlax-safearray->list xval))
)
)
)
)
(entdel h)
)
)
(progn
(cl:circle:callback (vlax-ename->vla-object h) nil nil)
(vlr-add (cadr *data))
(setq *data nil)
)
)
(princ)
)
;;------------------------------------------------------------;;
(defun cl:line:cancelled ( reactor params ) (vlr-remove reactor)
(if *data
(progn
(vlr-add (cadr *data))
(setq *data nil)
)
)
(princ)
)
;;------------------------------------------------------------;;
(
(lambda ( / r d s i e o xtyp xval )
(foreach r (cdar (vlr-reactors :vlr-object-reactor))
(if (and (setq d (vlr-data r)) (listp d) (eq cl:app (car d)))
(vlr-remove r)
)
)
(if (setq s (ssget "_X" (list '(0 . "CIRCLE") (list -3 (list cl:app)))))
(repeat (setq i (sslength s))
(setq e (ssname s (setq i (1- i))))
(vlr-object-reactor (list (setq o (vlax-ename->vla-object e))) (list cl:app (cdr (assoc 5 (entget e))))
(list
(cons :vlr-modified 'cl:circle:callback)
)
)
(vla-getxdata o cl:app 'xtyp 'xval) (setq xval (mapcar 'vlax-variant-value (vlax-safearray->list xval)))
(vlr-object-reactor
(mapcar
(function
(lambda ( h )
(or (entget (setq h (handent h))) (entdel h)) (vlax-ename->vla-object h)
)
)
(list (caddr xval) (cadddr xval))
)
(list cl:app (cdr (assoc 5 (entget e)))) (list (cons :vlr-modified 'cl:line:callback))
)
)
)
)
)
(vl-load-com) (princ)
;;------------------------------------------------------------;;
;; End of File ;;
;;------------------------------------------------------------;;

  • 0

#1405 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 December 2012 - 11:29 PM

Nó cũng là 1 hàm định nghĩa thôi mà bác ^^
  • 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


#1406 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 December 2012 - 11:41 PM

(defun c:xxx
... do something...
(command (get-last-cmd) ... )
... keep doing something...
(princ)); end program.
Cảm ơn các bạn!


(defun ST-Get-List-Command(objReactor lstOfCommand)
(setq #lstCmds (reverse (cons (car lstOfCommand) (reverse #lstCmds)))))
(or #CmdList1
(setq #CmdList1 (vlr-editor-reactor nil '(
(:vlr-lispWillStart . ST-Get-List-Command)
(:vlr-unknownCommand . ST-Get-List-Command)
(:vlr-commandWillStart . ST-Get-List-Command)
)))
)
(defun lastCmd()(last #lstCmds))
Bạn cẩn thận chỗ hàm Lisp k sử dụng trong hàm chuẩn Command nhé. Nếu có sử dụng thì hãy dùng phương thức sendkey
  • 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


#1407 avi612

avi612

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 10 December 2012 - 10:47 AM

Cho mình hỏi 1 vấn đề về sử lý đối tượng khung viewport bằng lisp.
1. Làm thế nào đề xác định tỉ lệ của khung view và mã DXF của nó là bao nhiêu.
2. Từ 1 viewport hình chữ nhật có sẵn trong nền Layout làm thế nào để xác định được 4 điểm của khung view tương ứng với các vị trí trong nền Model.
  • 0

#1408 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 10 December 2012 - 01:20 PM

Cảm ơn bạn Ketxu nhé. Mình tiếp tục ngâm cứu hàm trên của bạn xem có vỡ ra được tẹo nào không. mấy hàm reactor này khó hiểu thật!
@Avi612:
1. Hình như là trong đoạn code này. cái này mình viết lâu rồi nên cũng không nhớ rõ có phải nó không (nó nằm trong ứng dụng tự động điền tỷ lệ bản vẽ vào khung tên block - lấy thông tin tỷ lệ từ zoom scale xp của viewport).

(defun dxf (nmb e) (cdr (assoc nmb (entget e))))
(foreach ssn (convert-ss-to-list (ssget "C" (car pt) (cadr pt) '((0 . "VIEWPORT,LWPOLYLINE"))))
(if (= (dxf 0 (dxf 330 ssn)) "VIEWPORT")
(setq ssn (dxf 330 ssn)))
(setq lst (cons (/ 1 (vla-get-customscale (vlax-ename->vla-object ssn))) lst)))
2. Mình nhớ không nhầm thì trong code của lệnh Align space của express tool có đoạn code giúp giải quyết vấn đề này. bạn nghiên cứu thử xem
  • 1

#1409 avi612

avi612

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 10 December 2012 - 04:13 PM

Hình như đoạn hàm trên sai rồi bạn biến "pt" chưa khai báo thì sao hàm này chạy được, bạn xem lại dòng lệnh foreach dùm mình.
  • 0

#1410 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 10 December 2012 - 04:32 PM

Code để bạn tham khảo, chứ có phải chép lại đâu Avi612
Phần lấy tỉ lệ chính là chỗ CustomScale đó


(vla-get-customscale (vlax-ename->vla-object(ssname (ssget ":S" (list (cons 0 "VIEWPORT"))) 0 )))

  • 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


#1411 duy267

duy267

    biết vẽ point

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

Đã gửi 11 December 2012 - 08:58 PM

Nó cũng là 1 hàm định nghĩa thôi mà bác ^^


Bạn có thể giải thích rõ hơn không. Thanks.
  • 0

#1412 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 11 December 2012 - 10:06 PM


Bạn có thể giải thích rõ hơn không. Thanks.

Ý là khi đóng và mở bản vẽ thì phải load, remove cái reactor cũ rồi tạo lại cái reactor mới có tác dụng
Đồng nghĩa với reactor sẽ mất cũng giống như 1 hàm, khi đóng và mở bản vẽ thì phải làm động tác Load lại vậy
  • 1

#1413 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 12 December 2012 - 10:49 AM

Qua mấy ngày nghiên cứu về chủ đề reactor thì mình có kết luận thế này:
- Reactor: là 1 đối tượng dữ liệu bản vẽ, nó kết nối các sự kiện autocad (event-name) với các hàm lisp (callback_function) ngay khi sự kiện sảy ra. Vì là đối tượng dữ liệu bản vẽ nên giống như mọi đối tượng khác, nó sẽ tồn tại cùng bản vẽ cho đến khi bị remove đi.
- Sự kết nối mà 1 reactor tạo ra giữa event-namecallback-function theo mặc định là không bền vững. sự kết nối này bị mất đi khi đóng bản vẽ dù đối tượng reactor vẫn tồn tại trong cơ sở dữ liệu của bản vẽ đó. Có thể thiết lập tính bền vững cho kết nối bằng các hàm (vlr-pers reactor) và (vlr-pers-release reactor)
- Hàm callback-function là 1 hàm lisp nên nó cần phải được load khi mở bản vẽ thì kết nối của reactor mới có tác dụng. Trong trường hợp kết nối của reactor được thiết lập bền vững, khi sự kiện sảy ra mà hàm callback-function chưa được load thì chương trình báo lỗi.

Như vậy là kết luận trên của bạn Tue_NV chưa hoàn toàn chính xác.
- reactor không tự động bị mất đi, nó chỉ bị mất khi ta chủ động xóa nó.
- vì thế ta chỉ cần load lại hàm callback-function chứ không cần phải tái tạo lại reactor.

Mình mới nghiên cứu nên những ý kiến trên có thể đúng, có thể sai, mong các bạn góp ý và hi vọng các bạn tiếp tục thảo luận về chủ đề này, hơi khó 1 chút nhưng khá hay. Mình tìm thấy mấy topic trong 4r bàn về reactor nhưng hơi ít thông tin để tham khảo
  • 0

#1414 avi612

avi612

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 14 December 2012 - 12:25 AM

Code để bạn tham khảo, chứ có phải chép lại đâu Avi612
Phần lấy tỉ lệ chính là chỗ CustomScale đó


(vla-get-customscale (vlax-ename->vla-object(ssname (ssget ":S" (list (cons 0 "VIEWPORT"))) 0 )))


@Ketxu: Thanks cái đã.

Mình đã áp dụng được cú pháp trên và tìm được 1 cách khác nữa là dùng giá trị của mã DXF 41 chia cho giá trị của mã DXF 45 nó vẫn trả về đúng tỉ lệ customscale.

Và cho mình hỏi thêm:
-- Nếu như đã lấy được giá trị customscale của khung viewport bằng 2 cách trên rồi thì làm cách nào để có thể áp ngược lại cho nó 1 giá trị mới (do ta nhập vào).
Ví dụ:
Khung viewport có tỉ lệ customscale hiện tại là 2. --->mình muốn chuyển nó thành 5 (giá trị 5 do ta nhập vào).
Nếu được xin mọi người hướng dẫn mình xử lý nó theo 2 cách luôn.
1. Là dùng các hàm vla, vl....
2. Là dùng các viết với các hàm thông thường khác.
Mục đích để so sánh sự khác biệt và với những giá trị nhập vào là số thực thì sai số giữa 2 cách có nhiều ko.
Thanks mọi người trước.
  • 0

#1415 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 14 December 2012 - 06:54 AM

1): Visual: Có vla-get-customscale thì cũng có vla-put-customscale
2). Lisp: dùng subst
Tôi hiện không có cad nên chưa test, bạn test thử xem.
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1416 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 14 December 2012 - 08:24 AM

@avi626 & DVH: Bạn không thể entmake hoặc entmod với đối tượng Viewport.
@Ketxu: Đoạn code trên (lấy lệnh cuối cùng bạn viết lại cho mình í) vẫn chưa sử dụng được Ketxu ạ. Với lệnh thuần cad hoặc thuần lisp thì chạy rất tốt, nhưng với lệnh lisp chứa command thì nó vẫn lấy command bên trong chứ không lấy lệnh lisp. Sau mấy ngày đánh vật với nó thì mình cũng chịu thua rùi. Có lẽ là không thể thực hiện được với phương pháp này.
  • 0

#1417 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 14 December 2012 - 08:37 AM

Các bạn cho mình hỏi: Có cách nào để xác định 1 textstyle đang sử dụng 1 font shx dùng loại bảng mã gì không? (TCVN, Unicode, VNi)?
Mình dùng nó cho ứng dụng tự động thay đổi bảng mã cho bộ gõ Unikey khi chỉnh sửa hay viết 1 text trong cad.
  • 0

#1418 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 14 December 2012 - 09:41 AM

....
@Ketxu: Đoạn code trên (lấy lệnh cuối cùng bạn viết lại cho mình í) vẫn chưa sử dụng được Ketxu ạ. Với lệnh thuần cad hoặc thuần lisp thì chạy rất tốt, nhưng với lệnh lisp chứa command thì nó vẫn lấy command bên trong chứ không lấy lệnh lisp. Sau mấy ngày đánh vật với nó thì mình cũng chịu thua rùi. Có lẽ là không thể thực hiện được với phương pháp này.

Cần viết thêm hàm callback cho sự kiện :vlr-lispEnded
Sự kiện :vlr-lispWillStart : lấy lệnh Lisp + stop hàm callback thu thập lệnh CAD .
Sự kiện :vlr-lispEnded : khởi động lại hàm callback thu thập lệnh CAD.

Tham khảo :

(setq ThuyLinh313 t)
(defun Stop_ST-Get-Cad-Command(objReactor lstOfCommand)
(setq ThuyLinh313 nil)
(setq #lstCmds (reverse (cons (car lstOfCommand) (reverse #lstCmds)))))
(defun Start_ST-Get-Cad-Command(objReactor lstOfCommand)
(setq ThuyLinh313 t) )
(defun ST-Get-Cad-Command(objReactor lstOfCommand)
(if ThuyLinh313
(setq #lstCmds (reverse (cons (car lstOfCommand) (reverse #lstCmds))))))
(or #CmdList1
(setq #CmdList1 (vlr-editor-reactor nil '(
(:vlr-lispWillStart . Stop_ST-Get-Cad-Command)
(:vlr-lispEnded . Start_ST-Get-Cad-Command)
;(:vlr-unknownCommand . ST-Get-List-Command)
(:vlr-commandWillStart . ST-Get-Cad-Command) ))))
(defun lastCmd()(last #lstCmds))

  • 2

#1419 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 14 December 2012 - 11:02 AM

@avi626 & DVH: Bạn không thể entmake hoặc entmod với đối tượng Viewport.
@Ketxu: Đoạn code trên (lấy lệnh cuối cùng bạn viết lại cho mình í) vẫn chưa sử dụng được Ketxu ạ. Với lệnh thuần cad hoặc thuần lisp thì chạy rất tốt, nhưng với lệnh lisp chứa command thì nó vẫn lấy command bên trong chứ không lấy lệnh lisp. Sau mấy ngày đánh vật với nó thì mình cũng chịu thua rùi. Có lẽ là không thể thực hiện được với phương pháp này.

Xin lỗi TL, lúc code mình mới chỉ gộp lại thôi, quên béng là có mấy cái phản hồi.
Khi lisp start thì nhận được ngay tên lisp, nhưng lúc này cái reactor lệnh CAD nó vẫn còn, nên nó bắt luôn cả hàng bên trong. Vậy tốt nhất TL dừng reactor lệnh CAD khi lisp willstart, lisp end thì trả lại

P/s : ẩu quá, bác Gia_bach đã thịt nó rồi ^^
  • 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


#1420 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 14 December 2012 - 11:15 AM

Cần viết thêm hàm callback cho sự kiện :vlr-lispEnded
Sự kiện :vlr-lispWillStart : lấy lệnh Lisp + stop hàm callback thu thập lệnh CAD .
Sự kiện :vlr-lispEnded : khởi động lại hàm callback thu thập lệnh CAD.

Nghĩ mãi mới hiểu phương pháp của bạn Gia_Bach. Quá hay luôn!! Mình triển khai thử xem đến đâu. Cảm ơn Gia_Bach và Ketxu nhiều nhiều ^^
  • 0