Đến nội dung


Hình ảnh
- - - - -

lisp gỡ 1 lệnh thực hiện 2 lệnh đồng thời !


  • Please log in to reply
7 replies to this topic

#1 lysamtanhaccs4

lysamtanhaccs4

    biết vẽ circle

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

Đã gửi 06 April 2008 - 11:34 AM

em có 1 yêu cầu như thế này: các bác pro có thể cho em 1 lisp khi em gõ 1 lệnh "1" chẳng hạn thì trên comman đồng thời thục hiện lệnh gọi layer "dimesnion" và thực hiện lệnh ghi kích thước "dimlinear"
xin các Bác chỉ dùm em :bigsmile:
  • 0

#2 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 07 April 2008 - 07:18 AM

em có 1 yêu cầu như thế này: các bác pro có thể cho em 1 lisp khi em gõ 1 lệnh "1" chẳng hạn thì trên comman đồng thời thục hiện lệnh gọi layer "dimesnion" và thực hiện lệnh ghi kích thước "dimlinear"
xin các Bác chỉ dùm em :bigsmile:

Không chỉ 2 mà bạn muốn bao nhiêu cũng được. Hiệu quả của lisp chính là ở chỗ: bạn gõ 1 lệnh -> chương trình thực hiện hàng loạt lệnh đã thiết lập trước theo ý muốn. Yêu cầu của bạn cực kỳ đơn giản đối với lisp:

(defun C:1() (setvar "clayer" "dimension") (command "dimlinear" pause))

Lưu ý: bản vẽ của bạn phải có layer "dimension". Nếu không, sẽ bị lỗi.
Thật ra, lisp có thể kiểm tra sự tồn tại của layer "dimension", nếu chưa có thì tạo ra nó trước khi thực hiện "dimlinear". Tuy nhiên, bạn yêu cầu như trên thì chương trình chỉ đơn giản vậy thôi.
  • 1

#3 lysamtanhaccs4

lysamtanhaccs4

    biết vẽ circle

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

Đã gửi 09 April 2008 - 09:20 PM

Không chỉ 2 mà bạn muốn bao nhiêu cũng được. Hiệu quả của lisp chính là ở chỗ: bạn gõ 1 lệnh -> chương trình thực hiện hàng loạt lệnh đã thiết lập trước theo ý muốn. Yêu cầu của bạn cực kỳ đơn giản đối với lisp:

(defun C:1() (setvar "clayer" "dimension") (command "dimlinear" pause))

Lưu ý: bản vẽ của bạn phải có layer "dimension". Nếu không, sẽ bị lỗi.
Thật ra, lisp có thể kiểm tra sự tồn tại của layer "dimension", nếu chưa có thì tạo ra nó trước khi thực hiện "dimlinear". Tuy nhiên, bạn yêu cầu như trên thì chương trình chỉ đơn giản vậy thôi.

bác 'ssg' có thể chỉ em nếu như trên bản vẽ đã có layer "dimension" rồi thì thôi còn nếu ko có thì có thể tự tạo ra layer "dimension"dc ko ? trên bản vễ of em chỉ sài 4 layer cơ bản là dimension , hiden , basic và center .
em có thêm 1 yêu cầu nữa như sau khi gõ 1 fím tắt nó có thể thực hiện 1 lệnh tạo ra 2 or 3 (line,rectang,arc,đường tròn ....)với độ dài,khoảng cách,đường kính... khác nhau mà mình đã định sẵn bằng lisp ko ?
ví dụ em gõ fím "A" thì tạo ra 2 đg tròn đồng tâm với R1=6, R2=10. 1 trong 2 đg tròn đó thuộc layer "hiden" thì càng tốt và có sẵn đg tâm (layer center) thì verry good !
em làm bên thiết kế khuôn gạch men trên cad tại Binh Dương.
thank ! các Bác
:bigsmile:
  • 0

#4 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 11 April 2008 - 10:52 AM

bác 'ssg' có thể chỉ em nếu như trên bản vẽ đã có layer "dimension" rồi thì thôi còn nếu ko có thì có thể tự tạo ra layer "dimension"dc ko ? trên bản vễ of em chỉ sài 4 layer cơ bản là dimension , hiden , basic và center .
em có thêm 1 yêu cầu nữa như sau khi gõ 1 fím tắt nó có thể thực hiện 1 lệnh tạo ra 2 or 3 (line,rectang,arc,đường tròn ....)với độ dài,khoảng cách,đường kính... khác nhau mà mình đã định sẵn bằng lisp ko ?
ví dụ em gõ fím "A" thì tạo ra 2 đg tròn đồng tâm với R1=6, R2=10. 1 trong 2 đg tròn đó thuộc layer "hiden" thì càng tốt và có sẵn đg tâm (layer center) thì verry good !
em làm bên thiết kế khuôn gạch men trên cad tại Binh Dương.
thank ! các Bác
:bigsmile:

Bạn dùng thử lisp sau:

;;;PUBLIC FUNCTIONS
;;;-------------------------------------------------------
(Defun Bdraw() ;;;Luu lai layer va trang thai Object Snap hien hanh
(setq OldOs (getvar "osmode") OldLay (getvar "clayer"))
(setvar "osmode" 0) ;;;Vo hieu hoa che do Object Snap
)
;;;-------------------------------------------------------
(Defun Edraw() ;;;Tai lap layer va trang thai Object Snap luc truoc
(setvar "osmode" OldOs) (setvar "clayer" OldLay) (princ)
)
;;;-------------------------------------------------------
(defun setLay(Lay / Col LT) ;;;Set layer hien hanh.
;;; Co the sua doi ten Layer, Ltype va Color theo thiet lap chuan cua ban
(cond
((= (strcat Lay) "BASIC") (setq Col "white" LT "continuous"))
((= (strcat Lay) "HIDDEN") (setq Col "cyan" LT "ACAD_ISO02W100"))
((= (strcat Lay) "DIMENSION") (setq Col "green" LT "continuous"))
((= (strcat Lay) "CENTER") (setq Col "magenta" LT "ACAD_ISO04W100"))
)
(if (not (tblsearch "Layer" Lay)) (command "Layer" "N" Lay "L" LT Lay "C" Col Lay ""))
(setvar "clayer" Lay)
)
;;;-------------------------------------------------------
(defun cenLine( e / d p r k p1 p2 p3 p4) ;;;Ve 2 duong tam vong tron e
;;;Duong tam vuot qua duong tron 2 don vi, the hien o bieu thuc: k (+ r 2)
;;;Ban co the sua tri so nay theo y thich
(setq
d (entget e)
p (cdr (assoc 10 d))
r (cdr (assoc 40 d))
k (+ r 2)
p1 (polar p pi k)
p2 (polar p 0 k)
p3 (polar p (/ pi 2) k)
p4 (polar p (/ pi -2) k)
)
(setLay "CENTER")
(command "line" p1 p2 "" "line" p3 p4 "")
)
;;;-------------------------------------------------------


;;;MAIN FUNCTIONS
;;;==============================
(defun C:1 () ;;;Ghi kich thuoc thang
(setLay "DIMENSION") ;;;Set layer Dimension
(command "dimlinear" pause) ;;;Goi lenh Dimlinear va tra quyen dieu khien cho AutoCAD
)
;;;==============================
(defun C:2 ( / p) ;;;Ve 2 vong tron va duong tam
(setq p (getpoint "\nCenter point:")) ;;;Lay toa do tam do user nhap vao
(Bdraw) ;;;Goi function Bdraw da dinh nghia o tren
(setLay "HIDDEN") (command "circle" p 6) ;;;Set layer Hidden va ve vong tron R6
(setLay "BASIC") (command "circle" p 10) ;;;Set layer Basic va ve vong tron R10
(cenLine (entlast)) ;;;Dung function cenLine cho vong tron vua tao
(Edraw) ;;;Goi function Edraw da dinh nghia o tren
)
;;;==============================


Ghi chú và đề nghị:
1) Các dòng bắt đầu bằng dấu chấm phẩy là chú giải, không có tác dụng với chương trình. Mình ghi nhiều như vậy với mục đích để bạn hiểu thêm về hoạt động của chương trình lisp.

2) Tên lệnh là các ký tự liền kề sau C:, bạn có thể sửa đổi chúng theo ý thích nhưng không được trùng với các lệnh tắt chuẩn của Acad. Ví dụ, tên lệnh "A" như bạn đề nghị là không ổn vì đó là tên tắt của lệnh "ARC".

3) Các yêu cầu dạng như của bạn rất đơn giản so với khả năng của lisp. Bạn có thể tự học lisp để phát triển thêm nhiều ứng dụng thiết thực, phù hợp với công việc của bạn. Đừng nghĩ rằng Lisp là cái gì đó quá khó, nó khá đơn giản và dễ học, ít nhất là ở cấp độ cơ bản. Bạn có thể tham khảo ở đây:

http://www.cadviet.c...Lisp-t2480.html

cũng như các bài giới thiệu về lisp khác trên diễn đàn.
Chúc bạn làm việc nhẹ nhàng, hiệu quả và hứng thú hơn với AutoLisp!
  • 1

#5 lysamtanhaccs4

lysamtanhaccs4

    biết vẽ circle

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

Đã gửi 12 April 2008 - 09:55 PM

Bạn dùng thử lisp sau:


;;;PUBLIC FUNCTIONS
;;;-------------------------------------------------------
(Defun Bdraw() ;;;Luu lai layer va trang thai Object Snap hien hanh
(setq OldOs (getvar "osmode") OldLay (getvar "clayer"))
(setvar "osmode" 0) ;;;Vo hieu hoa che do Object Snap
)
;;;-------------------------------------------------------
(Defun Edraw() ;;;Tai lap layer va trang thai Object Snap luc truoc
(setvar "osmode" OldOs) (setvar "clayer" OldLay) (princ)
)
;;;-------------------------------------------------------
(defun setLay(Lay / Col LT) ;;;Set layer hien hanh.
;;; Co the sua doi ten Layer, Ltype va Color theo thiet lap chuan cua ban
(cond
((= (strcat Lay) "BASIC") (setq Col "white" LT "continuous"))
((= (strcat Lay) "HIDDEN") (setq Col "cyan" LT "ACAD_ISO02W100"))
((= (strcat Lay) "DIMENSION") (setq Col "green" LT "continuous"))
((= (strcat Lay) "CENTER") (setq Col "magenta" LT "ACAD_ISO04W100"))
)
(if (not (tblsearch "Layer" Lay)) (command "Layer" "N" Lay "L" LT Lay "C" Col Lay ""))
(setvar "clayer" Lay)
)
;;;-------------------------------------------------------
(defun cenLine( e / d p r k p1 p2 p3 p4) ;;;Ve 2 duong tam vong tron e
;;;Duong tam vuot qua duong tron 2 don vi, the hien o bieu thuc: k (+ r 2)
;;;Ban co the sua tri so nay theo y thich
(setq
d (entget e)
p (cdr (assoc 10 d))
r (cdr (assoc 40 d))
k (+ r 2)
p1 (polar p pi k)
p2 (polar p 0 k)
p3 (polar p (/ pi 2) k)
p4 (polar p (/ pi -2) k)
)
(setLay "CENTER")
(command "line" p1 p2 "" "line" p3 p4 "")
)
;;;-------------------------------------------------------


;;;MAIN FUNCTIONS
;;;==============================
(defun C:1 () ;;;Ghi kich thuoc thang
(setLay "DIMENSION") ;;;Set layer Dimension
(command "dimlinear" pause) ;;;Goi lenh Dimlinear va tra quyen dieu khien cho AutoCAD
)
;;;==============================
(defun C:2 ( / p) ;;;Ve 2 vong tron va duong tam
(setq p (getpoint "\nCenter point:")) ;;;Lay toa do tam do user nhap vao
(Bdraw) ;;;Goi function Bdraw da dinh nghia o tren
(setLay "HIDDEN") (command "circle" p 6) ;;;Set layer Hidden va ve vong tron R6
(setLay "BASIC") (command "circle" p 10) ;;;Set layer Basic va ve vong tron R10
(cenLine (entlast)) ;;;Dung function cenLine cho vong tron vua tao
(Edraw) ;;;Goi function Edraw da dinh nghia o tren
)
;;;==============================


Ghi chú và đề nghị:
1) Các dòng bắt đầu bằng dấu chấm phẩy là chú giải, không có tác dụng với chương trình. Mình ghi nhiều như vậy với mục đích để bạn hiểu thêm về hoạt động của chương trình lisp.

2) Tên lệnh là các ký tự liền kề sau C:, bạn có thể sửa đổi chúng theo ý thích nhưng không được trùng với các lệnh tắt chuẩn của Acad. Ví dụ, tên lệnh "A" như bạn đề nghị là không ổn vì đó là tên tắt của lệnh "ARC".

3) Các yêu cầu dạng như của bạn rất đơn giản so với khả năng của lisp. Bạn có thể tự học lisp để phát triển thêm nhiều ứng dụng thiết thực, phù hợp với công việc của bạn. Đừng nghĩ rằng Lisp là cái gì đó quá khó, nó khá đơn giản và dễ học, ít nhất là ở cấp độ cơ bản. Bạn có thể tham khảo ở đây:

http://www.cadviet.com/forum/Huong-dan-lap...Lisp-t2480.html

cũng như các bài giới thiệu về lisp khác trên diễn đàn.
Chúc bạn làm việc nhẹ nhàng, hiệu quả và hứng thú hơn với AutoLisp!


Dạ thưa bác 'ssg' và các quý anh chị khác trên diễn đàn,
Cám ơn bác 'ssg' lắm lắm vì sự tận tình chỉ dạy của bác. Em đã đọc một số topic của bác trên diễn đàn, thấy rất mê, muốn học hỏi và update kiến thức lắm, nhưng vì thòi gian hạn hẹp và máy of em ở cty ofline nên em ngâm cứ ko đc chuyên sâu cho lắm nên mới nhờ bác 'ssg' chỉ giáo cho em.
cảm ơn bác đã viết dùm em cái lisp này, em về sẽ phát triển thêm cho tốt hơn :bigsmile:
TB à bác 'ssg' ơi bác có tài liêu nào học lisp hay mà dễ hiểu bác cho em chút đc ko ? (hơi tham lam phải ko các bạn ?)
  • 0

#6 lysamtanhaccs4

lysamtanhaccs4

    biết vẽ circle

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

Đã gửi 18 April 2008 - 09:11 PM

Bạn dùng thử lisp sau:


;;;PUBLIC FUNCTIONS
;;;-------------------------------------------------------
(Defun Bdraw() ;;;Luu lai layer va trang thai Object Snap hien hanh
(setq OldOs (getvar "osmode") OldLay (getvar "clayer"))
(setvar "osmode" 0) ;;;Vo hieu hoa che do Object Snap
)
;;;-------------------------------------------------------
(Defun Edraw() ;;;Tai lap layer va trang thai Object Snap luc truoc
(setvar "osmode" OldOs) (setvar "clayer" OldLay) (princ)
)
;;;-------------------------------------------------------
(defun setLay(Lay / Col LT) ;;;Set layer hien hanh.
;;; Co the sua doi ten Layer, Ltype va Color theo thiet lap chuan cua ban
(cond
((= (strcat Lay) "BASIC") (setq Col "white" LT "continuous"))
((= (strcat Lay) "HIDDEN") (setq Col "cyan" LT "ACAD_ISO02W100"))
((= (strcat Lay) "DIMENSION") (setq Col "green" LT "continuous"))
((= (strcat Lay) "CENTER") (setq Col "magenta" LT "ACAD_ISO04W100"))
)
(if (not (tblsearch "Layer" Lay)) (command "Layer" "N" Lay "L" LT Lay "C" Col Lay ""))
(setvar "clayer" Lay)
)
;;;-------------------------------------------------------
(defun cenLine( e / d p r k p1 p2 p3 p4) ;;;Ve 2 duong tam vong tron e
;;;Duong tam vuot qua duong tron 2 don vi, the hien o bieu thuc: k (+ r 2)
;;;Ban co the sua tri so nay theo y thich
(setq
d (entget e)
p (cdr (assoc 10 d))
r (cdr (assoc 40 d))
k (+ r 2)
p1 (polar p pi k)
p2 (polar p 0 k)
p3 (polar p (/ pi 2) k)
p4 (polar p (/ pi -2) k)
)
(setLay "CENTER")
(command "line" p1 p2 "" "line" p3 p4 "")
)
;;;-------------------------------------------------------


;;;MAIN FUNCTIONS
;;;==============================
(defun C:1 () ;;;Ghi kich thuoc thang
(setLay "DIMENSION") ;;;Set layer Dimension
(command "dimlinear" pause) ;;;Goi lenh Dimlinear va tra quyen dieu khien cho AutoCAD
)
;;;==============================
(defun C:2 ( / p) ;;;Ve 2 vong tron va duong tam
(setq p (getpoint "\nCenter point:")) ;;;Lay toa do tam do user nhap vao
(Bdraw) ;;;Goi function Bdraw da dinh nghia o tren
(setLay "HIDDEN") (command "circle" p 6) ;;;Set layer Hidden va ve vong tron R6
(setLay "BASIC") (command "circle" p 10) ;;;Set layer Basic va ve vong tron R10
(cenLine (entlast)) ;;;Dung function cenLine cho vong tron vua tao
(Edraw) ;;;Goi function Edraw da dinh nghia o tren
)
;;;==============================


Ghi chú và đề nghị:
1) Các dòng bắt đầu bằng dấu chấm phẩy là chú giải, không có tác dụng với chương trình. Mình ghi nhiều như vậy với mục đích để bạn hiểu thêm về hoạt động của chương trình lisp.

2) Tên lệnh là các ký tự liền kề sau C:, bạn có thể sửa đổi chúng theo ý thích nhưng không được trùng với các lệnh tắt chuẩn của Acad. Ví dụ, tên lệnh "A" như bạn đề nghị là không ổn vì đó là tên tắt của lệnh "ARC".

3) Các yêu cầu dạng như của bạn rất đơn giản so với khả năng của lisp. Bạn có thể tự học lisp để phát triển thêm nhiều ứng dụng thiết thực, phù hợp với công việc của bạn. Đừng nghĩ rằng Lisp là cái gì đó quá khó, nó khá đơn giản và dễ học, ít nhất là ở cấp độ cơ bản. Bạn có thể tham khảo ở đây:

<a href="http://www.cadviet.com/forum/Huong-dan-lap...Lisp-t2480.html" target="_blank">http://www.cadviet.com/forum/Huong-dan-lap...Lisp-t2480.html</a>

cũng như các bài giới thiệu về lisp khác trên diễn đàn.
Chúc bạn làm việc nhẹ nhàng, hiệu quả và hứng thú hơn với AutoLisp!

Bác có thể chỉ em cái “Bdraw() v à Edraw() “ là j hở bác em có đọc qua giáo trình “Relax_1” của bác và em cũng hiêu sơ sơ thôi !
và hàm
(defun cenLine(
e / d p r k p1 p2 p3 p4)
(setq
d
(entget e)
p
(cdr (assoc 10 d))
r
(cdr (assoc 40 d))
k
(+
r 2)
p1
(polar p pi k)
p2
(polar p 0 k)

p3 (polar p (/
pi 2) k)
p4
(polar p (/
pi -2)
k)
)
hàm này em chua hiểu lắm !
hàm “(cdr (assoc 10 d)) va hàm (cdr (assoc 40 d))”
là gì số và “10d” và “40d”có ý nghĩa gì ta có thể đổi được ko ?
em muốn độ dài của đg tâm vượt qua dg tròn 5 đơn vị em đã sửa lại là
“k
(+
r 5)”
em sửa như vậy có đúng ko? ngoài ra em còn phải sửa ở chỗ nào nữa ?
những chữ em gạch chân là em muốn nhờ bác chỉ em kỹ hơn !
cảm ơn bác nhiều ! :bigsmile:
TB !
Bác chỉ dùm em với ........!
Em dùng notepad viết các lệnh sau và save với tên là "lisp.lsp" sau đó dùng lệnh appload để load lisp.
(defun c:CC() (command ".copy"))
(defun c:LK() (command ".layer"))
(defun c:N() (command ".Plot"))
(defun c:CA() (command ".chamfer"))
(defun c:RT() (command ".rotate"))
(defun c:NN() (command ".qleader"))
................
Khi em gõ lệnh LK thì ko hiện bảng Layer Properties Manager mà có thông báo sau trên Comman:
Command: lk
.layer
Current layer: "3"
Enter an option
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]:
nil
Enter an option
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/stAte]:

Khi em gõ lệnh "Layer" thì vẫn hiện bảng Layer Properties Manager bình thường
Khi em gõ "N" để in bản vẽ thì ko hiện bảng Plot mà có thông báo sau trên Comman:
Command: n .PLOT Detailed plot configuration? [Yes/No] <No>: nil
Detailed plot configuration? [Yes/No] <No>:
và ko in được
Khi em gõ lệnh "Print" hoặc (Ctrl+p) thì vẫn hiện bảng Plot bình thường
em đã thử thay bằng: (defun c:N() (command ".Print"))
thì có thông báo
Command: n .Print Unknown command "PRINT". Press F1 for help.
Command: nil

Các lệnh khác thì vẫn chạy bình thường. Em sài cad 2004 !

Em làm lisp sau

http://www.cadviet.c...3_04_08.lsp.txt

các bác cho em ý kiến nhé ! “nhờ Bác ”ssg” júp đỡ em mới dc như vậy đó“ hi hi …(nhưng nó ko tự tạo dc layer "dimension") :undecided:

Edit by ssg:
Sau khi upload file, bạn copy link, paste vào bài viêt. Tốt nhất là cho nó nằm riêng 1 dòng, đừng ghi chú thêm bất cứ cái gì cả. Khi đó, nó mới là 1 link (người khác chỉ bấm vào đó là down được file của bạn). Cụ thể, mình đã bỏ các dấu đóng mở ngoặc trong đường link của bạn nó mới ra như vậy.
Muốn tự tạo layer, "dimension" chẳng hạn, bạn dùng hàm setLay đã xây dựng ở trên. Ví dụ:
(defun c:QD ()
(Setvar "clayer" "dimension")
(command ".Qdim")
)
Sửa lại là:
(defun c:QD ()
(setLay "clayer" "dimension")
(command ".Qdim")
)
  • 0

#7 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 19 April 2008 - 07:30 AM

1) Bdraw: ghi lại thiết lập của user về Object Snap và Layer hiện hành; vô hiệu chế độ Object Snap để khi vẽ không bị bắt dính lung tung ngoài ý muốn.
Edraw: Trả lại nguyên trạng thiết lập Object Snap và Layer hiện hành như trước khi user dùng chương trình lisp của bạn.

2) Các số 10, 40, .... trong hàm assoc gọi là mã DXF của thực thể. Bạn có thể tham khảo qua một lượt bài viết này:
http://www.cadviet.c...ent/view/89/32/
Tự xác định xem bạn có đủ "hành trang" cần thiết để hiểu hay không. Nếu chưa đủ thì phải trang bị thêm!

3) Bạn sửa (+ r 5) là đúng rồi, không phải làm gì nữa. Bạn có thể tự kiểm nghiệm điều này mà?

4) Hàm polar rất cơ bản. Bạn tự tìm hiểu nhé?

5) Về các lệnh tắt, đừng lạm dụng lisp quá mức và lung tung như vậy. Trước khi làm các lệnh tắt bằng lisp, bạn hãy tìm hiểu toàn bộ các lệnh tắt chuẩn của Acad đã. Cụ thể, bạn vào file acad.pgp trong thư mục Support để xem.
Ví dụ:
- L -> lệnh Line
- C -> lệnh Circle
- LA -> lệnh Layer
- Ctrl + P -> lệnh Plot
v.v...
Nếu thích, bạn có thể sửa acad.pgp theo ý muốn, chẳng cần dùng lisp cho các mục đích như vậy.
  • 1

#8 lysamtanhaccs4

lysamtanhaccs4

    biết vẽ circle

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

Đã gửi 21 April 2008 - 09:39 PM

1) Bdraw: ghi lại thiết lập của user về Object Snap và Layer hiện hành; vô hiệu chế độ Object Snap để khi vẽ không bị bắt dính lung tung ngoài ý muốn.
Edraw: Trả lại nguyên trạng thiết lập Object Snap và Layer hiện hành như trước khi user dùng chương trình lisp của bạn.

2) Các số 10, 40, .... trong hàm assoc gọi là mã DXF của thực thể. Bạn có thể tham khảo qua một lượt bài viết này:
<a href="http://www.cadviet.com/cadnews/content/view/89/32/" target="_blank">http://www.cadviet.com/cadnews/content/view/89/32/</a>
Tự xác định xem bạn có đủ "hành trang" cần thiết để hiểu hay không. Nếu chưa đủ thì phải trang bị thêm!

3) Bạn sửa (+ r 5) là đúng rồi, không phải làm gì nữa. Bạn có thể tự kiểm nghiệm điều này mà?

4) Hàm polar rất cơ bản. Bạn tự tìm hiểu nhé?

5) Về các lệnh tắt, đừng lạm dụng lisp quá mức và lung tung như vậy. Trước khi làm các lệnh tắt bằng lisp, bạn hãy tìm hiểu toàn bộ các lệnh tắt chuẩn của Acad đã. Cụ thể, bạn vào file acad.pgp trong thư mục Support để xem.
Ví dụ:
- L -> lệnh Line
- C -> lệnh Circle
- LA -> lệnh Layer
- Ctrl + P -> lệnh Plot
v.v...
Nếu thích, bạn có thể sửa acad.pgp theo ý muốn, chẳng cần dùng lisp cho các mục đích như vậy.

Cảm ơn bác ssg đã chỉ júp em. em cũng có sủa trên acad.pgp rồi nhưng làm thế rất rễ bị hư file gốc mà khi mình sang máy khác làm việc mà phải sửa lại acad.pgp thì mất thời jan lắm mà fải tắt cad rồi lại mở cad.nên em mới làm lisp mình chỉ cần cái USB hạng xoàng thôi có khi chỉ cái đĩa mềm là cứ việc coppy rồi paste sau đó apload là sài vi vu tội gì phải..........!
em đã phát triển khi tạo layer có thêm "LW" và sửa lại cái lisp như sau các Bác cho ý kiến nhé !~ :bigsmile:
ặc ặc "Xin lỗi,
Phần upload của diễn đàn đang tạm đóng để nâng cấp bảo mật!"
nên đành phải làm thế này thôi


;;;-------------------------------------------------------
(Defun Bdraw()
(setq OldOs (getvar "osmode")
OldLay (getvar "clayer"))
(setvar "osmode" 0)
)
;;;-------------------------------------------------------
(Defun Edraw()
(setvar "osmode" OldOs)
(setvar "clayer" OldLay)
(princ)
)
;;;-------------------------------------------------------
(defun setLay(Lay / Col LT LW)
(cond
((=
(strcat Lay)
"basic")
(setq Col "white" LT "continuous" LW "0.35"))
((=
(strcat Lay)
"hiden")
(setq Col "green" LT "ACAD_ISO02W100" LW "0.35"))
((=
(strcat Lay)
"dimension")
(setq Col "magenta" LT "continuous" LW "0.35"))
((=
(strcat Lay)
"center")
(setq Col "red" LT "ACAD_ISO04W100" LW "0.25"))
)
(if (not (tblsearch "Layer" Lay))
(command "Layer" "N" Lay "L" LT Lay "C" Col Lay "LW" LW Lay""))
(setvar "clayer" Lay)
)
;;;-------------------------------------------------------
(defun cenLine(
e / d p r k p1 p2 p3 p4)
(setq
d
(entget e)
p
(cdr (assoc 10 d))
r
(cdr (assoc 40 d))
k
(+
r 10)
p1
(polar p pi k)
p2
(polar p 0 k)
p3 (polar p (/
pi 2) k)
p4
(polar p (/
pi -2)
k)
)
(setLay "center")
(command "line" p1 p2 "" "line" p3 p4 "")
)
;;;==============================
(defun C:1220 (
/ p)
(setq p (getpoint "\nCenter point:"))
(Bdraw)
(setLay "basic")
(command "circle" p 6)
(setLay "basic")
(command "circle" p 10)
(cenLine (entlast))
(Edraw)
)
;;;==============================
(defun C:M10 (
/ p)
(setq p (getpoint "\nCenter point:"))
(Bdraw)
(setLay "hiden")
(command "circle" p 5)
(setLay "basic")
(command "circle" p 4.3)
(cenLine (entlast))
(Edraw)
)
;;;==============================
(defun C:M12 (
/ p)
(setq p (getpoint "\nCenter point:"))
(Bdraw)
(setLay "hiden")
(command "circle" p 6)
(setLay "basic")
(command "circle" p 5.15)
(cenLine (entlast))
(Edraw)
)
;;;==============================
(defun C:QD ()
(setLay "dimension")
(command ".Qdim" pause)
)
------------------------------------
(defun C:DM ()
(setLay "dimension")
(command ".dimordinate" pause)
)
------------------------------------
(defun C:NN()
(setLay "dimension")
(command ".qleader" pause)
)
------------------------------------
(defun C:11()
(setLay "basic")
(command ".revcloud" pause)
)
------------------------------------
(defun C:33()
(setLay "basic")
(command ".spline" pause)
)
------------------------------------
(defun C:1()
(setLay "dimension")
(command ".dimlinear" pause)
)
------------------------------------
(defun C:2()
(setLay "dimension")
(command ".dimaligned" pause)
)
------------------------------------
(defun C:3()
(setLay "dimension")
(command ".dimcontinue" pause)
)
------------------------------------
(defun C:4()
(setLay "dimension")
(command ".dimangular" pause)
)
------------------------------------
(defun C:5()
(setLay "dimension")
(command ".dimdiameter" pause)
)
------------------------------------
(defun C:6()
(setLay "dimension")
(command ".dimradius" pause)
)
------------------------------------
(defun C:7()
(setLay "dimension")
(command ".dimbaseline" pause)
)
------------------------------------
(defun C:Q()
(setLay "basic")
(command ".rectang" pause)
)
------------------------------------
(defun C:L()
(setLay "basic")
(command ".line" pause)
)
------------------------------------
(defun C:LL()
(setLay "center")
(command ".line" pause)
)
------------------------------------
(defun C:LLL()
(setLay "hiden")
(command ".line" pause)
)
------------------------------------
(defun c:DC() (command ".clayer"))
(defun c:34() (command ".dimtedit"))
(defun c:CA() (command ".chamfer"))
(defun c:RT() (command ".rotate"))
(defun c:12() (command ".copyclip"))
(defun c:22() (command ".pasteclip"))
(defun c:MN() (command ".matchprop"))
(defun c:CC() (command ".copy"))
(defun c:DF() (command ".dimscale"))

  • 0