Đến nội dung


Hình ảnh
- - - - -

Lisp cơ bản đã viết xong cần tinh chỉnh


  • Please log in to reply
2 replies to this topic

#1 hungpx2008

hungpx2008

    biết vẽ line

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

Đã gửi 21 August 2007 - 12:41 PM

Mình có đoạn lisp viết về balloon giống như mechanical nhưng viết cho công ty mình. Viết đến đây có một số thắc mắc xin các bạn chỉ giáo.
http://www.cadviet.com/upfiles/FILE_1.rar
Các bạn có thể download về coi rùi cho mình hỏi:
1. Mình muốn làm cho cái layer của leader với ball auto là layer 0
2. layer của text là 5.
3. Khi bắt đầu vẽ đến điểm pa chuyển sang p4 thì othormode chuyển sang on.
đây là code:
;;;-------------------------------------------------------
(defun Begin_BA()
(setq
oldOs (getvar "osmode")
oldTrack ( getvar "trackpath")
oldOrth ( getvar "orthomode")
StyleBA ( getvar "textstyle")
Th (cdr (assoc 40 (tblsearch "style" StyleBA)))
n 0
TT (getstring "\nInput name of this plate <>:")
thik ( getstring"\nInput thick of this plate:")
)
(if (= Th 0) (setq Ts (getvar "textsize")) (setq Ts Th))
(setvar "orthomode" 0)
(setvar "osmode" 0)
)
;;;-------------------------------------------------------
(defun So_BA()
(setvar "osmode" 4)
(setvar "trackpath" 0)
(setq
p2 (getpoint pa "\nPlace number : ")
p3 (polar p2 (* pi 1.5) (* 0.5 Ts))
g (angle pa p2)
r1 (distance pa p2)
r2 (* 1.08333 Ts)
p4 (polar pa g (- r1 r2))
)
(setvar "osmode" 0)
(command "leader" p1 pa p4 "" "" "n")
(command "circle" p2 r2)
(if (= Th 0)
(command "text" "j" "c" p3 Ts 0 TT)
(command "text" "j" "c" p3 0 TT)
)
(command "scale" (entlast) "" p3 1)
)
;;;-------------------------------------------------------
(defun End_BA()
(setvar "orthomode" oldOrth)
(setvar "osmode" oldos)
(setvar "trackpath" oldTrack)
(princ)
)
;;;*************************************************
(Defun C:BA( / oldOs oldTrack OldOrth StyleBA Th n
TT Ts p2 pa p3 g r1 r2 p4 p5 thik)
(Begin_BA)
(While
(setvar "osmode" 15359)
(setq p1 (getpoint "\nPoint to part <exit>:")
pa (getpoint p1 "\n Next point:"))
(So_BA)
(setq p5 (getpoint "\nPoint of thick plate text:")
)
(command "text" "j" "TL" p5 0 thik)
)
(End_BA)
)
;;;*************************************************
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 21 August 2007 - 02:12 PM

Bạn kiểm tra lại giúp là lỗi khi upload hay lỗi khi nén file. Vì file của bạn khi download về, chỉ extract được file lisp mà không extract được file dwg. Không có file dwg của bạn để thử, đành phải trả lời tù mù vậy.

Câu hỏi 1 & 2:
Để đối tượng nào vào layer gì, bạn chèn mã lệnh:
(setvar "CLAYER" TENLAYER) và trước dòng command tạo ra lệnh đó.
Ví dụ:
- Tạo leader layer 0, bạn chèn (setvar "CLAYER" "0") ngay trước dòng (command "leader" p1 pa p4 "" "" "n")
- Tạo text layer 5, bạn chèn (setvar "CLAYER" "5") ngay trước dòng (command "text" "j" "c" p3 Ts 0 TT) tất nhiên trong trường hợp cụ thể này bạn phải thêm mã progn để không làm sai bản chất của lệnh lisp.

Câu hỏi 3:
Bạn thêm lệnh '_ortho ON (lệnh transparence) ngay giữa pa và p4, lúc đó mã lệnh trở thành như sau: (command "leader" p1 pa "'_ortho ON" p4 "" "" "n") bạn đừng quên dấu phẩy trên ở trước chữ _ortho. Hoặc bạn có thể tách dòng lệnh command ra rồi chèn mã vào giữa. Dòng (command "leader" p1 pa "'_ortho ON" p4 "" "" "n") trở thành:
(command "leader" p1 pa)
(setvar "ORTHOMODE" 1)
(commanD p4 "" "" "n")

Với cách làm như trên, bạn nên chèn dòng lệnh lưu cấu hình trước khi thực hiện và chèn mã lệnh trả cấu hình khi thực hiện xong. Mã lệnh lưu cấu hình:
(setq OLD_ORTHO (getvar "ORTHOMODE"))
(setq OLD_LAYER (getvar "CLAYER"))
Mã lệnh trả cấu hình:
(setvar "ORTHOMODE" OLD_ORTHO)
(setvar "CLAYER" OLD_LAYER)
  • 0

#3 hungpx2008

hungpx2008

    biết vẽ line

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

Đã gửi 21 August 2007 - 03:30 PM

Bạn kiểm tra lại giúp là lỗi khi upload hay lỗi khi nén file. Vì file của bạn khi download về, chỉ extract được file lisp mà không extract được file dwg. Không có file dwg của bạn để thử, đành phải trả lời tù mù vậy.

Câu hỏi 1 & 2:
Để đối tượng nào vào layer gì, bạn chèn mã lệnh:
(setvar "CLAYER" TENLAYER) và trước dòng command tạo ra lệnh đó.
Ví dụ:
- Tạo leader layer 0, bạn chèn (setvar "CLAYER" "0") ngay trước dòng (command "leader" p1 pa p4 "" "" "n")
- Tạo text layer 5, bạn chèn (setvar "CLAYER" "5") ngay trước dòng (command "text" "j" "c" p3 Ts 0 TT) tất nhiên trong trường hợp cụ thể này bạn phải thêm mã progn để không làm sai bản chất của lệnh lisp.

Câu hỏi 3:
Bạn thêm lệnh '_ortho ON (lệnh transparence) ngay giữa pa và p4, lúc đó mã lệnh trở thành như sau: (command "leader" p1 pa "'_ortho ON" p4 "" "" "n") bạn đừng quên dấu phẩy trên ở trước chữ _ortho. Hoặc bạn có thể tách dòng lệnh command ra rồi chèn mã vào giữa. Dòng (command "leader" p1 pa "'_ortho ON" p4 "" "" "n") trở thành:
(command "leader" p1 pa)
(setvar "ORTHOMODE" 1)
(commanD p4 "" "" "n")

Với cách làm như trên, bạn nên chèn dòng lệnh lưu cấu hình trước khi thực hiện và chèn mã lệnh trả cấu hình khi thực hiện xong. Mã lệnh lưu cấu hình:
(setq OLD_ORTHO (getvar "ORTHOMODE"))
(setq OLD_LAYER (getvar "CLAYER"))
Mã lệnh trả cấu hình:
(setvar "ORTHOMODE" OLD_ORTHO)
(setvar "CLAYER" OLD_LAYER)

OKI THNK BÁC
  • 0