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

Ứng dụng REACTOR trong quản lý bản vẽ theo layer.

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

Ứng dụng REACTOR trong quản lý bản vẽ theo layer.

 

Trong truờng hợp quản lý bản vẽ theo layer, thông thuờng các đối tuợng khác nhau sẽ thuộc các layer khác nhau (có ngoại lệ).

VD : đối tuợng LINE thuộc layer “LINE”, đối tuợng Text thuộc layer “TEXT”, đối tuợng Dimension (kích thuớc) thuộc layer “DIMENSION”, ...

Cách vẽ thông thuờng là :

1. vẽ đối tuợng truớc, sau đó mới tạo layer rồi chuyển đối tuợng qua layer đó.

2. cách thứ 2 là tạo hàng loạt layer theo qui định, sau đó truớc khi vẽ đối tuợng sẽ set layer tuơng ứng về hiện hành. Vd : vẽ đối tuợng LINE thì set layer “LINE” về hiện hành.

 

Cách vẽ thứ 1 có lợi điểm là không cần quan tâm đến layer hiện hành, sau khi hoàn thành có thể sử dụng lệnh FILTER hay LISP để lọc các kiểu đối tuợng rồi chuyển qua layer tuơng ứng.

Cách vẽ thứ 2 có vẻ rắc rối hơn vì mỗi lần vào lệnh CAD lại phải thay đổi layer tuơng ứng về hiện hành.

Do đó phát sinh nhu cầu : làm thế nào để mỗi khi tạo đối tuợng mới, CAD “hiểu đuợc” chúng ta muốn đặt đối tuợng đó vào Layer tuơng ứng? (không cần thiết phải qua buớc set layer)

Truớc đây tôi có viết 1 lisp sử dụng biến hệ thống "CMDACTIVE", nhưng quả thật trong các t/hợp các lệnh có liên quan đến hộp thoại “vấn đề chưa đuợc giải quyết rốt ráo”.

Link tham khảo

 

Rất may là các lệnh REACTOR (hàm VLR-***) có cung cấp cho chúng ta cách giải quyết vấn đề.

Các bạn có thể tham khảo thêm trong “tàng kinh” của VisualLisp.

Cụ thể là : (vlr-command-reactor data callbacks) cho phép xây dựng các hành động tuơng ứng với các khả năng có thể xảy ra (tạm gọi là sự kiện) khi gọi 1 lệnh CAD.

Một vài sự kiện khi gọi 1 lệnh CAD :

- sự kiện bắt đầu gọi lệnh : :vlr-commandWillStart

- sự kiện khi lệnh kết thúc: :vlr-commandEnded

- sự kiện hủy bỏ lệnh : :vlr-commandCancelled

 

Như vậy đối với truờng hợp muốn Cad “hiểu đuợc” Layer tuơng ứng với mỗi lệnh, chúng ta phải xây dựng các hàm :

- đáp ứng sự kiện bắt đầu gọi lệnh ":vlr-commandWillStart

- đáp ứng sự kiện khi lệnh kết thúc “:vlr-commandEnded”

- đáp ứng sự kiện khi hủy bỏ lệnh “:vlr-commandEnded”

- tạo 1 danh sách các lệnh và layer tưong úng .

 

VD: khi gọi lệnh LINE, CAD sẽ kiểm tra xem layer hiện hành có phải là “LINE” không ?

- Nếu đúng → kết thúc

- Nếu sai → chuyển layer “LINE” về hiện hành (nếu chưa có : tao mới layer)

Tuơng tự cho các sự kiện khi kết thúc lệnh LINE hay sự kiện khi hủy bỏ lệnh (nguời dùng nhấn phím Cancel)

 

Chú ý :

- vì mỗi nguời (cty) có qui định về Layer khác nhau nên cần phải có 1 buớc hiệu chỉnh cho phù hợp.

Cụ thể là tìm dòng (setq COMLAYLST (list

(list "DIMANGULAR" "KT-DIM" )

(list "DTEXT" "TEXT" )

….....................

; Add your own command layer lists here....

))

thay thế hay bổ sung-xóa các cặp danh sách tuơng ứng theo định dạng (list "tênLệnhCadViếtHoa" "tênLayer" ).

VD : thay dòng (list "DTEXT" "TEXT" ) bằng (list "DTEXT" "ChuSo" )

hay thêm (list "LINE" "DuongThang" )

(setq COMLAYLST (list

(list "DIMANGULAR" "KT-DIM" )

(list "DTEXT" "ChuSo" ) (list "LINE" "DuongThang" )

))

- để tắt Reactor gọi lệnh Layer_Off, bật Reactor lại gọi lệnh Layer_On

- trong t/hợp Layer tuơng ứng ở tình trạng : Lock, Freeze, Thaw kết quả còn bị lỗi. <_<

Duới đây là toàn bộ code của Ứng dụng REACTOR trong quản lý bản vẽ theo layer.

(vl-load-com)
(defun StartCommand (CALL CALLBACK / COMLAYLST)
 (setq COMLAYLST (list
	    (list "DIMANGULAR" "KT-DIM" )
	    (list "DIMALIGNED" "KT-DIM" )
	    (list "DIMBASELINE" "KT-DIM" )
	    (list "DIMCENTER" "KT-DIM"  )
	    (list "DIMCONTINUE" "KT-DIM" )
	    (list "DIMDIAMETER" "KT-DIM")
	    (list "DIMLINEAR" "KT-DIM")
	    (list "DIMRADIUS" "KT-DIM" )
	    (list "QDIM" "KT-DIM" )
	    (list "LEADER" "KT-DIM" )
	    (list "TEXT" "TEXT" )
	    (list "MTEXT" "TEXT" )
	    (list "DTEXT" "TEXT" )
                   ; Add your own command layer lists here....
	    ))
 (if (setq N (assoc (strcase (car CALLBACK)) COMLAYLST))
   (progn
     (setq *Currentlayers* (cons (getvar "CLAYER") *Currentlayers*))
     (if (setq objLay(make_layers (cadr N) ))
(vla-put-activelayer *DOC* objLay  )    )    )
   (setq *Currentlayers* (cons nil *Currentlayers*))  )
 (princ)  )

(defun MAKE_LAYERS (LAY_NAM / LAYOBJ LAYSOBJ ) 
 (or *DOC* (setq *DOC* (vla-get-activedocument (vlax-get-acad-object))))
 (setq LAYSOBJ (vla-get-layers *DOC*))
 (if (tblobjname "layer" LAY_NAM)
   (setq LAYOBJ (vla-item LAYSOBJ LAY_NAM))
   (setq LAYOBJ (vl-catch-all-apply 'vla-add (list LAYSOBJ LAY_NAM)))  )
 (if (vl-catch-all-error-p LAYOBJ)
   (not (print (vl-catch-all-error-message LAYOBJ)))
   (progn
     (if (= (strcase (vla-get-name LAYOBJ)) (strcase (getvar "clayer")))
       (setvar "clayer" "0")      )
     (vla-put-lock LAYOBJ :vlax-false)
     (vla-put-layeron LAYOBJ :vlax-true)
     (vla-put-freeze LAYOBJ :vlax-false)      	
     LAYOBJ  )  ))

(defun endCommand (CALL CALLBACK)
 (if *Currentlayers*
   (if (car *Currentlayers*)
     (progn
       (vla-put-lock
         (vla-item
           (vla-get-layers *DOC*)
           (car *Currentlayers*)  )
         :vlax-false        )
       (setvar "CLAYER" (car *Currentlayers*)) ) ) )
 (setq *Currentlayers* (cdr *Currentlayers*)))

(defun cancelCommand (CALL CALLBACK)
 (if *Currentlayers*
   (if (car *Currentlayers*)
     (progn
       (vla-put-lock
         (vla-item
           (vla-get-layers *DOC*)
           (car *Currentlayers*)  )
         :vlax-false        )
       (setvar "CLAYER" (car *Currentlayers*)) ) ) )
 (setq *Currentlayers* (cdr *Currentlayers*)))

(defun C:Layer_On ()  
 (and *vlr-CWS (not (vlr-added-p *vlr-CWS)) (vlr-add *vlr-CWS))
 (and *vlr-CE (not (vlr-added-p *vlr-CE)) (vlr-add *vlr-CE))
 (and *vlr-CC (not (vlr-added-p *vlr-CC)) (vlr-add *vlr-CC))
 (or *vlr-CWS 
    (setq *vlr-CWS (vlr-command-reactor nil '((:vlr-commandwillstart . StartCommand)))))
 (or *vlr-CE
    (setq *vlr-CE (vlr-command-reactor nil '((:vlr-commandEnded . endCommand)))))
 (or *vlr-CC
    (setq *vlr-CC (vlr-command-reactor nil '((:vlr-commandCancelled . cancelCommand)))))
 (princ "\nLayer Reactor ON")
 (princ))
(c:Layer_On)

(defun C:Layer_Off ()
 (and *vlr-CWS (vlr-added-p *vlr-CWS) (vlr-remove *vlr-CWS))
 (and *vlr-CE (vlr-added-p *vlr-CE) (vlr-remove *vlr-CE))
 (and *vlr-CC (vlr-added-p *vlr-CC) (vlr-remove *vlr-CC))
 (princ "\nLayer Reactor OFF")
 (princ))

  • Vote tăng 26

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
Ứng dụng REACTOR trong quản lý bản vẽ theo layer.

 

Hướng giải quyết vấn đề của bác gia_bach rất hay và thuyết phục

Nhưng sau khi thử nghiệm, vẫn xuất hiện "lỗi" khi thực hiện một số lệnh như: leader, Mtext,...

Không hiểu sao nữa?

gia_bach kiểm tra lại xem sao

Cảm ơn a!

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
Hướng giải quyết vấn đề của bác gia_bach rất hay và thuyết phục

Nhưng sau khi thử nghiệm, vẫn xuất hiện "lỗi" khi thực hiện một số lệnh như: leader, Mtext,...

Không hiểu sao nữa?

gia_bach kiểm tra lại xem sao

Cảm ơn a!

Lỗi thế nào mới kiểm tra đuợc chứ!

CAD có 3 lệnh về leader : LEADER, QLEADER, MLEADER.

Bạn cần bổ sung 3 lệnh này vào trong dòng

(setq COMLAYLST (list

...

(list "LEADER" "KT-DIM" )

(list "MLEADER" "KT-DIM" )

(list "QLEADER" "KT-DIM" )

...

(list "MTEXT" "TEXT" )

...

))

  • 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ỗi thế nào mới kiểm tra đuợc chứ!

CAD có 3 lệnh về leader : LEADER, QLEADER, MLEADER.

Bạn cần bổ sung 3 lệnh này vào trong dòng

(setq COMLAYLST (list

...

(list "LEADER" "KT-DIM" )

(list "MLEADER" "KT-DIM" )

(list "QLEADER" "KT-DIM" )

...

(list "MTEXT" "TEXT" )

...

))

 

Đối với lệnh Leader thì nó không chuyển sang Layer KT-Dim

Đối với Mtext thì bj treo khi thực hiện

Xem video

:(

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
Ứng dụng REACTOR trong quản lý bản vẽ theo layer.

 

Bài viết rất hay, em chưa thử như theo em nghĩ thì chắc chỉ dùng đcvớii 1 số lệnh và layer nhất định như các lệnh về DIM, Text, hatch ...

 

Em muốn sửa lệnh bất tắt REACTOR thì sẽ thay phần

 

(defun C:Layer_On ()

 

(defun C:Layer_Off ()

 

Phải không bác đoạn code :

(c:Layer_On)

 

ở giữa có cần phải sửa theo không ah ? em mới tiếp xúc với Lisp nên còn mù mờ lắm, mong bác chỉ giúp. Cảm ơn bác vì Lisp rất hay nay

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
Đối với lệnh Leader thì nó không chuyển sang Layer KT-Dim

Đối với Mtext thì bj treo khi thực hiện

Xem video

:(

 

Đã kiểm tra lại!

Mtext vẫn ok. Lỗi ở đây do xung đột với một Lisp khác nội tại

 

Xem ra thắng LEADER là cứng đầu nhất :(

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ỗi thế nào mới kiểm tra đuợc chứ!

CAD có 3 lệnh về leader : LEADER, QLEADER, MLEADER.

Bạn cần bổ sung 3 lệnh này vào trong dòng

(setq COMLAYLST (list

...

(list "LEADER" "KT-DIM" )

(list "MLEADER" "KT-DIM" )

(list "QLEADER" "KT-DIM" )

...

(list "MTEXT" "TEXT" )

...

))

:(

Thật tuyệt! Mọi việc đã ok.

Leader không phải do xung đột mà do định nghĩa lệnh tắt. Gõ le nó hiểu là Qleader (không có trong dòng list)

Sorry!

Một lần nữa, cảm ơn gia_bach!

Lisp này thật hiệu quả! tổng quát! và chắc chắn sẽ được ứng dụng cao:)

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

Tks thì phải kèm cả lời + ấn chứ bác ^^

Đọc mấy dòng đầu thôi là đã phải thank khẩn cấp.Vì lẽ,trước giờ e toàn phải đổi layer trước khi thực hiện lệnh theo kiểu

(defun c:h() setvar clayer HATCH),rồi lại (defun c:t setvar clayer TEXT),rồi lại gọi hàm tạo layer nếu chưa có.. abc các kiểu,dài dòng lắm ^^

  • 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
sao em không dùng được cho đối tượng là Hatch nhỉ??? :( :( :D

(em đã thêm dòng (list "Hatch" "hatch" ) trong lish ) :D :)

 

Bạn kiểm tra coi chừng xung đột với các LIsP khác về hatch giống trường hợp của tôi

  • 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

Ứng dụng này của bác Gia_Bach hay quá. Cái này còn dùng được vào khá nhiều việc khác chứ không đơn thuần là chỉ để quản lý bản vẽ theo layer.

Thanks bác :(

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

Trước tiên xin cảm ơn Lisp của bác Gia_Bach gửi đến anh em diễn đàn Cadviet. :(

Xin có 1 vài ý kiến đóng góp :

-Trong các bản vẽ đơn thuần chỉ có các Layer cơ bản như :Line,Dimstye,Textstye,Hatch...thì lisp của bác Gia_Bach có vẻ ổn.

-Nhưng trong 1 bản vẽ ví dụ cùng 1 Line có thể có các Layer như:Layer_Tường,Layer_Net đậm,Layer_Nét trục,Layer_Nét đứt thì Lisp của bác Gia_Bach lại set tất cả Layer này về 1 Layer_Line.Tương tự cũng có nhiều Layer Dimension,Textstyle...

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
Trước tiên xin cảm ơn Lisp của bác Gia_Bach gửi đến anh em diễn đàn Cadviet. :(

Xin có 1 vài ý kiến đóng góp :

-Trong các bản vẽ đơn thuần chỉ có các Layer cơ bản như :Line,Dimstye,Textstye,Hatch...thì lisp của bác Gia_Bach có vẻ ổn.

-Nhưng trong 1 bản vẽ ví dụ cùng 1 Line có thể có các Layer như:Layer_Tường,Layer_Net đậm,Layer_Nét trục,Layer_Nét đứt thì Lisp của bác Gia_Bach lại set tất cả Layer này về 1 Layer_Line.Tương tự cũng có nhiều Layer Dimension,Textstyle...

Chính vì thế trong recommend list bác ấy chỉ để những thứ thường là thống nhất :DIM,HATCH,LEADER và TEXT.Những gì không thống nhất thi kết hợp truyền thống thôi ^^.Chứ đặt lệnh LINE về 1 layer thì tất nhiên là không ổn...Nói chung là cái j cũng có 2 mặt 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
sao em không dùng được cho đối tượng là Hatch nhỉ??? :( :( :D

(em đã thêm dòng (list "Hatch" "hatch" ) trong lish ) :D :)

Bạn thay thế hay bổ sung-xóa các cặp danh sách tuơng ứng theo định dạng (list "tênLệnhCadViếtHoa" "tênLayer" ).

Chú ý : tênLệnhCadViếtHoa và CAD có 2 lệnh về Hatch : HATCH và BHATCH

 

 

...............

Xin có 1 vài ý kiến đóng góp :

-Trong các bản vẽ đơn thuần chỉ có các Layer cơ bản như :Line,Dimstye,Textstye,Hatch...thì lisp của bác Gia_Bach có vẻ ổn.

-Nhưng trong 1 bản vẽ ví dụ cùng 1 Line có thể có các Layer như:Layer_Tường,Layer_Net đậm,Layer_Nét trục,Layer_Nét đứt thì Lisp của bác Gia_Bach lại set tất cả Layer này về 1 Layer_Line.Tương tự cũng có nhiều Layer Dimension,Textstyle...

Thay lời muốn nói :

 

...Nói chung là cái j cũng có 2 mặt của nó
  • 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

list này kết hợp với list d2d_h2h_t2t_b2b dùng rất chi là khoái :) :D

nhưng có cách nào mỗi lần khởi động lên là cad bật luôn reactor lên không?? chứ mỗi lần mở 1 bản vẽ lại gõ layer_on thì cũng nhàm nhàm thế nào ấy :( :(

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ì bạn làm 1 cái s::startup ấy ^^

Ví dụ gọi layer_on lên thì bạn set dòng sau cùng này vào cuối lisp

(setq S::STARTUP (append S::STARTUP layer_on))

Nhưng hình như trong lisp là tự để chế độ on mỗi khi bật rồi đấy chứ 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

Cái RECTOR này rất hay và độc đáo

Cái này mình đang nghiên cứu và thấy được cái tuyệt vời của nó (nhưng chưa hiểu nó lắm)

Mình sẽ gửi cho các bạn file Rector.lsp (lệnh tắt : RT) minh họa nhé thử tự như sau :

1. Load file RECTOR.lsp

2. Bấm kệnh RT

3. Chọn hình tròn CIRCLE thứ 1

4. Chọn hình tròn CIRCLE thứ 2 (hoặc POLYLINE) bất kỳ

5. Chương trình sẽ tạo ra cái đường thẳng (LINE) liên kết giữa dt 1 và dt 2

6. Hay 1 chỗ là khi ban di chuyển (MOVE) 1 trong 2 thằng thì cái thằng LINE sẽ tự động nối giữa 2 dt cho dù bạn di chuyển đằng trởi

 

Độc như thịt chuột là chỗ đó

 

(defun C:RT ()
 (setq	EN1	     (car (entsel "\nPick a circle: "))
EN2	     (car (entsel " and another: "))
RCnt	     (if RCnt
	       (1+ RCnt)
	       1
	     )
Connect_Flag 'T
 )
 (if (and EN1 EN2)
   (progn
     (vl-load-com)
     (setq EN3	(Connection EN1 EN2)
    EN3	(vlax-ename->vla-object EN3)
    EN1	(vlax-ename->vla-object EN1)
    EN2	(vlax-ename->vla-object EN2)
     )
     (vlr-object-reactor
(list EN1 EN2 EN3)
(strcat "Connect Circles " (itoa RCnt))
'((:vlr-modified . ConnectFix)

 )
     )
   )
 )
)

(defun Connection (EN1 EN2 / EL1 EL2)
 (setq	EN1 (if	(= (type EN1) 'EName)
      EN1
      (vlax-vla-object->ename EN1)
    )
EN2 (if	(= (type EN2) 'Ename)
      EN2
      (vlax-vla-object->ename EN2)
    )
EL1 (entget EN1)
EL2 (entget EN2)
R1  (cdr (assoc 40 EL1))
R2  (cdr (assoc 40 EL2))
P1  (cdr (assoc 10 EL1))
P2  (cdr (assoc 10 EL2))
A1  (angle P1 P2)
P1  (polar P1 A1 R1)
P2  (polar P2 (+ A1 PI) R2)
 )
 (entmake (list
     '(0 . "LINE")
     (assoc 8 EL1)
     (cons 10 P1)
     (cons 11 P2)
   )
 )
 (entlast)
)

(defun ConnectFix (Not_Obj	 Re_Obj	PList  /      ObjList
	   VObj	  EN	 EL	ENL    P1     P2     R1
	   R2	  SkipIt
	  )
 (if Connect_Flag
   (progn
     (setq Connect_Flag nil)
     (setq ObjList (vlr-owners Re_Obj))
     (foreach VObj ObjList
(setq EN (vlax-vla-object->ename VObj)
      EL (entget EN)
)
(cond
  ((= (cdr (assoc 0 EL)) "LINE")
   (if (eq Not_Obj VObj)
     (setq SkipIt 'T)
   )
   (setq ENL EL)
  )
  ('T
   (set	(if (boundp 'P1)
	  'P2
	  'P1
	)
	(cdr (assoc 10 EL))
   )
   (set	(if (boundp 'R1)
	  'R2
	  'R1
	)
	(cdr (assoc 40 EL))
   )
  )
)
     )
     (setq AA	(angle P1 P2)
    P1	(polar P1 AA R1)
    P2	(polar P2 (+ AA PI) R2)
    ENL	(subst (cons 10 P1)
	       (assoc 10 ENL)
	       ENL
	)
    ENL	(subst (cons 11 P2)
	       (assoc 11 ENL)
	       ENL
	)
     )
     (if (null SkipIt)
(progn
  (entmod ENL)
)
(prompt "\nConnection broken.")
     )
     (setq Connect_Flag 'T)
   )
 )
)

  • Vote tăng 3
  • Vote giảm 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
Cái RECTOR này rất hay và độc đáo

Cái này mình đang nghiên cứu và thấy được cái tuyệt vời của nó (nhưng chưa hiểu nó lắm)

Mình sẽ gửi cho các bạn file Rector.lsp (lệnh tắt : RT) minh họa nhé thử tự như sau :

1. Load file RECTOR.lsp

2. Bấm kệnh RT

3. Chọn hình tròn CIRCLE thứ 1

4. Chọn hình tròn CIRCLE thứ 2 (hoặc POLYLINE) bất kỳ

5. Chương trình sẽ tạo ra cái đường thẳng (LINE) liên kết giữa dt 1 và dt 2

6. Hay 1 chỗ là khi ban di chuyển (MOVE) 1 trong 2 thằng thì cái thằng LINE sẽ tự động nối giữa 2 dt cho dù bạn di chuyển đằng trởi

 

Độc như thịt chuột là chỗ đó

 

Rất hay!

Cái này giống như khái niệm Anchor trong ACA

Hãy khám phá thêm nữa xem.

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 RECTOR này rất hay và độc đáo

Cái này mình đang nghiên cứu và thấy được cái tuyệt vời của nó (nhưng chưa hiểu nó lắm)

Mình sẽ gửi cho các bạn file Rector.lsp (lệnh tắt : RT) minh họa nhé thử tự như sau :

1. Load file RECTOR.lsp

2. Bấm kệnh RT

3. Chọn hình tròn CIRCLE thứ 1

4. Chọn hình tròn CIRCLE thứ 2 (hoặc POLYLINE) bất kỳ

5. Chương trình sẽ tạo ra cái đường thẳng (LINE) liên kết giữa dt 1 và dt 2

6. Hay 1 chỗ là khi ban di chuyển (MOVE) 1 trong 2 thằng thì cái thằng LINE sẽ tự động nối giữa 2 dt cho dù bạn di chuyển đằng trởi

 

Độc như thịt chuột là chỗ đó

 

(defun C:RT ()
................
'((:vlr-modified . ConnectFix)
       ;(:vlr-erased . ConnectKill)
............

Một vd rất hay của Bill Kramer về Reactor ?!

Bạn nghiên cứu viết thêm hàm ConnectKill khi đối tuợng bị xóa. (anh này dấu nghề?)

;(:vlr-erased . ConnectKill)

 

Độc như thịt chuột là chỗ đó

Thịt chuột mà độc á?

How about "thịt chó"?

he he, cuối tuần rồi : 2 mơ ... :(

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ì bạn làm 1 cái s::startup ấy ^^

Ví dụ gọi layer_on lên thì bạn set dòng sau cùng này vào cuối lisp

(setq S::STARTUP (append S::STARTUP layer_on))

Nhưng hình như trong lisp là tự để chế độ on mỗi khi bật rồi đấy chứ hỉ

đâu có, mỗi lần mở bản vẽ mới là lại phải gõ lệnh lại thì mới được! mà thêm dòng lệnh của bác vào cũng không được, em mù tịp về list nên chịu. bác nào biết bảo em ....... :( :( :) :D

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 của bác VuVuzela có thể làm cho chọn liên tiếp các đường tròn được không? có thể áp dụng cho Block được không?

 

Lisp này sưu tầm ở trên mạng nên không phải chính chủ

Cái RECTOR này đang trong thời gian nghiên cứu

Nên đây là forum rất hay (do mới ken cà ren) mà bác gia_bach tạo ra cho anh em trên diễn đàn tham gia thảo luận cho vui

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 này em thấy gần giống kỹ thuật hook nhỉ..Liệu có thể làm cho khi thực hiện các lệnh mà nhập số (real,int...) thì đều "reactor" đổi số đó thành số nhập vào chia cho 1 số cho trước không nhỉ.Nếu thế thì vẽ model nhàn quá ^^

Ví dụ khi người dùng vẽ line,rồi nhập chiều dài line,thì nó tự thêm hậu tố \tile vào,rồi mới send chuỗi đó đến command :">

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

alo alo alo!!! list nè gây lỗi cho lệnh copym

 

COPYM

Select objects: 1 found

 

Select objects:

 

Base point:

Second point or

[Repeat (last)/Divide/Measure/Array (dynamic)/Undo] :

bad argument type: numberp: nil

 

bác Gia_bach xem lại hộ cá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ột vd rất hay của Bill Kramer về Reactor ?!

Bạn nghiên cứu viết thêm hàm ConnectKill khi đối tuợng bị xóa. (anh này dấu nghề?)

;(:vlr-erased . ConnectKill)

 

Độc như thịt chuột là chỗ đó

Thịt chuột mà độc á?

How about "thịt chó"?

he he, cuối tuần rồi : 2 mơ ... :(

Hề hề hề,

Ấy chết, nhà bác hiểu thế là nhà em thất nghiệp đó. Cái chữ độc ở đây nó ..... độc đáo lắm bác ạ.... Hề hề hề.

Cái vụ này nếu không tin mời bác liên hệ với bác SonCad sẽ có ngay đáp án. Hề hề hề.....

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

×