Rated 5/5 based on 240179 internet user reviews

Jump to content


Change Photo
- - - - -

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


  • Please log in to reply
50 replies to this topic

#1 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1,230 posts
Danh tiếng: 1300 (rất tốt)

Gửi vào 23 September 2010 - 02:01 PM

Ứ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 ḍ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 ḍ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.
  (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 _linenums:0'>(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))

  • 25

#2 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 posts
Danh tiếng: 220 (khá)

Gửi vào 23 September 2010 - 02:21 PM

Ứ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!
  • 0

#3 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1,230 posts
Danh tiếng: 1300 (rất tốt)

Gửi vào 23 September 2010 - 02:34 PM

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 ḍng
(setq COMLAYLST (list
...
(list "LEADER" "KT-DIM" )
(list "MLEADER" "KT-DIM" )
(list "QLEADER" "KT-DIM" )
...
(list "MTEXT" "TEXT" )
...
))

  • 2

#4 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 posts
Danh tiếng: 220 (khá)

Gửi vào 23 September 2010 - 02:41 PM

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 ḍ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
:(
  • 0

#5 bejero

bejero

    biết pan

  • Members
  • Pip
  • 9 posts
Danh tiếng: 0 (b́nh thường)

Gửi vào 23 September 2010 - 02:44 PM

Ứ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
  • 0

#6 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 posts
Danh tiếng: 220 (khá)

Gửi vào 23 September 2010 - 02:50 PM

Đố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 :(
  • 0

#7 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 posts
Danh tiếng: 220 (khá)

Gửi vào 23 September 2010 - 03:03 PM

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 ḍ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 ḍ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:)
  • 0

#8 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5,048 posts
Danh tiếng: 2314 (tuyệt vời)

Gửi vào 23 September 2010 - 04:34 PM

Tks th́ phải kèm cả lời + ấn chứ bác ^^
Đọc mấy ḍ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 ḍng lắm ^^
  • 1

Thành viên nhóm CadMagic.

Mời bạn ghé thăm facebook nhóm  :

CAD MAGIC


#9 duonghung1210

duonghung1210

    biết lệnh offset

  • Members
  • PipPipPip
  • 174 posts
Danh tiếng: 59 (tàm tạm)

Gửi vào 23 September 2010 - 04:44 PM

sao em không dùng được cho đối tượng là Hatch nhỉ??? :( :( :D
(em đă thêm ḍng (list "Hatch" "hatch" ) trong lish ) :D :)
  • 0
Nhăn răng ra cười cho đời đỡ khổ!!!

#10 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 posts
Danh tiếng: 220 (khá)

Gửi vào 23 September 2010 - 04:53 PM

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

#11 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 901 posts
Danh tiếng: 491 (tốt)

Gửi vào 23 September 2010 - 08:31 PM

Ứ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 :(
  • 0

Posted Image
IN HIM, I TRUST. THE TRUST IN MY GOD


#12 tucdrom

tucdrom

    — T — U — N — A —

  • Members
  • PipPipPipPipPipPip
  • 497 posts
Danh tiếng: 630 (tốt)

Gửi vào 23 September 2010 - 09:05 PM

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...

  • 0
Email : anhtu2101@gmail.com

Mobile : 091.787.9699

Yahoo_ID :ks.anhtu211

Website: www.danxaydung.vn

#13 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5,048 posts
Danh tiếng: 2314 (tuyệt vời)

Gửi vào 23 September 2010 - 09:44 PM

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 ǵ 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ó
  • 0

Thành viên nhóm CadMagic.

Mời bạn ghé thăm facebook nhóm  :

CAD MAGIC


#14 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1,230 posts
Danh tiếng: 1300 (rất tốt)

Gửi vào 24 September 2010 - 07:41 AM

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


  • 2

#15 duonghung1210

duonghung1210

    biết lệnh offset

  • Members
  • PipPipPip
  • 174 posts
Danh tiếng: 59 (tàm tạm)

Gửi vào 24 September 2010 - 11:31 AM

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 :( :(
  • 0
Nhăn răng ra cười cho đời đỡ khổ!!!

#16 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5,048 posts
Danh tiếng: 2314 (tuyệt vời)

Gửi vào 24 September 2010 - 01:17 PM

Th́ bạn làm 1 cái s::startup ấy ^^
Ví dụ gọi layer_on lên th́ bạn set ḍ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ỉ
  • 1

Thành viên nhóm CadMagic.

Mời bạn ghé thăm facebook nhóm  :

CAD MAGIC


#17 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 24 September 2010 - 02:55 PM

Cái RECTOR này rất hay và độc đáo
Cái này ḿ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)
Ḿ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 tṛn CIRCLE thứ 1
4. Chọn h́nh tṛn CIRCLE thứ 2 (hoặc POLYLINE) bất kỳ
5. Chương tŕ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)
)
)
)


  • 2

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#18 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 posts
Danh tiếng: 220 (khá)

Gửi vào 24 September 2010 - 03:02 PM

Cái RECTOR này rất hay và độc đáo
Cái này ḿ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)
Ḿ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 tṛn CIRCLE thứ 1
4. Chọn h́nh tṛn CIRCLE thứ 2 (hoặc POLYLINE) bất kỳ
5. Chương tŕ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.
  • 0

#19 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1,230 posts
Danh tiếng: 1300 (rất tốt)

Gửi vào 24 September 2010 - 03:39 PM

Cái RECTOR này rất hay và độc đáo
Cái này ḿ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)
Ḿ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 tṛn CIRCLE thứ 1
4. Chọn h́nh tṛn CIRCLE thứ 2 (hoặc POLYLINE) bất kỳ
5. Chương tŕ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ơ ... :(
  • 0

#20 duonghung1210

duonghung1210

    biết lệnh offset

  • Members
  • PipPipPip
  • 174 posts
Danh tiếng: 59 (tàm tạm)

Gửi vào 24 September 2010 - 04:42 PM

Th́ bạn làm 1 cái s::startup ấy ^^
Ví dụ gọi layer_on lên th́ bạn set ḍ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 ḍ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
  • 0
Nhăn răng ra cười cho đời đỡ khổ!!!