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

Viết lisp theo yêu cầu [phần 2]

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

Hề hề hề,

Bạn bổ sung thêm dòng code sau vào trước khi kết thúc lisp : (setvar "plinewid" 0).

Phiền bác chỉ thêm vào chỗ nào cho e luôn nha vì e chưa biết lisp.Cảm ơn bác rất nhiều.

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
Phiền bác chỉ thêm vào chỗ nào cho e luôn nha vì e chưa biết lisp.Cảm ơn bác rất nhiều.

Hề hề hề,

Bạn không chịu đọc kỹ đấy thôi. Mình đã nói là thêm vào trước khi kết thúc lisp mà.

Bạn xem nhé:

Đây là đoạn lisp kết thúc:

(COMMAND "COLOR" "BYLAYER" "")

(command "osnap" "End,Mid,Cen,Quad,Int,Perp,Tan,Near,App,Int,Ext,Par" )

(command "ddedit" sua pause)

)

 

Và bạn thêm vào thành:

(COMMAND "COLOR" "BYLAYER" "")

(command "osnap" "End,Mid,Cen,Quad,Int,Perp,Tan,Near,App,Int,Ext,Par" )

(command "ddedit" sua pause)

(setvar "plinewid" 0)

)

 

Rồi chạy thử coi sao 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
Hề hề hề,

Bạn không chịu đọc kỹ đấy thôi. Mình đã nói là thêm vào trước khi kết thúc lisp mà.

Bạn xem nhé:

Đây là đoạn lisp kết thúc:

(COMMAND "COLOR" "BYLAYER" "")

(command "osnap" "End,Mid,Cen,Quad,Int,Perp,Tan,Near,App,Int,Ext,Par" )

(command "ddedit" sua pause)

)

 

Và bạn thêm vào thành:

(COMMAND "COLOR" "BYLAYER" "")

(command "osnap" "End,Mid,Cen,Quad,Int,Perp,Tan,Near,App,Int,Ext,Par" )

(command "ddedit" sua pause)

(setvar "plinewid" 0)

)

 

Rồi chạy thử coi sao hè....

Vẫn còn bị bá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
Vẫn còn bị bác ơi.

Chào bạn quan08,

Sau khi sửa lisp bạn có load lại lisp không??? Nếu đã load lại mà vẫn còn bị thì chắc phải nhờ tới bác phamngoctukts gỡ thôi. Không nhẽ lại do cái thằng biến USERR3 gây ra. Mình chưa hiểu bạ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
Chào bạn quan08,

Sau khi sửa lisp bạn có load lại lisp không??? Nếu đã load lại mà vẫn còn bị thì chắc phải nhờ tới bác phamngoctukts gỡ thôi. Không nhẽ lại do cái thằng biến USERR3 gây ra. Mình chưa hiểu bạn ạ....

E có load lại rồi bác ah.thanks.

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
Không phải lúc nào nó cũng lỗi nếu không chạy lệnh NS. truờng hợp nỗi thỉnh thoảng mới xảy ra. thay vì hỏi lại mình như thế này sao bạn không thử chạy với truờng hợp như bạn vừa nêu để thấy kết quả? :undecided:

hì. em xin lỗi bác.. đừng giận bác à. em trả lời bác ngay mà chưa có dịp thử nên hỏi vội quá. bác bỏ quá em nhé . Cám ơn bác nhiều.

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
chài

bác này chơi khó tui kô à

bác gửi tui cái file nova mà bị bác ẽplođe tùm lum sao mà sửa cho nổi

bác gửi lại tui file khác (nguyên bản chưa explode j hết) í

mà có thể chạy các lệnh nova như : t , td, tn ... thì mới sửa ok được

ok?

Vâng em sơ ý quá. giờ em đang onl nhà bạn, mai em gửi file cho bác nhé !Bác VuVuzela có bí kíp gì thì chỉ dạy cho em với... Em xin cảm ơn và hậu tạ, coi như học phí. dc ko bác?? :undecided:

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
Chào bạn quan08,

Sau khi sửa lisp bạn có load lại lisp không??? Nếu đã load lại mà vẫn còn bị thì chắc phải nhờ tới bác phamngoctukts gỡ thôi. Không nhẽ lại do cái thằng biến USERR3 gây ra. Mình chưa hiểu bạn ạ....

Bác phamngoctukts chắc cuối năm bận lo chia......nên dạo này ít thấy trên diễn đàn giúp đỡ a e.

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
Bác phamngoctukts chắc cuối năm bận lo chia......nên dạo này ít thấy trên diễn đàn giúp đỡ a e.

Chào bạn quan08,

Có thể bác ấy đang bận nhiều việc khác chứ không hẳn đã là chia bạn ạ. Mình đã test thử cái lisp của bác ấy sau khi bổ sung dòng code như mình nói thì thấy không bị lưu biến plinewid nữa mà bạn. Hay là mình làm sai cái gì chăng???

Các thao tác mình đã sử dụng như sau:

1/- load lisp đã chỉnh sửa

2/- nhập lệnh gct

3/- Nhập size - enter

4/- nhập diểm from và điểm to

5/- Lisp nó chạy loằng ngoằng một lúc và trả ra dòng lệnh Ban muon dung: [TRong/duong Tron/duong Cheo]:

6/- Nhập C (đường chéo). lisp nó lại loằng ngoằng một tí rồi trả về cái nét chéo với độ rộng 20 và trên dòng command: Select an annotation object or [undo]:

7/ Nhấn OK hay cancel thì Lisp trả về: Command: 0

 

Thế rồi mình vẽ pline thoải mái với chiều rộng nét vẫn là 0 mà.

 

Không rõ có đúng cái bạn cần hay không, và cũng không rõ bạn đã làm thế nào nên mình nói vầy để bạn thử làm lại coi sao nhé.

Hy vọng đúng với cái yêu cầu của bạn...

  • 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

Trên diễn đàn có 1 lisp vẽ mặt cắt dầm:

;; free lisp from cadviet.com
(defun c:MCD (/ A B C BV D E D1 E1 F P1 P2 S)
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
(setq 
A (getreal "\nBe rong mc DAM:")
B (getreal "\nBe dai mc DAM:")
S (getreal "\nBe day san:")
BV (getreal "\nLop bv mc DAM:")
D (getint "\nS.luong thep ngang mc DAM:")
E (getint "\nS.luong thep doc mc DAM:")
P1 (getpoint "\nDiem chen:")
F (* bv 0.7)
D1 (/ (- A (* 2 BV) (* F 2)) (- D 1))
E1 (/ (- B (* 2 BV) (* F 2)) (- E 1))
); end of setq
(command ".rectangle" "f" (* bv 0.5) (list (+ (car P1) BV) (+ (cadr P1) BV)) 
(list (+ (car P1) (- A BV)) (+ (cadr P1) (- B BV))) "" "f" "0" ""
".change" "L" "" "P" "C" 1 ""
".pline" (Polar P1 0 (/ A 2)) "W" 0 0 
P1
(setq P11 (list (car P1) (+ (cadr P1) (- B S))))
(setq P11 (list (- (car P11) (* 2 S)) (cadr P11)))
(list (car P11) (- (cadr P11) (* 0.4 S)))
(setq P11 (list (car P11) (+ (cadr P11) (* 0.4 S))))
(setq P11 (list (- (car P11) (* 0.4 S)) (cadr P11)))
(setq P11 (list (+ (car P11) (* 0.8 S)) (+ (cadr P11) (* 0.2 S))))
(setq P11 (list (- (car P11) (* 0.4 S)) (cadr P11)))
(list (car P11) (+ (cadr P11) (* 0.8 S)))
(setq P11 (list (car P11) (+ (cadr P11) (* 0.4 S))))
(setq P11 (list (+ (car P11) (* 2 S) (/ A 2)) (cadr P11)))
""
".mirror" "L" "" (Polar P1 0 (/ A 2)) P11 ""
".pedit" "l" "j" "p" "l" "" ""

); end of command
(setq P2 (list (+ (car P1) BV F) (+ (cadr P1) BV F)))
(repeat D 
(command ".donut" 0 F P2 ^C)
(setq P2 (polar P2 0 D1))
); end of repeat1
(setq P2 (list (+ (car P1) BV F) (+ (cadr P1) (- B BV F) )))
(repeat D 
(command ".donut" 0 F P2 ^C)
(setq P2 (polar P2 0 D1))
); end of repeat2
(setq P2 (list (+ (car P1) BV F) (+ (cadr P1) BV F)))
(repeat (- E 2)
(setq P2 (polar P2 (/ pi 2) E1))
(command ".donut" 0 F P2 ^C)
); end of repeat3
(setq P2 (list (+ (car P1) (- A BV F)) (+ (cadr P1) BV F)))
(repeat (- E 2)
(setq P2 (polar P2 (/ pi 2) E1))
(command ".donut" 0 F P2 ^C)
); end of repeat3
(setvar "osmode" oldosmode)
)

Giả sử mình có sẵn 4 layer tên là:1,2,3,4 vậy mình muốn gán cho đường bao là layer 1 ,dấu cắt là số 2,chấm tròn thép là số

3,thép đai là số 4 thì phải sửa làm sao trong lisp này.Các bác thông cảm e đã viết bài này trong mục khác nhưng hình như mục đó ít cao thủ vào đọc nên mạn phép cho e viết vào mục này.Mong được sự giúp đỡ của các bác.Thanks

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

bác Thái thân! em đã thử lisp edtn cua bác nhưng không được bác à.em làm thử trên file bác gửi thì được nhưng làm trên file em chạy ra thì không được .có lẽ vì trên file của bác khai báo đầu trắc ngang khác của em bác à. nên khi em thực hiện lệnh edtn thì cad không xóa bớt text đi mà lại thêm vào nhiều hơn bác à.. em gửi bác file của em nhờ bác xem giúp nguyên nhân bác nhé. :http://www.cadviet.com/upfiles/3/sua.dwg .em cám ơn bác nhiều lắm lắ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

các bác làm ơn cho em hỏi là trong nova có lệnh edtn cũng để làm thưa điểm mia . em chưa dùng lệnh đó bao giờ mà cũng chưa thấy mọi người sử dụng, mong các bác giải thích về lệnh đó cho em đc không a? nếu dùng lệnh đó mà không bị ảnh hưởng gì thì tốt quá ,

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ôi để mình viết lại nó vậy.

EDTN là lệnh của nova2005. tuy nhiên thuật toán làm thưa mà nova sử dụng không hiệu quả cho lắm nên kết quả chưa triệt để, không muốn nói là tệ hơn. tuy nhiên với các trắc ngang chạy từ mặt bằng san nền của hạ tầng thì nó dùng được. sử dụng thế nào thì cứ thử đi. hộp thoại của nó rất rõ ràng 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

Em chào bác các bác!

em muốn các bác giúp em viết cái lisp chuyển các nét vẽ trong CAD sang Plaxis

File xuất ra là dạng .GEO để sang Plaxis em import nó vào

em đã xem trên web thấy có bác đã có "p2plaxis.lsp" đó là video bác ấy làm

em nhìn thấy nhưng không sao tìm thấy lisp tương tự

nhờ các bác giúp vì phải vẽ lại kết cấu trong Plaxis thì chết mất và không chuẩn nữa

mong các bác giúp đỡ.

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ôi để mình viết lại nó vậy.

EDTN là lệnh của nova2005. tuy nhiên thuật toán làm thưa mà nova sử dụng không hiệu quả cho lắm nên kết quả chưa triệt để, không muốn nói là tệ hơn. tuy nhiên với các trắc ngang chạy từ mặt bằng san nền của hạ tầng thì nó dùng được. sử dụng thế nào thì cứ thử đi. hộp thoại của nó rất rõ ràng mà.

vâng. em biết sử dụng cái lệnh edtn trong nv2005 rồi ạ. bác giúp em sửa lisp theo đầu trắc ngang của em bác nhé. em cám ơn bác đã hồi âm. mong tin 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

THƯA CÁC BẠN! MÌNH NHỜ CÁC BẠN VIẾT GIÙM MÌNH LISP KICK TOA CỌC ! ĐẦU TIÊN LÀ CHẠY LISP SAU ĐÓ ĐÁNH TÊN CỌC ENTER NHÂP TIẾP CAO ĐỘ KICK CHUỘT VÀO VỊ TRÍ CẦN TÌM XY TƯƠNG TU ĐẾN ĐIỂM TIẾP THEO CŨNG NHẬP TƯƠNG TỰ VÀ CUỐI CÙNG CHON VỊ TRÍ CHO RA KẾT QUẢ DẠNG BẢNG (TEN COC X Y H HOẶC TÊN CỌC H X Y)NHƯ FILE CAD MINH GỬI ! MONG CÁC BẠN GIÚP ĐỠ!MÌNH CÁM ƠN TRƯỚC

http://www.cadviet.com/upfiles/3/bd_tong_in.dwg

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

Nhờ ae sửa hộ mình một chút cái lisp này:

- Cái lisp này là bố trí block theo yêu cầu của mình với điều kiện khoảng cách 2 block = 2 lần khoảng cách từ block tới cạnh của HCN.

- Mình muốn sửa một chút là vẫn nhập các điểm của HCN, số block theo trục x, số block theo trục y nhưng với điều kiện hơi khác một chút đó là khoảng cách 2 block theo trục x= 1200x số block theo trục x, còn khoảng cách 2 block theo trục y= 600x số block theo trục y.

;; free lisp from cadviet.com


(defun c:dd ()
(batdau)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(command "osnap" "End,Mid,Cen,Node,Quad,Int,Ins,Perp,Tan,Near,App,Int,Ext,Par")
(setq bd (car (entsel "\nChon block can chen: ")))
(while (= bd nil)
(setq bd (car (entsel "\nChon block can chen: ")))
)
(setq boun (acet-ent-geomextents bd)
tam (polar (car boun) (angle (car boun) (cadr boun))
(/ (distance (car boun) (cadr boun)) 2))
)
(setq p1 (getpoint "\nChon diem thu nhat: ")
p2 (getcorner p1 "\nChon diem thu hai: ")
vx (abs (- (car p1) (car p2)))
vy (abs (- (cadr p1) (cadr p2)))
ix (getint "\nSo block theo truc x: ")
iy (getint "\nSo block theo truc y: ")
dix (/ vx (* ix 2))
diy (/ vy (* iy 2))
)
(if (< (angle p1 p2) (/ pi 2))
(setq pc (list (+ (car p1) dix) (+ (cadr p1) diy) 0))
)
(if (and (< (angle p1 p2) pi) (> (angle p1 p2) (/ pi 2)))
(progn
(setq p1 (list (car p2) (cadr p1) 0))
(setq pc (list (+ (car p1) dix) (+ (cadr p1) diy) 0))
)
)
(if (and (< (angle p1 p2) (/ (* pi 3) 2)) (> (angle p1 p2) pi))
(setq pc (list (+ (car p2) dix) (+ (cadr p2) diy) 0))
)
(if (and (< (angle p1 p2) (* pi 2)) (> (angle p1 p2) (/ (* pi 3) 2)))
(progn
(setq p1 (list (car p1) (cadr p2) 0))
(setq pc (list (+ (car p1) dix) (+ (cadr p1) diy) 0))
)
)
(setq sspoi (ssadd))
(command "copy" bd "" tam pc)
(repeat (1- ix)
(setq poi (entlast))
(setq sspoi (ssadd poi sspoi))
(command "copy" poi "" pc
(strcat "@" (rtos (* dix 2) 2 3) ",0")
)
)
(setq sspoi (ssadd (entlast) sspoi))
(setq y 0)
(repeat (1- iy)
(setq y (+ y (* diy 2)))
(command "copy" sspoi "" pc
(strcat "@0," (rtos y 2 3))
)
)
(setvar "osmode" oldos)
(ketthuc)
)

(defun batdau ()
 (command "undo" "be")
 (setvar "cmdecho" 0)
 (setq 
    old_er *error*
    *error* myerror
 ) 
)

(defun myerror (errmsg)
(ketthuc)
(command "undo" "")
)

(defun ketthuc ()
 (setq *error* old_er)
 (setvar "cmdecho" 1)
 (command "undo" "e")
)

Và đây là file cad mình muốn

cad.png

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

Bạn thử xem đã vừa ý chưa :undecided:

;; free lisp from cadviet.com


(defun c:dd ()
(batdau)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(command "osnap" "End,Mid,Cen,Node,Quad,Int,Ins,Perp,Tan,Near,App,Int,Ext,Par")
(setq bd (car (entsel "\nChon block can chen: ")))
(while (= bd nil)
(setq bd (car (entsel "\nChon block can chen: ")))
)
(setq boun (acet-ent-geomextents bd)
tam (polar (car boun) (angle (car boun) (cadr boun))
(/ (distance (car boun) (cadr boun)) 2))
)
(setq p1 (getpoint "\nChon diem thu nhat: ")
p2 (getcorner p1 "\nChon diem thu hai: ")
vx (abs (- (car p1) (car p2)))
vy (abs (- (cadr p1) (cadr p2)))
ix (getint "\nSo block theo truc x: ") 
iy (getint "\nSo block theo truc y: ")
)
(setq  dx (getreal "\nKhoang cach x : ")) (if (null dx)(setq dx 1200))	
(setq   dy (getreal "\nKhoang cach y : ")) (if (null dy)(setq dy 600))

(setq	
	dix ( / (- vx (* dx (- ix 1))) 2)
	diy ( / (- vy (* dy (- iy 1))) 2)
)

(if ((setq pc (list (+ (car p1) dix ) (+ (cadr p1) diy ) 0))
)
(if (and ( (angle p1 p2) (/ pi 2)))
(progn
(setq p1 (list (car p2) (cadr p1) 0))
(setq pc (list (+ (car p1) dix ) (+ (cadr p1) diy ) 0))
)
)
(if (and ( (angle p1 p2) pi))
(setq pc (list (+ (car p2) dix ) (+ (cadr p2) diy ) 0))
)
(if (and ( (angle p1 p2) (/ (* pi 3) 2)))
(progn
(setq p1 (list (car p1) (cadr p2) 0))
(setq pc (list (+ (car p1) dix ) (+ (cadr p1) diy ) 0))
)
)
(setq sspoi (ssadd))
(command "copy" bd "" tam pc)
(repeat (1- ix)
(setq poi (entlast))
(setq sspoi (ssadd poi sspoi))
(command "copy" poi "" pc
(strcat "@" (rtos  dx 2 3) ",0")
;(strcat "@" (rtos (* dix 2) 2 3) ",0")
)
)
(setq sspoi (ssadd (entlast) sspoi))
(setq y 0)
(repeat (1- iy)
(setq y (+ y dy))
(command "copy" sspoi "" pc
(strcat "@0," (rtos y 2 3))
)
)
(setvar "osmode" oldos)
(ketthuc)
)

(defun batdau ()
 (command "undo" "be")
 (setvar "cmdecho" 0)
 (setq 
    old_er *error*
    *error* myerror
 ) 
)

(defun myerror (errmsg)
(ketthuc)
(command "undo" "")
)

(defun ketthuc ()
 (setq *error* old_er)
 (setvar "cmdecho" 1)
 (command "undo" "e")
)

  • 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

@NgocNam.Cad

Lisp này cách làm việc vẫn tương tự lisp cũ. Vì mình không tin tưởng việc làm thưa tự động (lại giống Nova thì bằng nhau) nên lisp vẫn yêu cầu xóa thủ công các đường dóng sao cho hợp lý nhất.

(chú ý: không được xóa đường dóng ngoài cùng bên trái mỗi trắc ngang vì lisp lấy đường này làm mốc tính toán)

Sau khi đã làm thưa đường dóng trên trắc ngang thì chạy lisp này. Tại dòng nhắc "Chọn trắc ngang cần sửa" chỉ cần chọn 1 đối tượng bất kỳ trên trắc ngang là được. Lisp này có thể chạy cả trong môi trường cad và nova mà không ảnh hưởng đến kết quả chạy nova. nếu gặp lỗi gì thì thông báo lại cho mình.

Lisp post bằng code của diễn đàn bị lỗi nên bạn download tại đây Njoy n' Have fun :undecided:

  • 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ủa bác đây.em đã save xuống cad 2004 cho bác rùii.

http://www.cadviet.com/upfiles/3/gui_bac.rar

Cám ơn bác đã giúp, nhưng bác Phamvanthiet108 ơi sau địa chỉ nảy không tải về được (không tìm thấy file trên server) bác gửi lại dù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ƯA CÁC BẠN! MÌNH NHỜ CÁC BẠN VIẾT GIÙM MÌNH LISP KICK TOA CỌC ! ĐẦU TIÊN LÀ CHẠY LISP SAU ĐÓ ĐÁNH TÊN CỌC ENTER NHÂP TIẾP CAO ĐỘ KICK CHUỘT VÀO VỊ TRÍ CẦN TÌM XY TƯƠNG TU ĐẾN ĐIỂM TIẾP THEO CŨNG NHẬP TƯƠNG TỰ VÀ CUỐI CÙNG CHON VỊ TRÍ CHO RA KẾT QUẢ DẠNG BẢNG (TEN COC X Y H HOẶC TÊN CỌC H X Y)NHƯ FILE CAD MINH GỬI ! MONG CÁC BẠN GIÚP ĐỠ!MÌNH CÁM ƠN TRƯỚC

http://www.cadviet.com/upfiles/3/bd_tong_in.dwg

không phải là mình viết, nhưnng mình có lips đó bàn dùng thử nha!

http://www.cadviet.com/upfiles/3/vmc_tbd.lsp

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ám ơn bác đã giúp, nhưng bác Phamvanthiet108 ơi sau địa chỉ nảy không tải về được (không tìm thấy file trên server) bác gửi lại dùm.

của bác đây.

http://www.cadviet.com/upfiles/3/gui_bac.rar

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ên diễn đàn có 1 lisp vẽ mặt cắt dầm:

;; free lisp from cadviet.com
(defun c:MCD (/ A B C BV D E D1 E1 F P1 P2 S)
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
(setq 
A (getreal "\nBe rong mc DAM:")
B (getreal "\nBe dai mc DAM:")
S (getreal "\nBe day san:")
BV (getreal "\nLop bv mc DAM:")
D (getint "\nS.luong thep ngang mc DAM:")
E (getint "\nS.luong thep doc mc DAM:")
P1 (getpoint "\nDiem chen:")
F (* bv 0.7)
D1 (/ (- A (* 2 BV) (* F 2)) (- D 1))
E1 (/ (- B (* 2 BV) (* F 2)) (- E 1))
); end of setq
(command ".rectangle" "f" (* bv 0.5) (list (+ (car P1) BV) (+ (cadr P1) BV)) 
(list (+ (car P1) (- A BV)) (+ (cadr P1) (- B BV))) "" "f" "0" ""
".change" "L" "" "P" "C" 1 ""
".pline" (Polar P1 0 (/ A 2)) "W" 0 0 
P1
(setq P11 (list (car P1) (+ (cadr P1) (- B S))))
(setq P11 (list (- (car P11) (* 2 S)) (cadr P11)))
(list (car P11) (- (cadr P11) (* 0.4 S)))
(setq P11 (list (car P11) (+ (cadr P11) (* 0.4 S))))
(setq P11 (list (- (car P11) (* 0.4 S)) (cadr P11)))
(setq P11 (list (+ (car P11) (* 0.8 S)) (+ (cadr P11) (* 0.2 S))))
(setq P11 (list (- (car P11) (* 0.4 S)) (cadr P11)))
(list (car P11) (+ (cadr P11) (* 0.8 S)))
(setq P11 (list (car P11) (+ (cadr P11) (* 0.4 S))))
(setq P11 (list (+ (car P11) (* 2 S) (/ A 2)) (cadr P11)))
""
".mirror" "L" "" (Polar P1 0 (/ A 2)) P11 ""
".pedit" "l" "j" "p" "l" "" ""

); end of command
(setq P2 (list (+ (car P1) BV F) (+ (cadr P1) BV F)))
(repeat D 
(command ".donut" 0 F P2 ^C)
(setq P2 (polar P2 0 D1))
); end of repeat1
(setq P2 (list (+ (car P1) BV F) (+ (cadr P1) (- B BV F) )))
(repeat D 
(command ".donut" 0 F P2 ^C)
(setq P2 (polar P2 0 D1))
); end of repeat2
(setq P2 (list (+ (car P1) BV F) (+ (cadr P1) BV F)))
(repeat (- E 2)
(setq P2 (polar P2 (/ pi 2) E1))
(command ".donut" 0 F P2 ^C)
); end of repeat3
(setq P2 (list (+ (car P1) (- A BV F)) (+ (cadr P1) BV F)))
(repeat (- E 2)
(setq P2 (polar P2 (/ pi 2) E1))
(command ".donut" 0 F P2 ^C)
); end of repeat3
(setvar "osmode" oldosmode)
)

Giả sử mình có sẵn 4 layer tên là:1,2,3,4 vậy mình muốn gán cho đường bao là layer 1 ,dấu cắt là số 2,chấm tròn thép là số

3,thép đai là số 4 thì phải sửa làm sao trong lisp này.Các bác thông cảm e đã viết bài này trong mục khác nhưng hình như mục đó ít cao thủ vào đọc nên mạn phép cho e viết vào mục này.Mong được sự giúp đỡ của các bác.Thanks

Không bác nào giúp được e sao?Mong các bác ra tay giúp đỡ.Thanks

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

Bấn quá thì bạn dùng tạm nhé.Chỗ nét cắt thì bác ấy viết liền thành 1 nét rùi,giờ nghỉ trưa mình hơi ngại edit ^^

 

;; free lisp from cadviet.com
(defun c:MCD (/ A B C BV D E D1 E1 F P1 P2 S)
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
(setq 
A (getreal "\nBe rong mc DAM:")
B (getreal "\nBe dai mc DAM:")
S (getreal "\nBe day san:")
BV (getreal "\nLop bv mc DAM:")
D (getint "\nS.luong thep ngang mc DAM:")
E (getint "\nS.luong thep doc mc DAM:")
P1 (getpoint "\nDiem chen:")
F (* bv 0.7)
D1 (/ (- A (* 2 BV) (* F 2)) (- D 1))
E1 (/ (- B (* 2 BV) (* F 2)) (- E 1))
); end of setq
(setvar "clayer" "4")
(command ".rectangle" "f" (* bv 0.5) (list (+ (car P1) BV) (+ (cadr P1) BV)) 
(list (+ (car P1) (- A BV)) (+ (cadr P1) (- B BV))) "" "f" "0" "")
;".change" "L" "" "P" "C" 1 ""
(setvar "clayer" "1")
(command ".pline" (Polar P1 0 (/ A 2)) "W" 0 0 
P1
(setq P11 (list (car P1) (+ (cadr P1) (- B S))))
(setq P11 (list (- (car P11) (* 2 S)) (cadr P11)))
(list (car P11) (- (cadr P11) (* 0.4 S)))
(setq P11 (list (car P11) (+ (cadr P11) (* 0.4 S))))
(setq P11 (list (- (car P11) (* 0.4 S)) (cadr P11)))
(setq P11 (list (+ (car P11) (* 0.8 S)) (+ (cadr P11) (* 0.2 S))))
(setq P11 (list (- (car P11) (* 0.4 S)) (cadr P11)))
(list (car P11) (+ (cadr P11) (* 0.8 S)))
(setq P11 (list (car P11) (+ (cadr P11) (* 0.4 S))))
(setq P11 (list (+ (car P11) (* 2 S) (/ A 2)) (cadr P11)))
""
".mirror" "L" "" (Polar P1 0 (/ A 2)) P11 ""
".pedit" "l" "j" "p" "l" "" ""
); end of command
(setvar "clayer" "3")
(setq P2 (list (+ (car P1) BV F) (+ (cadr P1) BV F)))
(repeat D 
(command ".donut" 0 F P2 ^C)
(setq P2 (polar P2 0 D1))
); end of repeat1
(setq P2 (list (+ (car P1) BV F) (+ (cadr P1) (- B BV F) )))
(repeat D 
(command ".donut" 0 F P2 ^C)
(setq P2 (polar P2 0 D1))
); end of repeat2
(setq P2 (list (+ (car P1) BV F) (+ (cadr P1) BV F)))
(repeat (- E 2)
(setq P2 (polar P2 (/ pi 2) E1))
(command ".donut" 0 F P2 ^C)
); end of repeat3
(setq P2 (list (+ (car P1) (- A BV F)) (+ (cadr P1) BV F)))
(repeat (- E 2)
(setq P2 (polar P2 (/ pi 2) E1))
(command ".donut" 0 F P2 ^C)
); end of repeat3
(setvar "osmode" oldosmode)
)

  • 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

Chào các bạn, mình có tìm trên diễn đàn Lisp Cộng, trừ, nhân, chia 1 dãy số cho 1 số. Nhưng không tìm thấy 1 dãy số trên trừ cho dãy số dưới, bạn nào có thể viết Lisp như vậy được ko, Thanks nhiều :undecided:.

Vd :

dãy 1 : 1 3 4 2 6 7 8

dãy 2 : 3 5 5 7 8 8 8

-----------------------------------

(dãy 1- dãy 2) : -2-2-1-5-2-10

PS Nếu Có rồi thì post dùm mình vì mình tìm chỉ thấy lisp tính toán mà ko thấy cái mình cần, cám ơ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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×