Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
50 replies to this topic

#21 thanhlamct

thanhlamct

    biết lệnh offset

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

Đã gửi 24 September 2010 - 05:21 PM

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

#22 VUVUZELA

VUVUZELA

    biết lệnh chamfer

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

Đã gửi 24 September 2010 - 05:49 PM

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

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

ttps://www.facebook...etThietKeTuDong


#23 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 24 September 2010 - 06:11 PM

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 :">
  • 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


#24 duonghung1210

duonghung1210

    biết lệnh offset

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

Đã gửi 25 September 2010 - 03:08 PM

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

#25 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 25 September 2010 - 04:16 PM

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ề.....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#26 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 26 September 2010 - 09:13 AM

list này kết hợp với list d2d_h2h_t2t_b2b dùng rất chi là khoái :( :(
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 :) :(

Lisp đã bật chế độ ON mỗi khi Load Lisp. (tại dòng (c:Layer_On))

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

COPYM
.....


bác Gia_bach xem lại hộ cái!! :D :D :D

Bạn sài Lisp này với lệnh COPYM làm gì ?
Lisp trên chỉ nên sử dụng cho các nhóm lệnh tạo mới đối tượng.
Các lệnh COPYM (copy. move, rotate ,...) là nhóm lệnh modify đối tượng.

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

hề hề ...
Nhà bác này chỉ được cái là .... rất hiểu ý em ! :D
  • 1

#27 VUVUZELA

VUVUZELA

    biết lệnh chamfer

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

Đã gửi 26 September 2010 - 10:19 AM

Lisp đã bật chế độ ON mỗi khi Load Lisp. (tại dòng (c:Layer_On))
Bạn sài Lisp này với lệnh COPYM làm gì ?
Lisp trên chỉ nên sử dụng cho các nhóm lệnh tạo mới đối tượng.
Các lệnh COPYM (copy. move, rotate ,...) là nhóm lệnh modify đối tượng.
hề hề ...
Nhà bác này chỉ được cái là .... rất hiểu ý em ! :(


Mô Phẹc
Các bác này ăn thịt ...
Admin đâu
Cho các bác này vô 1 nhóm đi, em xin mạn phép đặt tên luôn là : CayViet Team
:(
  • 1

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

ttps://www.facebook...etThietKeTuDong


#28 duonghung1210

duonghung1210

    biết lệnh offset

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

Đã gửi 27 September 2010 - 02:12 PM

Bạn sài Lisp này với lệnh COPYM làm gì ?
Lisp trên chỉ nên sử dụng cho các nhóm lệnh tạo mới đối tượng.
Các lệnh COPYM (copy. move, rotate ,...) là nhóm lệnh modify đối tượng.

ý em là khi mình add list này vào thì dùng lệnh copym trong cad bị lỗi, chứ không phải em dùng list này để áp dụng cho copym! (không thể copymuti được)!! các lênh modify đối tượng khác thì em chưa biết thế nào!! :( :) :(
  • 0
Nhăn răng ra cười cho đời đỡ khổ!!!

#29 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 27 September 2010 - 02:34 PM

ý em là khi mình add list này vào thì dùng lệnh copym trong cad bị lỗi, chứ không phải em dùng list này để áp dụng cho copym! (không thể copymuti được)!! các lênh modify đối tượng khác thì em chưa biết thế nào!! :D :( :(

Đã kiểm tra : đúng như duonghung1210 phát hiện, Lisp có xung đột với lệnh COPYM. :)
Lý do : chắc phải hỏi thằng COPYM thôi.
Khắc phục tạm thời : khi nào dùng lệnh COPYM thì tắt Lisp này đi Layer_Off. :D
  • 0

#30 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 September 2010 - 02:50 PM

E thấy copym với copy thường bây giờ có khác j nhau đâu nhỉ ^^.Tại e thấy copy kiểu j nó cũng copy đến bao giờ mình hủy lệnh thì thôi.Hay nó còn điểm j khác hay hơn nữa ạ :(
  • 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


#31 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 27 September 2010 - 03:24 PM

E thấy copym với copy thường bây giờ có khác j nhau đâu nhỉ ^^.Tại e thấy copy kiểu j nó cũng copy đến bao giờ mình hủy lệnh thì thôi.Hay nó còn điểm j khác hay hơn nữa ạ :(

CopyM hay hơn ở tùy chọn : Repeat (last)/Divide/Measure/Array
Command: COPYM
Select objects: Select the objects to be copied
Base point: Specify a base point
Second point or [Repeat (last)/Divide/Measure/Array (dynamic)/Undo] :

  • 0

#32 nghiautc

nghiautc

    biết lệnh copy

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

Đã gửi 30 September 2010 - 07:12 PM

CopyM hay hơn ở tùy chọn : Repeat (last)/Divide/Measure/Array
Command: COPYM
Select objects: Select the objects to be copied
Base point: Specify a base point
Second point or [Repeat (last)/Divide/Measure/Array (dynamic)/Undo] :

Lisp trên khi Load cùng Líp copy liên tục trên diễn đàn thì Líp ac không dùng đcj nhờ các bạn sửa hộ mình cài

;;; =============================== COPY ARRAY ==============================
(defun cpa (/ ss1 a d di n std)
(setq cmdo (getvar "cmdecho"))
;(command "_.ucs" "")
(setvar "cmdecho" 0)
(princ "\nCopy array:")
(setq ss1 (ssget))
(setq p1 (getpoint "First point: "))
(setq p2 (getpoint p1 "Second point: "))
(if ca:distance
(progn
(setq std (rtos ca:distance 2 4))
(setq d (getdist (strcat "Distance between elements<" std ">: ")))
(if d
(setq ca:distance d)
)
) ;end progn
(setq ca:distance (getdist "Distance between elements: "))
) ;end if
(setq a (angle p1 p2))
(setq a (* (/ 180 pi) a))
(command "_.ucs" "z" a)
(setq di (distance p1 p2))
(setq d ca:distance)
(setq n (/ di d))
(setq n (+ 1 (atoi (rtos n 2 1))))
(command "_.array" ss1 "" "r" 1 n d)
(command "_.ucs" "")
(setvar "cmdecho" cmdo)
(princ)
) ;end defun
(defun c:Ac () (cpa))
  • 0

#33 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 30 September 2010 - 11:09 PM

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

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" )
))

Sẳn bác coi chỉnh thêm cho khi muốn định luôn color, linetype, linetype scale khi tạo layer mới thì thêm sao luôn đi bác. đúng là thấy bở nên đào mãi bác đừng cười vì các hàm loại này mình mù tịt.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#34 tacongthang

tacongthang

    biết vẽ point

  • Members
  • PipPip
  • 99 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 01 October 2010 - 08:49 AM

Ứ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))


cái này ban đầu không hiểu gì, giờ ứng dụng kết hợp với quét layer nên việc vẽ nhanh hơn trước đây nhiều lắm. cái này diễn đàn phải cho nhấn nút thanks nhiều lần nhấn mới sướng.
  • 1

#35 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 01 October 2010 - 09:19 AM

Sẳn bác coi chỉnh thêm cho khi muốn định luôn color, linetype, linetype scale khi tạo layer mới thì thêm sao luôn đi bác. đúng là thấy bở nên đào mãi bác đừng cười vì các hàm loại này mình mù tịt.

Chào duy782006
Về nguyên tắc bạn có thể viết lại hàm (defun MAKE_LAYERS ...) để cập nhật các thông số "color, linetype, linetype scale" khi tạo layer mới.
Tuy nhiên tôi thuờng tách việc tạo mới (cập nhật) Layer thành 1 LISP riêng biệt để dễ quản lý.
Mỗi khi nhận bản vẽ mới chỉ cần chạy LISP này là các LAYER sẽ đuợc Set lại theo tiêu chuẩn của mình.

Bạn thử tham khảo :
- Trong đó hàm layer_lst định nghĩa các tên Layer, color, linetype theo các loại bản vẽ : Kien Truc, Ket Cau, Dien Nuoc, ... Bạn cần thay đổi các thông số này cho phù hợp với tiêu chuẩn của bạn.

(defun layer_lst(tc / layer_list) 
(cond
((= tc "KienTruc")
(setq layer_list (list (list "DIM" 2 "Continuous") (list "TXT" 3 "hidden") ) )
)

((= tc "KetCau")
(setq layer_list (list (list "DIM" 2 "center") (list "TXT" 3 "Continuous") ) )
)

((= tc "DienNuoc")
(setq layer_list (list (list "DIM" 2 "hidden") (list "TXT" 3 "Continuous") ) )
)
);cond
layer_list
)
(defun LayerMake (LName LColor LTyle)
(if (not(tblsearch "layer" LName) )
(command "-layer" "n" LName "") )
(command "-layer" "c" LColor LName "l" LTyle LName "")
)
(defun c:NewLayer(/ tc layer_list)
(setq tc (getstring "\nKieu ban ve < KienTruc, KetCau, DienNuoc> : "))
(setq layer_list (layer_lst tc))
(foreach e layer_list (LayerMake (car e) (cadr e) (caddr e)) )
(princ))



Lisp trên khi Load cùng Líp copy liên tục trên diễn đàn thì Líp ac không dùng đcj nhờ các bạn sửa hộ mình cài

;;; =============================== COPY ARRAY ==============================
..........

To : nghiautc
Lisp có xung đột với 1 vài lệnh.
Khắc phục tạm thời : tắt Lisp này đi Layer_Off khi có xung đột. <_<
  • 1

#36 nghiautc

nghiautc

    biết lệnh copy

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

Đã gửi 05 October 2010 - 08:37 AM

[quote name='gia_bach' date='Oct 1 2010, 9:19' post='110435']
Chào duy782006
Về nguyên tắc bạn có thể viết lại hàm (defun MAKE_LAYERS ...) để cập nhật các thông số "color, linetype, linetype scale" khi tạo layer mới.
Tuy nhiên tôi thuờng tách việc tạo mới (cập nhật) Layer thành 1 LISP riêng biệt để dễ quản lý.
Mỗi khi nhận bản vẽ mới chỉ cần chạy LISP này là các LAYER sẽ đuợc Set lại theo tiêu chuẩn của mình.

Bạn thử tham khảo :
- Trong đó hàm layer_lst định nghĩa các tên Layer, color, linetype theo các loại bản vẽ : Kien Truc, Ket Cau, Dien Nuoc, ... Bạn cần thay đổi các thông số này cho phù hợp với tiêu chuẩn của bạn.

(defun layer_lst(tc / layer_list) 
(cond
((= tc "KienTruc")
(setq layer_list (list (list "DIM" 2 "Continuous") (list "TXT" 3 "hidden") ) )
)

((= tc "KetCau")
(setq layer_list (list (list "DIM" 2 "center") (list "TXT" 3 "Continuous") ) )
)

((= tc "DienNuoc")
(setq layer_list (list (list "DIM" 2 "hidden") (list "TXT" 3 "Continuous") ) )
)
);cond
layer_list
)
(defun LayerMake (LName LColor LTyle)
(if (not(tblsearch "layer" LName) )
(command "-layer" "n" LName "") )
(command "-layer" "c" LColor LName "l" LTyle LName "")
)
(defun c:NewLayer(/ tc layer_list)
(setq tc (getstring "\nKieu ban ve < KienTruc, KetCau, DienNuoc> : "))
(setq layer_list (layer_lst tc))
(foreach e layer_list (LayerMake (car e) (cadr e) (caddr e)) )
(princ))

To : nghiautc
Lisp có xung đột với 1 vài lệnh.
Khắc phục tạm thời : tắt Lisp này đi Layer_Off khi có xung đột. <_<
[/qu> cảm ơn bạn gia_bach. Giờ mình đã tìm được cách khắc phục rôi
Thêm hàm (Layer_Off) vào đầu lisp bị xung đột để tắt Reactor cuối Lisp bật lại bằng hàm (Layer_On)
  • 0

#37 nguyennhulinh

nguyennhulinh

    biết pan

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

Đã gửi 10 January 2011 - 05:38 PM

Bác nào cho e cái hướng dẫn chi tiết đc ko.Sao e tải về rồi, load đc lisp rồi mà chạyko thấy j.Hic hic.Ko biết cách dùng.E đọc đi đọc lại rồi mà vẫn ko dùng đc
  • 0

#38 AutoTay.com

AutoTay.com

    biết lệnh move

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

Đã gửi 19 September 2011 - 05:03 PM

Hay quá!
Nhưng cũng chẳng ứng dụng được là bao khi bản vẽ có nhiều layer với nhiều color, linetyle, linetyle-scale........... Mạn phép xin cách giải quyết vấn đề này từ các PRO! (Em gà. hìhì)
  • 0

#39 NTD

NTD

    biết lệnh rotate

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

Đã gửi 18 July 2012 - 12:09 PM

1. Nếu tại dòng Command : ta gõ Hacth hay .Hatch hay ..Hatch hay ...Hatch ........... bao nhiêu dấu chấm đằng trước cũng cho lệnh Hatch
2. Có bác nào biết cách làm cho CAD hiểu đc sự khác nhau khi ta thêm vào danh sách lệnh (setq COMLAYLST (list ....... của Lisp bác Bach đã đưa ra trong post 1 những lệnh như nhau nhưng khác nhau mỗi chỗ là có bao nhiêu dấu chấm đằng trước ko ?
3. Nếu làm đc như điều đó thì : .Hatch sẽ vô Layer Hatch-Tường _ ..Hatch sẽ vô Layer Hatch-BêTông _ ...Hatch vô Layer Hatch-NềnĐất .......v...v... Sẽ làm tưong tự cho tất cả các lệnh vẽ khác như Line , Pline .....v..v..
4. Kết hơp với acad.pgp để phân biêt các lệnh như nhau nhưng khác nhau là có bao nhiêu dấu chấm thì Lisp của bác Bach sẽ làm đc như thằng Autodesk Architectural Desktop đã làm . Quản lý Layer theo tên vật liệu và cấu kiện . Cty nào chẳng quản lý Layer kiểu vậy , chứ dại gì đưa hết Hatch vô 1 Layer , Text vô 1 Layer ...v....v...
  • 0

#40 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 18 July 2012 - 12:14 PM

1. Nếu tại dòng Command : ta gõ Hacth hay .Hatch hay ..Hatch hay ...Hatch ........... bao nhiêu dấu chấm đằng trước cũng cho lệnh Hatch
2. Có bác nào biết cách làm cho CAD hiểu đc sự khác nhau khi ta thêm vào danh sách lệnh (setq COMLAYLST (list ....... của Lisp bác Bach đã đưa ra trong post 1 những lệnh như nhau nhưng khác nhau mỗi chỗ là có bao nhiêu dấu chấm đằng trước ko ?
3. Nếu làm đc như điều đó thì : .Hatch sẽ vô Layer Hatch-Tường _ ..Hatch sẽ vô Layer Hatch-BêTông _ ...Hatch vô Layer Hatch-NềnĐất .......v...v... Sẽ làm tưong tự cho tất cả các lệnh vẽ khác như Line , Pline .....v..v..
4. Kết hơp với acad.pgp để phân biêt các lệnh như nhau nhưng khác nhau là có bao nhiêu dấu chấm thì Lisp của bác Bach sẽ làm đc như thằng Autodesk Architectural Desktop đã làm . Quản lý Layer theo tên vật liệu và cấu kiện . Cty nào chẳng quản lý Layer kiểu vậy , chứ dại gì đưa hết Hatch vô 1 Layer , Text vô 1 Layer ...v....v...

Đăng ký học lớp Lisp của CadViet ngay nha.
Gãi đúng ngay tuyệt chiêu của "thầy" Ketxu rồi.
  • 0