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

[Help me] Cách lấy số liệu từ file txt

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

Hề hề hề,

Cái nhà bác Ketxu này lắm mưu thiệt. E rằng chủ thớt chửa chắc hiểu cái mưu của bác nên...... không lười được.....

Hề hề hề,...

Chỉ cần set 1 lần, và e cũng vẫn để fn là global bác ơi :D

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 DCL :

(defun DCL ( lstType / fl ret dcl_id Return# ) 
 (vl-load-com)
 (setq fl (vl-filename-mktemp "mip" nil ".dcl")) 
 (setq  ret (open fl "w"))
 (mapcar
'(lambda (x) (write-line x ret))
(list
 " mip_msg : dialog { label = \"ANSI/ASME B16.47 FLANGES\";"
 " : popup_list {key = \"NPS\"; width = 17; height = 8;} "
 " : row { "
 " : button {label = \"OK\"; key = \"accept\"; width = 10; fixed_width = true;} "
 " : button {label = \"Cancel\"; is_cancel = true; key = \"cancel\"; width = 10; fixed_width = true;}"
 " } "
 "} "
)   
 ) ;_ end of mapcar
 (setq ret (close ret))
 (if (and (not (minusp (setq dcl_id (load_dialog fl))))
      	(new_dialog "mip_msg" dcl_id)
 	) ;_ end of and
(progn
 (start_list "NPS" 3) 
 (mapcar 'add_list lstType)
 (end_list)
 (action_tile "accept" "(setq ret (nth (atoi (get_tile \"NPS\")) lstType))(done_dialog)")
 (start_dialog) 
) ;_ end of progn
 ) ;_ end of if
 (unload_dialog dcl_id) 
 (vl-file-delete fl)
ret
)

(defun c:test (/  PR RL lst typ)
;Dat ten file mac dinh
;Neu trong may k co ten file mac dinh, CT yeu cau chon file
(or  fn
 (setq fn (findfile "Nhap ten file mac dinh vao day"))
 (setq fn (getfiled "Chon file chua so lieu" "" "txt" 2)))
;Doc du lieu tu file, xu ly
(if fn
 (progn ; Neu doc duoc file fn nay
  (setq PR (open fn "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq  RL (read (strcat "(" RL ")"))
 lst (append lst (list (list (car RL)(cdr RL))))
  )
)
(close PR)
;Lay Type
(setq typ (atoi(DCL (mapcar '(lambda (x)(vl-princ-to-string (car x))) lst))))
;Ve
(if (assoc typ lst)
 (apply 'draw (cadr (assoc typ lst)))
 (and (princ "\nMissed Type")(exit))
)
  )
  (princ "\nMissed File")
 )
)

;Phan nay tro di la cua chu, tu chu chinh sua :
(defun draw ( D X G tsmall WT T1 A r1 C D1 / OldOS P1) ;Nho set tat ca bien P1 -> 30 o day
(setq P1(getpoint "\n Start Point:")
 P2(polar P1 pi G)
 P3(polar P2 (* pi 1.5) 6.35)
 P4(polar P3 pi (/(- D G) 2))
 P5(polar P4 (* pi 1.5) tsmall)
 P6(polar P5 0.0 (/(- D X) 2))
 P7 (list (+ (car P6) (/ (- X A) 2)) (- (cadr P6) (- T1 tsmall)) (caddr p6))
 P8(polar P7 0.0 A)
 P9(list (+ (car P8) (/ (- X A) 2)) (+ (cadr P8) (- T1 tsmall)) (caddr p8))
 P10(polar P9 0.0 (/(- D X) 2))
 P11(polar P10 (/ pi 2) tsmall)
 P12(polar P11 pi (/(- D G) 2))
 P13(polar P1 pi (/(- G (- A (* WT 2))) 2))
 P14(polar P13 (* pi 1.5) (+ T1 6.35))
 P15(polar P13 pi (- A (* WT 2)))
 P16(polar P15 (* pi 1.5) (+ T1 6.35))
 P17(polar P3 pi (/(- C G D1) 2))
 P18(polar P17 (* pi 1.5) tsmall)
 P19(polar P17 pi D1)
 P20(polar P19 (* pi 1.5) tsmall)
 P21(polar P12 0.0 (/(- C G D1) 2))
 P22(polar P21 (* pi 1.5) tsmall)
 P23(polar P21 0.0 D1)
 P24(polar P23 (* pi 1.5) tsmall)
 P25(list (- (car P24) (/ D1 2)) (- (cadr P24) 10) (caddr p24))
 P26(polar P25 (* pi 0.5) (+ tsmall 20))
 P27(list (- (car P8) (/ A 2)) (- (cadr P8) 15) (caddr p8))
 P28(polar P27 (* pi 0.5) (+ T1 36.35))
 P29(list (- (car P18) (/ D1 2)) (- (cadr P18) 10) (caddr p18))
 P30(polar P29 (* pi 0.5) (+ tsmall 20))
)
 (setq OldOs(getvar "osmode"))
 (setvar "osmode" 0)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "line" P1 P2 P3 P4 P5 "")
 (command "line" P5 P6 "")
 (setq A1 (entlast))
 (command "line" P6 P7 "")
 (setq B1 (entlast))
 (command "line" P7 P8 "")
 (command "line" P8 P9 "")
 (setq C1 (entlast))
 (command "line" P9 P10 "")
 (setq D1 (entlast))
 (command "line" P10 P11 P12 p1 "")
 (command "line" P13 P14 "")
 (command "line" P15 P16 "")
 (command "line" P17 P18 "")
 (command "line" P19 P20 "")
 (command "line" P21 P22 "")
 (command "line" P23 P24 "")
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER2" "" "")
 (command "line" P25 P26 "")
 (command "line" P27 P28 "")
 (command "line" P29 P30 "")
 (command "fillet" "r" r1 "" "fillet" A1 B1 )
 (command "fillet" "" "fillet" C1 D1 )
 (command "zoom" "w" P26 P29)
 (setvar "osmode" OldOs)
 (princ)
 )

  • 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ác anh ơi cho em hỏi,em có 1 chương trình vẽ Elbowls45 như thế này :

(defun DCL ( lstType / fl ret dcl_id Return# )
 (vl-load-com)
 (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
 (setq  ret (open fl "w"))
 (mapcar
   '(lambda (x) (write-line x ret))
(list
 " mip_msg : dialog { label = \"Elbowls\";"
 " : boxed_column { label = \"Chon loai Elbowls\";"
 " : list_box { key = \"mylist\";width = 17;}"
 " } "
 " : boxed_column { label = \"Chon loai NPS\";"
 " : popup_list {key = \"NPS\"; width = 17; height = 8;} "
 " } "
 " : row { "
 " : button {label = \"OK\"; key = \"accept\"; width = 10; fixed_width = true;} "
 " : button {label = \"Cancel\"; is_cancel = true; key = \"cancel\"; width = 10; fixed_width = true;}"
 " } "
 "} "
)  
 )
 (setq mylist (list "Elbowls 45" "Elbowls 90" "Elbowls 180"))
 (setq ret (close ret))
 (if (and (not (minusp (setq dcl_id (load_dialog fl))))
 	     (new_dialog "mip_msg" dcl_id)
     )
   (progn
 (start_list "NPS" 3)
 (mapcar 'add_list lstType)
 (end_list)
 (start_list "mylist" 3)
 (mapcar 'add_list mylist)
 (end_list)
 (action_tile "accept" "(setq ret (nth (atoi (get_tile \"NPS\")) lstType))(done_dialog)")
 (start_dialog)
   )
 )
 (unload_dialog dcl_id)
 (vl-file-delete fl)
ret
)

(defun c:e45 (/  PR RL  )
(setq lst nil typ nil)
(or  fn
 (setq fn (findfile "Nhap ten file mac dinh vao day"))
 (setq fn (getfiled "Chon file chua so lieu" "" "txt" 2)))

(if fn
 (progn
  (setq PR (open fn "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq  RL (read (strcat "(" RL ")"))
 lst (append lst (list (list (car RL)(cdr RL))))
  )
)
(close PR)
(setq typ (read(DCL (mapcar '(lambda (x)(vl-princ-to-string (car x))) lst))))
(if (assoc typ lst)
 (apply 'draw (cadr (assoc typ lst)))
 (and (princ "\nMissed Type")(exit))
)
  )
  (princ "\nMissed File")
 )
)
;--------------------------------------------------------------------------------
(defun draw (OD B / P1 P2 P3 P4 P5 P6 P7 OldOS)
 (setq
P1(getpoint "\n Start Point:")

P2(polar P1 0.0 (* B 2.414213562))
P3(polar P1 0.0 (* OD 0.5))
P4(polar P1 pi (* OD 0.5))
P5(list (- (car P2) (/ (* B (atan 67.5)) 4)) (- (cadr P2) 10) (caddr P2))
P6(list (- (car P2) (/ (* B (atan 67.5)) 4)) (+ (cadr P2) 10) (caddr P2))
P7(list (- (car P2) (* OD 0.5)) (- (cadr P2) (+ OD (* B 2.414213562))) (caddr P2))
P8(polar P2 (/ pi 2) (+ OD (* B 2.414213562)))
)
 (setq OldOs(getvar "osmode"))
 (setvar "osmode" 0)
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER" "" "")
 (command "circle" P2 P1)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "circle" P2 P3)
 (command "circle" P2 P4)
 (command "line" P2 P4 "")
 (command "rotate" "b" P5 P6 "" P2 -45 "")
 (command "line" P2 P4 "")
 (command "zoom" "w" P7 P8)
 (command "trim" "" P7 P8 "")
 (setvar "osmode" OldOs)
 (princ)
 )

 

Bây giờ em muốn thêm 2 chương trình vẽ Elbowls90 và Elbowls180 vào chương trình trên mà để dc như cái Dialog(như hình vẽ) mà khi mình chọn loại Elbowls để vẽ thì nó sẽ vẽ dc Elbowls đó với các số liệu tương ứng thì em phải làm thế nào ạ.

anhso-23456_2011-12-01_145908.jpg

Mong các anh giúp đỡ.Còn các chương trình Elbowls90,Elbowls180 và các số liệu tương ứng nằm trong tệp này ạ :

Download Elbowls.zip with Mup5

Em xin chân thành cảm ơn các anh 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

OP không nghiền ngẫm các action_tile đã được ketxu viết bên trên thì yêu cầu đến bao giờ hết ??

1. Việc đầu tiên : chuyển hết 2 defun C: của 90,180 thành dạng hàm giống draw (draw90, draw 180).

Vì 3 hàm vẽ này có chung số lượng đối số nên viết khá giống nhau, và khi sử dụng cũng dùng apply

2. Tạo list tương ứng với loại elbowls.

Cách đọc dữ liệu lấy vào biến lst đã có, giờ chỉ cần thêm 1 thao tác gán loại elbowls vào đầu để tạo thành assoc list, tiện cho việc lấy ra

3. Tạo Action khi click vào listbox để xuất ra list NPS tương ứng

4. Tạo Action khi nhấn OK (sử dụng hàm tương ứng với loại elbow đã chọn)

 

=> Bạn vướng ở chỗ nào để mọi người cùng giúp ??

  • Vote tăng 2

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ế bước 1,2 của bạn đâu :) Phải quy định kiểu dữ liệu list lấy ra như thế nào thì mới biết cách thao tác với nó chứ ?

Bước 1,2 của em làm như thế này đúng chưa anh :mellow:

(defun DCL ( lstType / fl ret dcl_id Return# )
 (vl-load-com)
 (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
 (setq  ret (open fl "w"))
 (mapcar
   '(lambda (x) (write-line x ret))
(list
 " mip_msg : dialog { label = \"Elbowls\";"
 " : boxed_column { label = \"Chon loai Elbowls\";"
 " : list_box { key = \"mylist\";width = 17;}"
 " } "
 " : boxed_column { label = \"Chon loai NPS\";"
 " : popup_list {key = \"NPS\"; width = 17; height = 8;} "
 " } "
 " : row { "
 " : button {label = \"OK\"; key = \"accept\"; width = 10; fixed_width = true;} "
 " : button {label = \"Cancel\"; is_cancel = true; key = \"cancel\"; width = 10; fixed_width = true;}"
 " } "
 "} "
)   
 )
 (setq mylist (list "Elbowls 45" "Elbowls 90" "Elbowls 180"))
 (setq ret (close ret))
 (if (and (not (minusp (setq dcl_id (load_dialog fl))))
 		 (new_dialog "mip_msg" dcl_id)
     )
   (progn
 (start_list "NPS" 3)
 (mapcar 'add_list lstType)
 (end_list)
 (start_list "mylist" 3)
 (mapcar 'add_list mylist)
 (end_list)
 (action_tile "accept" "(setq ret (nth (atoi (get_tile \"NPS\")) lstType))(done_dialog)")
 (start_dialog)
   )
 )
 (unload_dialog dcl_id)
 (vl-file-delete fl)
ret
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:e45 (/  PR RL  )
(setq lst nil typ nil)
(or  fn
 (setq fn (findfile "Nhap ten file mac dinh vao day"))
 (setq fn (getfiled "Chon file chua so lieu" "" "txt" 2)))

(if fn
 (progn
  (setq PR (open fn "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq  RL (read (strcat "(" RL ")"))
 lst (append lst (list (list (car RL)(cdr RL))))
  )
)
(close PR)
(setq typ (read(DCL (mapcar '(lambda (x)(vl-princ-to-string (car x))) lst))))
(if (assoc typ lst)
 (apply 'draw (cadr (assoc typ lst)))
 (and (princ "\nMissed Type")(exit))
)
  )
  (princ "\nMissed File")
 )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:e90 (/  PR1 RL1  )
(setq lst1 nil typ1 nil)
(or  fn1
 (setq fn1 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn1 (getfiled "Chon file chua so lieu" "" "txt" 2)))

(if fn1
 (progn
  (setq PR1 (open fn1 "r") RL1 (read-line PR1))
  (while  (setq RL1 (read-line PR1))
  (setq  RL1 (read (strcat "(" RL1 ")"))
 lst1 (append lst1 (list (list (car RL1)(cdr RL1))))
  )
)
(close PR1)
(setq typ1 (read(DCL (mapcar '(lambda (x)(vl-princ-to-string (car x))) lst1))))
(if (assoc typ1 lst1)
 (apply 'draw1 (cadr (assoc typ1 lst1)))
 (and (princ "\nMissed Type")(exit))
)
  )
  (princ "\nMissed File")
 )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:e180 (/  PR2 RL2  )
(setq lst2 nil typ2 nil)
(or  fn2
 (setq fn2 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn2 (getfiled "Chon file chua so lieu" "" "txt" 2)))

(if fn2
 (progn
  (setq PR2 (open fn2 "r") RL2 (read-line PR2))
  (while  (setq RL2 (read-line PR2))
  (setq  RL2 (read (strcat "(" RL2 ")"))
 lst2 (append lst2 (list (list (car RL2)(cdr RL2))))
  )
)
(close PR2)
(setq typ2 (read(DCL (mapcar '(lambda (x)(vl-princ-to-string (car x))) lst2))))
(if (assoc typ2 lst2)
 (apply 'draw2 (cadr (assoc typ2 lst2)))
 (and (princ "\nMissed Type")(exit))
)
  )
  (princ "\nMissed File")
 )
)
;--------------------------------------------------------------------------------
(defun draw (OD B / P1 P2 P3 P4 P5 P6 P7 OldOS)
 (setq
P1(getpoint "\n Start Point:")

P2(polar P1 0.0 (* B 2.414213562))
P3(polar P1 0.0 (* OD 0.5))
P4(polar P1 pi (* OD 0.5))
P5(list (- (car P2) (/ (* B (atan 67.5)) 4)) (- (cadr P2) 10) (caddr P2))
P6(list (- (car P2) (/ (* B (atan 67.5)) 4)) (+ (cadr P2) 10) (caddr P2))
P7(list (- (car P2) (* OD 0.5)) (- (cadr P2) (+ OD (* B 2.414213562))) (caddr P2))
P8(polar P2 (/ pi 2) (+ OD (* B 2.414213562)))
)
 (setq OldOs(getvar "osmode"))
 (setvar "osmode" 0)
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER" "" "")
 (command "circle" P2 P1)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "circle" P2 P3)
 (command "circle" P2 P4)
 (command "line" P2 P4 "")
 (command "rotate" "b" P5 P6 "" P2 -45 "")
 (command "line" P2 P4 "")
 (command "zoom" "w" P7 P8)
 (command "trim" "" P7 P8 "")
 (setvar "osmode" OldOs)
 (princ)
 )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun draw1 (OD A / P1 P2 P3 P4 P5 P6 P7 OldOS)
 (setq
P1(getpoint "\n Start Point:")
P2(polar P1 (/ pi 2) A)
P3(polar P2 (* pi 1.5) (/ OD 2))
P4(polar P2 (/ pi 2) (/ OD 2))
P5(polar P1 pi (+ A (/ OD 2)))
P6(list (+ (car P1) (+ A (/ OD 2))) (- (cadr P1) (+ A (/ OD 2))) (caddr P1))
P7(list (- (car P1) (/ A 4)) (+ (cadr P1) (/ A 4)) (caddr P1))
)
 (setq OldOs(getvar "osmode"))
 (setvar "osmode" 0)
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER" "" "")
 (command "circle" P1 P2)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "circle" P1 P3)
 (command "circle" P1 P4)
 (command "line" P1 P4 "")
 (command "line" P1 P5 "")
 (command "zoom" "w" P6 P4)
 (command "TRIM" "" P6 P7 "")
 (setvar "osmode" OldOs)
 (princ)
 )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun draw2 (OD O / P1 P2 P3 P4 P5 P6 P7 OldOS)
 (setq
P1(getpoint "\n Start Point:")

P2(polar P1 pi (* O 0.5))
P3(polar P2 0.0 (* OD 0.5))
P4(polar P2 pi (* OD 0.5))
P5(polar P1 0.0 (* 0.5 (+ O OD)))
P6(list (+ (car P1) (* 1 O)) (- (cadr P1) (* O 1)) (caddr P1))
P7(list (- (car P1) (* 0.25 (- O OD))) (+ (cadr P1) (* 0.25 (- O OD))) (caddr P1))
P8(list (- (car P1) (* 1 O)) (+ (cadr P1) (* O 1)) (caddr P1))
)
 (setq OldOs(getvar "osmode"))
 (setvar "osmode" 0)
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER" "" "")
 (command "circle" P1 P2)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "circle" P1 P3)
 (command "circle" P1 P4)
 (command "line" P4 P5 "")
 (command "zoom" "w" P6 P8)
 (command "trim" "" P6 P7 "")
 (setvar "osmode" OldOs)
 (princ)
 )

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âng,em cũng nói thật với các anh,em mới học viết lisp nên cũng chưa hiểu nhiều lắm.

Các anh viết nốt cho em chuơng trình này thôi rồi lần sau em sẽ tự nghiên cứu và tìm hiểu ạ,bây giờ em đang cần gấp chuơng trình này,các anh giúp em với ạ.

Em xin chân thành cảm ơn 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

(defun DCL ( lstType / fl ret dcl_id Return# add_lst tmp)
(defun add_lst (key lst method)
(start_list key method)
(mapcar 'add_list lst)
(end_list)
)
 (vl-load-com)
 (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
 (setq  ret (open fl "w"))
 (mapcar
'(lambda (x) (write-line x ret))
(list
 " mip_msg : dialog { label = \"Elbowls\";"
 " : boxed_column { label = \"Chon loai Elbowls\";"
 " : list_box { key = \"mylist\";width = 17;}"
 " } "
 " : boxed_column { label = \"Chon loai NPS\";"
 " : popup_list {key = \"NPS\"; width = 17; height = 8;} "
 " } "
 " : row { "
 " : button {label = \"OK\"; key = \"accept\"; width = 10; fixed_width = true;} "
 " : button {label = \"Cancel\"; is_cancel = true; key = \"cancel\"; width = 10; fixed_width = true;}"
 " } "
 "} "
)  
 )
 (setq ret (close ret))
 (if (and (not (minusp (setq dcl_id (load_dialog fl))))
   	(new_dialog "mip_msg" dcl_id)
  )
(progn
 (add_lst "mylist" '("Elbowls 45" "Elbowls 90" "Elbowls 180") 3)
 (set_tile "mylist" "0")
 (add_lst "NPS" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadadr lst)) 3) ;Chu y dong khoi tao lay du lieu Elbowls 45
 ;Xu ly khi pick chon loai Elbowls
 (action_tile "mylist"
  "(add_lst \"NPS\" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadr (assoc $value lst))) 3)"
 )
 (action_tile "accept" "(setq ret  (list (get_tile \"mylist\")
		(car (setq tmp
		(cadr
		(nth (atoi (get_tile \"NPS\")) (cadr (assoc (get_tile \"mylist\") lst))))))
		(last tmp)
		))(done_dialog)")
 (start_dialog)
)
 )
 (unload_dialog dcl_id)
 (vl-file-delete fl)
ret
)

(defun c:ef (/  PR RL  lst0 lst1 lst2 lst val pt)

;Lay ten file
(or  fn0
 (setq fn0 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn0 (getfiled "Chon file chua so lieu Elbowls 45 " "" "txt" 2)))
(or  fn1
 (setq fn1 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn1 (getfiled "Chon file chua so lieu Elbowls 90 " "" "txt" 2)))
(or  fn2
 (setq fn2 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn2 (getfiled "Chon file chua so lieu Elbowls 180 " "" "txt" 2)))
;Het lay ten file
(if (and fn0 fn1 fn2)
 (progn
; Doc tung file dua vao list
  (setq PR (open fn0 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst0 (append lst0 (list (list (car RL)(cdr RL))))  
  )
)
(setq lst0 (list "0" lst0))
(close PR)
; Doc file fn1 dua vao list
  (setq PR (open fn1 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst1 (append lst1 (list (list (car RL)(cdr RL))))  
  )
)
(setq lst1 (list "1" lst1))
(close PR)
(setq PR (open fn2 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst2 (append lst2 (list (list (car RL)(cdr RL))))  
  )
)
(setq lst2 (list "2" lst2))
(close PR)
(setq lst (list lst0 lst1 lst2)) ;Lay list du lieu dang (("0" (NPS (OD B))(NPS (OD B))...)("1" (NPS (OD B))(NPS (OD B))...)...)
(if
(and (setq val (DCL lst))
  (setq pt (getpoint "\nDiem chen:"))
)
(apply 'draw (append val (list pt)))
(princ "Loi")
)
);Het Progn
(princ "\nThieu file")
)
(princ)
)


;--------------------------------------------------------------------------------
(defun draw (Loai OD B P1 /  P2 P3 P4 P5 P6 P7 OldOS)
;Phan nay la phan chung cua tat ca cac ham
(setq OldOs(getvar "osmode"))
(setvar "osmode" 0)
(cond
((= Loai "0") ;Loai 45 do
(setq
 P2(polar P1 0.0 (* B 2.414213562))
 P3(polar P1 0.0 (* OD 0.5))
 P4(polar P1 pi (* OD 0.5))
 P5(list (- (car P2) (/ (* B (atan 67.5)) 4)) (- (cadr P2) 10) (caddr P2))
 P6(list (- (car P2) (/ (* B (atan 67.5)) 4)) (+ (cadr P2) 10) (caddr P2))
 P7(list (- (car P2) (* OD 0.5)) (- (cadr P2) (+ OD (* B 2.414213562))) (caddr P2))
 P8(polar P2 (/ pi 2) (+ OD (* B 2.414213562)))
)  
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER" "" "")
 (command "circle" P2 P1)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "circle" P2 P3)
 (command "circle" P2 P4)
 (command "line" P2 P4 "")
 (command "rotate" "b" P5 P6 "" P2 -45 "")
 (command "line" P2 P4 "")
 (command "zoom" "w" P7 P8)
 (command "trim" "" P7 P8 "")
 ) ;Ket thuc ham ve Loai 45
 ((= Loai "1") ;Loai 90
(setq
 P2(polar P1 (/ pi 2) B)
 P3(polar P2 (* pi 1.5) (/ OD 2))
 P4(polar P2 (/ pi 2) (/ OD 2))
 P5(polar P1 pi (+ B (/ OD 2)))
 P6(list (+ (car P1) (+ B (/ OD 2))) (- (cadr P1) (+ B (/ OD 2))) (caddr P1))
 P7(list (- (car P1) (/ B 4)) (+ (cadr P1) (/ B 4)) (caddr P1))
)
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER" "" "")
 (command "circle" P1 P2)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "circle" P1 P3)
 (command "circle" P1 P4)
 (command "line" P1 P4 "")
 (command "line" P1 P5 "")
 (command "zoom" "w" P6 P4)
 (command "TRIM" "" P6 P7 "")
 ) ;Ket thuc ham ve loai 90

 ((= Loai "2")
 (setq
P2(polar P1 pi (* O 0.5))
P3(polar P2 0.0 (* OD 0.5))
P4(polar P2 pi (* OD 0.5))
P5(polar P1 0.0 (* 0.5 (+ O OD)))
P6(list (+ (car P1) (* 1 O)) (- (cadr P1) (* O 1)) (caddr P1))
P7(list (- (car P1) (* 0.25 (- O OD))) (+ (cadr P1) (* 0.25 (- O OD))) (caddr P1))
P8(list (- (car P1) (* 1 O)) (+ (cadr P1) (* O 1)) (caddr P1))
)
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER" "" "")
 (command "circle" P1 P2)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "circle" P1 P3)
 (command "circle" P1 P4)
 (command "line" P4 P5 "")
 (command "zoom" "w" P6 P8)
 (command "trim" "" P6 P7 "")
 ) ; Ket thuc ham ve loai 180
);Ket thuc phan loai COnd
;Phan nay la phan chung
 (setvar "osmode" OldOs)
 (princ)
)

Code đa số mình dùng dotted pair list chứ k phân ra nhiều biến và lợi dụng hàm assoc, bạn phải chú ý theo dõi sự thay đổi của các biến nhận về thì mới hiểu rõ được. Hiện tại mình chưa rỗi nên chưa viết rõ chức năng từng dòng được, nên bạn chịu khó ngâm, khúc mắc đâu mọi người sẽ giải thích

 

Phần lấy tên 3 file và đọc dữ liệu trong từng file gán vào 1 list nhỏ mình cố ý để dài như vậy để bạn hiểu nhược điểm bất tiện của nó khi code : số lượng file chứa Elbowls là cố định và k linh hoạt. Bạn hãy sửa thành cách cho chọn bất kỳ file Elbowls nào (thêm 1 nút chọn thêm file) => append file vào list các loại elbowls

(Lấy tên loại elbowls = tên file - *.txt). COi như đây là 1 bài tập dành cho bạn (nếu bạn thực sự muốn chương trình của mình tốt hơ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

(defun DCL ( lstType / fl ret dcl_id Return# add_lst tmp)
(defun add_lst (key lst method)
(start_list key method)
(mapcar 'add_list lst)
(end_list)
)
 (vl-load-com)
 (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
 (setq  ret (open fl "w"))
 (mapcar
'(lambda (x) (write-line x ret))
(list
 " mip_msg : dialog { label = \"Elbowls\";"
 " : boxed_column { label = \"Chon loai Elbowls\";"
 " : list_box { key = \"mylist\";width = 17;}"
 " } "
 " : boxed_column { label = \"Chon loai NPS\";"
 " : popup_list {key = \"NPS\"; width = 17; height = 8;} "
 " } "
 " : row { "
 " : button {label = \"OK\"; key = \"accept\"; width = 10; fixed_width = true;} "
 " : button {label = \"Cancel\"; is_cancel = true; key = \"cancel\"; width = 10; fixed_width = true;}"
 " } "
 "} "
)  
 )
 (setq ret (close ret))
 (if (and (not (minusp (setq dcl_id (load_dialog fl))))
   	(new_dialog "mip_msg" dcl_id)
  )
(progn
 (add_lst "mylist" '("Elbowls 45" "Elbowls 90" "Elbowls 180") 3)
 (set_tile "mylist" "0")
 (add_lst "NPS" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadadr lst)) 3) ;Chu y dong khoi tao lay du lieu Elbowls 45
 ;Xu ly khi pick chon loai Elbowls
 (action_tile "mylist"
  "(add_lst \"NPS\" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadr (assoc $value lst))) 3)"
 )
 (action_tile "accept" "(setq ret  (list (get_tile \"mylist\")
	(car (setq tmp
	(cadr
	(nth (atoi (get_tile \"NPS\")) (cadr (assoc (get_tile \"mylist\") lst))))))
	(last tmp)
	))(done_dialog)")
 (start_dialog)
)
 )
 (unload_dialog dcl_id)
 (vl-file-delete fl)
ret
)

(defun c:ef (/  PR RL  lst0 lst1 lst2 lst val pt)

;Lay ten file
(or  fn0
 (setq fn0 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn0 (getfiled "Chon file chua so lieu Elbowls 45 " "" "txt" 2)))
(or  fn1
 (setq fn1 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn1 (getfiled "Chon file chua so lieu Elbowls 90 " "" "txt" 2)))
(or  fn2
 (setq fn2 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn2 (getfiled "Chon file chua so lieu Elbowls 180 " "" "txt" 2)))
;Het lay ten file
(if (and fn0 fn1 fn2)
 (progn
; Doc tung file dua vao list
  (setq PR (open fn0 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst0 (append lst0 (list (list (car RL)(cdr RL))))  
  )
)
(setq lst0 (list "0" lst0))
(close PR)
; Doc file fn1 dua vao list
  (setq PR (open fn1 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst1 (append lst1 (list (list (car RL)(cdr RL))))  
  )
)
(setq lst1 (list "1" lst1))
(close PR)
(setq PR (open fn2 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst2 (append lst2 (list (list (car RL)(cdr RL))))  
  )
)
(setq lst2 (list "2" lst2))
(close PR)
(setq lst (list lst0 lst1 lst2)) ;Lay list du lieu dang (("0" (NPS (OD B))(NPS (OD B))...)("1" (NPS (OD B))(NPS (OD B))...)...)
(if
(and (setq val (DCL lst))
  (setq pt (getpoint "\nDiem chen:"))
)
(apply 'draw (append val (list pt)))
(princ "Loi")
)
);Het Progn
(princ "\nThieu file")
)
(princ)
)


;--------------------------------------------------------------------------------
(defun draw (Loai OD B P1 /  P2 P3 P4 P5 P6 P7 OldOS)
;Phan nay la phan chung cua tat ca cac ham
(setq OldOs(getvar "osmode"))
(setvar "osmode" 0)
(cond
((= Loai "0") ;Loai 45 do
(setq
 P2(polar P1 0.0 (* B 2.414213562))
 P3(polar P1 0.0 (* OD 0.5))
 P4(polar P1 pi (* OD 0.5))
 P5(list (- (car P2) (/ (* B (atan 67.5)) 4)) (- (cadr P2) 10) (caddr P2))
 P6(list (- (car P2) (/ (* B (atan 67.5)) 4)) (+ (cadr P2) 10) (caddr P2))
 P7(list (- (car P2) (* OD 0.5)) (- (cadr P2) (+ OD (* B 2.414213562))) (caddr P2))
 P8(polar P2 (/ pi 2) (+ OD (* B 2.414213562)))
)  
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER" "" "")
 (command "circle" P2 P1)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "circle" P2 P3)
 (command "circle" P2 P4)
 (command "line" P2 P4 "")
 (command "rotate" "b" P5 P6 "" P2 -45 "")
 (command "line" P2 P4 "")
 (command "zoom" "w" P7 P8)
 (command "trim" "" P7 P8 "")
 ) ;Ket thuc ham ve Loai 45
 ((= Loai "1") ;Loai 90
(setq
 P2(polar P1 (/ pi 2) B)
 P3(polar P2 (* pi 1.5) (/ OD 2))
 P4(polar P2 (/ pi 2) (/ OD 2))
 P5(polar P1 pi (+ B (/ OD 2)))
 P6(list (+ (car P1) (+ B (/ OD 2))) (- (cadr P1) (+ B (/ OD 2))) (caddr P1))
 P7(list (- (car P1) (/ B 4)) (+ (cadr P1) (/ B 4)) (caddr P1))
)
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER" "" "")
 (command "circle" P1 P2)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "circle" P1 P3)
 (command "circle" P1 P4)
 (command "line" P1 P4 "")
 (command "line" P1 P5 "")
 (command "zoom" "w" P6 P4)
 (command "TRIM" "" P6 P7 "")
 ) ;Ket thuc ham ve loai 90

 ((= Loai "2")
 (setq
P2(polar P1 pi (* O 0.5))
P3(polar P2 0.0 (* OD 0.5))
P4(polar P2 pi (* OD 0.5))
P5(polar P1 0.0 (* 0.5 (+ O OD)))
P6(list (+ (car P1) (* 1 O)) (- (cadr P1) (* O 1)) (caddr P1))
P7(list (- (car P1) (* 0.25 (- O OD))) (+ (cadr P1) (* 0.25 (- O OD))) (caddr P1))
P8(list (- (car P1) (* 1 O)) (+ (cadr P1) (* O 1)) (caddr P1))
)
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER" "" "")
 (command "circle" P1 P2)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "circle" P1 P3)
 (command "circle" P1 P4)
 (command "line" P4 P5 "")
 (command "zoom" "w" P6 P8)
 (command "trim" "" P6 P7 "")
 ) ; Ket thuc ham ve loai 180
);Ket thuc phan loai COnd
;Phan nay la phan chung
 (setvar "osmode" OldOs)
 (princ)
)

Code đa số mình dùng dotted pair list chứ k phân ra nhiều biến và lợi dụng hàm assoc, bạn phải chú ý theo dõi sự thay đổi của các biến nhận về thì mới hiểu rõ được. Hiện tại mình chưa rỗi nên chưa viết rõ chức năng từng dòng được, nên bạn chịu khó ngâm, khúc mắc đâu mọi người sẽ giải thích

 

Phần lấy tên 3 file và đọc dữ liệu trong từng file gán vào 1 list nhỏ mình cố ý để dài như vậy để bạn hiểu nhược điểm bất tiện của nó khi code : số lượng file chứa Elbowls là cố định và k linh hoạt. Bạn hãy sửa thành cách cho chọn bất kỳ file Elbowls nào (thêm 1 nút chọn thêm file) => append file vào list các loại elbowls

(Lấy tên loại elbowls = tên file - *.txt). COi như đây là 1 bài tập dành cho bạn (nếu bạn thực sự muốn chương trình của mình tốt hơn)

Hic,hic,khó quá anh ơi,em chịu thô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
Thế thì bạn cứ dùng như vậy thôi :)

 

Anh ơi cho em hỏi có phải chương trình trên bị giới hạn số biến là 3 (NPS, OD, B ) phải ko anh ??

Em thử thay 1 chương trình khác vào với số biến lớn hơn và mặc dù đã khai báo thêm biến ở hàm draw rồi mà nó vẫn báo lỗi này là sao vậy anh :"error: too few arguments"

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

 

Anh ơi cho em hỏi có phải chương trình trên bị giới hạn số biến là 3 (NPS, OD, B ) phải ko anh ??

Em thử thay 1 chương trình khác vào với số biến lớn hơn và mặc dù đã khai báo thêm biến ở hàm draw rồi mà nó vẫn báo lỗi này là sao vậy anh :"error: too few arguments"

 

Đỏ: không có chuyện giới hạn 3 biến đâu. Bạn muốn khai thêm/bớt là tuỳ thôi.

Xanh: lỗi này có thể là 1 hàm nào đó (hàm gốc của lisp hay hàm do bạn viết) y/c số biến là N nhưng bạn lại dùng nó với số biến là 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

Anh xem giúp cho em chương trình này.Em vẫn giữ nguyên hàm của anh ketxu,em chỉ thay cái hàm tính ebows45 bằng 1 hàm khác có nhiều biến hơn là nó báo lỗi.

(defun DCL ( lstType / fl ret dcl_id Return# add_lst tmp)
(defun add_lst (key lst method)
(start_list key method)
(mapcar 'add_list lst)
(end_list)
)
 (vl-load-com)
 (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
 (setq  ret (open fl "w"))
 (mapcar
'(lambda (x) (write-line x ret))
(list
 " mip_msg : dialog { label = \"Elbowls\";"
 " : boxed_column { label = \"Chon loai Elbowls\";"
 " : list_box { key = \"mylist\";width = 17;}"
 " } "
 " : boxed_column { label = \"Chon loai NPS\";"
 " : popup_list {key = \"NPS\"; width = 17; height = 8;} "
 " } "
 " : row { "
 " : button {label = \"OK\"; key = \"accept\"; width = 10; fixed_width = true;} "
 " : button {label = \"Cancel\"; is_cancel = true; key = \"cancel\"; width = 10; fixed_width = true;}"
 " } "
 "} "
) 
 )
 (setq ret (close ret))
 (if (and (not (minusp (setq dcl_id (load_dialog fl))))
  	(new_dialog "mip_msg" dcl_id)
  )
(progn
 (add_lst "mylist" '("Elbowls 45" "Elbowls 90" "Elbowls 180") 3)
 (set_tile "mylist" "0")
 (add_lst "NPS" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadadr lst)) 3)
 ;Xu ly khi pick chon loai Elbowls
 (action_tile "mylist"
  "(add_lst \"NPS\" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadr (assoc $value lst))) 3)"
 )
 (action_tile "accept" "(setq ret  (list (get_tile \"mylist\")
              	(car (setq tmp
              	(cadr
              	(nth (atoi (get_tile \"NPS\")) (cadr (assoc (get_tile \"mylist\") lst))))))
              	(last tmp)
              	))(done_dialog)")
 (start_dialog)
)
 )
 (unload_dialog dcl_id)
 (vl-file-delete fl)
ret
)

(defun c:eb (/  PR RL  lst0 lst1 lst2 lst val pt)

;Lay ten file
(or  fn0
 (setq fn0 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn0 (getfiled "Chon file chua so lieu Elbowls 45 " "" "txt" 2)))
(or  fn1
 (setq fn1 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn1 (getfiled "Chon file chua so lieu Elbowls 90 " "" "txt" 2)))
(or  fn2
 (setq fn2 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn2 (getfiled "Chon file chua so lieu Elbowls 180 " "" "txt" 2)))
;Het lay ten file
(if (and fn0 fn1 fn2)
 (progn
; Doc tung file dua vao list
  (setq PR (open fn0 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst0 (append lst0 (list (list (car RL)(cdr RL)))) 
  )
)
(setq lst0 (list "0" lst0))
(close PR)
; Doc file fn1 dua vao list
  (setq PR (open fn1 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst1 (append lst1 (list (list (car RL)(cdr RL)))) 
  )
)
(setq lst1 (list "1" lst1))
(close PR)
(setq PR (open fn2 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst2 (append lst2 (list (list (car RL)(cdr RL)))) 
  )
)
(setq lst2 (list "2" lst2))
(close PR)
(setq lst (list lst0 lst1 lst2))
(if
(and (setq val (DCL lst))
  (setq pt (getpoint "\nDiem chen:"))
)
(apply 'draw (append val (list pt)))
(princ "Loi")
)
);Het Progn
(princ "\nThieu file")
)
(princ)
)


;----EM THAY CHUONG TRINH KHAC VAO DAY--------------------------------
(defun draw (Loai D X G tsmall WT T1 A r1 C D1 P1 / OldOS)
(setq OldOs(getvar "osmode"))
(setvar "osmode" 0)
(cond
((= Loai "0")
(setq
 P2(polar P1 pi G)
 P3(polar P2 (* pi 1.5) 6.35)
 P4(polar P3 pi (/(- D G) 2))
 P5(polar P4 (* pi 1.5) tsmall)
 P6(polar P5 0.0 (/(- D X) 2))
 P7 (list (+ (car P6) (/ (- X A) 2)) (- (cadr P6) (- T1 tsmall)) (caddr p6))
 P8(polar P7 0.0 A)
 P9(list (+ (car P8) (/ (- X A) 2)) (+ (cadr P8) (- T1 tsmall)) (caddr p8))
 P10(polar P9 0.0 (/(- D X) 2))
 P11(polar P10 (/ pi 2) tsmall)
 P12(polar P11 pi (/(- D G) 2))
 P13(polar P1 pi (/(- G (- A (* WT 2))) 2))
 P14(polar P13 (* pi 1.5) (+ T1 6.35))
 P15(polar P13 pi (- A (* WT 2)))
 P16(polar P15 (* pi 1.5) (+ T1 6.35))
 P17(polar P3 pi (/(- C G D1) 2))
 P18(polar P17 (* pi 1.5) tsmall)
 P19(polar P17 pi D1)
 P20(polar P19 (* pi 1.5) tsmall)
 P21(polar P12 0.0 (/(- C G D1) 2))
 P22(polar P21 (* pi 1.5) tsmall)
 P23(polar P21 0.0 D1)
 P24(polar P23 (* pi 1.5) tsmall)
 P25(list (- (car P24) (/ D1 2)) (- (cadr P24) 10) (caddr p24))
 P26(polar P25 (* pi 0.5) (+ tsmall 20))
 P27(list (- (car P8) (/ A 2)) (- (cadr P8) 15) (caddr p8))
 P28(polar P27 (* pi 0.5) (+ T1 36.35))
 P29(list (- (car P18) (/ D1 2)) (- (cadr P18) 10) (caddr p18))
 P30(polar P29 (* pi 0.5) (+ tsmall 20))
)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "line" P1 P2 P3 P4 P5 "")
 (command "line" P5 P6 "")
 (setq A1 (entlast))
 (command "line" P6 P7 "")
 (setq B1 (entlast))
 (command "line" P7 P8 "")
 (command "line" P8 P9 "")
 (setq C1 (entlast))
 (command "line" P9 P10 "")
 (setq D1 (entlast))
 (command "line" P10 P11 P12 p1 "")
 (command "line" P13 P14 "")
 (command "line" P15 P16 "")
 (command "line" P17 P18 "")
 (command "line" P19 P20 "")
 (command "line" P21 P22 "")
 (command "line" P23 P24 "")
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER2" "" "")
 (command "line" P25 P26 "")
 (command "line" P27 P28 "")
 (command "line" P29 P30 "")
 (command "fillet" "r" r1 "" "fillet" A1 B1 )
 (command "fillet" "" "fillet" C1 D1 )
 (command "zoom" "w" P26 P29)
 )
);Ket thuc phan loai COnd
;Phan nay la phan chung
 (setvar "osmode" OldOs)
 (princ)
)

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

Anh xem giúp cho em chương trình này.Em vẫn giữ nguyên hàm của anh ketxu,em chỉ thay cái hàm tính ebows45 bằng 1 hàm khác có nhiều biến hơn là nó báo lỗi.

(apply 'draw (append val (list pt)))
(defun draw (Loai D X G tsmall WT T1 A r1 C D1 P1 / OldOS)

 

Bạn xem lại 2 dòng code ở trên:

Hàm (append val (list pt)) này trả lại 1 danh sách là các biến của hàm draw. Có bao nhiêu thì chắc bạn biết (hình như 4 ?)

Hàm draw ở dưới có 12 biến.

Vậy thì sao dùng được!

Trước hết là lỗi ở đây. Còn lỗi nào nữa thì tôi cũng chịu, vì cái dialoge của Ketxu viết nên hỏi Ketxu may ra giúp đượ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

(apply 'Function (list các biến)) = (function các biến). Số lượng biến nhiều hay ít không quan trọng, quan trọng là cái list thu về đăng sau chữ apply 'Draw nó có cùng số biến với hàm bạn viết thôi hay không.

Ngoài ra, chẳng ai giúp đc bạn nếu bạn không post thông báo lỗi lê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

(apply 'Function (list các biến)) = (function các biến). Số lượng biến nhiều hay ít không quan trọng, quan trọng là cái list thu về đăng sau chữ apply 'Draw nó có cùng số biến với hàm bạn viết thôi hay không.

Ngoài ra, chẳng ai giúp đc bạn nếu bạn không post thông báo lỗi lên

 

Lỗi thì đã post rồi: thiếu biến trong hàm. Và đương nhiên là thiếu ở hàm draw. Chiều nay có chat với bạn ấy nhưng chắc tôi không thể sửa nỗi, vì dialogle thì Ket viết (hơi khác với cách viết của tôi), với lại từ chỗ biết sơ sơ về lisp đến chỗ biết sơ sơ về DCL là 1 khoảng cách quá xa nên hơi khó để giúp.

@kedensau88: thật khó để giải thích cho bạn, vì bạn chưa hiểu hết cách dùng của 1 hàm, huống chi thêm thằng DCL. Lỗi đầu tiên của bạn là bạn định nghĩa 1 hàm (draw) có 12 biến nhưng bạn lại dùng nó với 4 biến là sai cú pháp, chưa kể 12 biến của bạn là từ trên trời rớt xuống.

Đừng giận nếu tôi làm bạn giận. Có như vậy mới mau hiểu lisp và tận dụng những ưu thế của nó trong công việc.

Thân thương!

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

Ồ, xin lỗi OP và mọi người, ketxu đọc k rõ dòng bé bé ở cuối ^^

Thực ra khi thấy bạn kedensau tự viết được các hàm vẽ, ketxu đã rất mong bạn ấy trở thành 1 cây lisp tương lai. Khi post lisp + chat với kedensau e đều có nói là hãy ngâm cứu lại từng dòng trong mấy cái lisp từ đơn giản đến phức tạp - Trong Topic này - nếu có gì không hiểu thì hỏi - vì nó liên quan trực tiếp đến chính công việc của kedensau - và e k muốn bạn ấy quá bị động trong cách tư duy xử lý

Tuy nhiên khi không mò ra được vấn đề, bạn ấy lại chỉ cần "bây giờ em đang cần gấp chuơng trình này". Có lẽ do ketxu quá kỳ vọng và cải lương ^^

 

@kedensau : bạn cần biết cái Val thu được nó là cái gì sau khi đọc file dữ liệu đã. Cách kiểm tra mình có nói rồ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

Em xin chân thành cảm ơn những ý kiến đóng góp của các anh.

Em mới học làm lisp,tài liệu nghiên cứu cũng sơ sài nên còn nhiều chỗ ko biết.Mong các anh thông cảm ạ.

Các anh cho em hỏi chỗ này tí.Ở cái hàm này:(apply 'draw (append val (list pt)))

là trả lại list các biến của hàm draw nhưng tại sao lại lấy list của pt nhỉ,theo như trong lisp thì pt chỉ là 1 điểm để bắt đầu từ đó vẽ mà.

Em hiểu như thế ko biết có đúng ko nữa,mong các anh giúp đỡ.

Em xin chân thành cảm ơn ạ.

P/s :các anh có tài liệu nào giải thích ý nghĩa của các hàm trên thì cho em tham khảo vớ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

Chú không đọc bài #42 à ^^

Chỉ có đoạn này trả về 1 list : (append val (list pt))

Trong lisp trước thì hàm draw yêu cầu đối số cuối cùng là 1 điểm. Val thì trả về các đối số khác đằng trước

=> append val + pt = toàn bộ đối số cần thiết cho hàm draw.

pt là tọa độ 1 điểm, có dạng (x y z)

Hàm append có tác dụng nối 2 list, tuy nhiên nếu để nguyên thì kết quả thu về sẽ là (val x y z). Phải thêm list đằng trước để kết quả thu về là (val (x y z)), như vậy mới đúng yêu cầu của hàm

- Tất cả các hàm trên đều có trong Help

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

Anh xem giúp cho em chương trình này.Em vẫn giữ nguyên hàm của anh ketxu,em chỉ thay cái hàm tính ebows45 bằng 1 hàm khác có nhiều biến hơn là nó báo lỗi.

 ;Xu ly khi pick chon loai Elbowls
 (action_tile "mylist"
  "(add_lst \"NPS\" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadr (assoc $value lst))) 3)"
 )
 (action_tile "accept" "(setq ret  (list (get_tile \"mylist\")
      			(car (setq tmp
      			(cadr
      			(nth (atoi (get_tile \"NPS\")) (cadr (assoc (get_tile \"mylist\") lst))))))
      			(last tmp)
      			))(done_dialog)")
ret
)

@kedensau : bạn cần biết cái Val thu được nó là cái gì sau khi đọc file dữ liệu đã. Cách kiểm tra mình có nói rồi

Nếu đọc mấy dòng trên thôi thì sẽ biết ngay vấn đề, nhưng gợi ý kedensau chưa để ý ra :)

Vì hàm đầu tiên chỉ có 2 đối số, nên ketxu đã ăn gian trí nhớ bằng cách lấy list

("loại" + giá trị đầu + giá trị cuối) của list giá trị (ở đây chính là biến tmp) để đề phòng file dữ liệu có nhiều hơn số biến mong đợi

Khi sử dụng với hàm yêu cầu nhiều đối số hơn và đã chuẩn số lượng cột, hãy ôm nguyên cả biến tmp vào giá trị trả về

Ví dụ :

 

(defun DCL ( lstType / fl ret dcl_id Return# add_lst )
(defun add_lst (key lst method)
(start_list key method)
(mapcar 'add_list lst)
(end_list)
)
 (vl-load-com)
 (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
 (setq  ret (open fl "w"))
 (mapcar
'(lambda (x) (write-line x ret))
(list
 " mip_msg : dialog { label = \"Elbowls\";"
 " : boxed_column { label = \"Chon loai Elbowls\";"
 " : list_box { key = \"mylist\";width = 17;}"
 " } "
 " : boxed_column { label = \"Chon loai NPS\";"
 " : popup_list {key = \"NPS\"; width = 17; height = 8;} "
 " } "
 " : row { "
 " : button {label = \"OK\"; key = \"accept\"; width = 10; fixed_width = true;} "
 " : button {label = \"Cancel\"; is_cancel = true; key = \"cancel\"; width = 10; fixed_width = true;}"
 " } "
 "} "
) 
 )
 (setq ret (close ret))
 (if (and (not (minusp (setq dcl_id (load_dialog fl))))
	(new_dialog "mip_msg" dcl_id)
  )
(progn
 (add_lst "mylist" '("Elbowls 45" "Elbowls 90" "Elbowls 180") 3)
 (set_tile "mylist" "0")
 (add_lst "NPS" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadadr lst)) 3) ;Chu y dong khoi tao lay du lieu Elbowls 45
 ;Xu ly khi pick chon loai Elbowls
 (action_tile "mylist"
  "(add_lst \"NPS\" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadr (assoc $value lst))) 3)"
 )
 (action_tile "accept"
 "(setq ret  (cons (get_tile \"mylist\")
  (cadr
  (nth (atoi (get_tile \"NPS\")) (cadr (assoc (get_tile \"mylist\") lst))))
  )
  )(done_dialog)")
 (start_dialog)
)
 )
 (unload_dialog dcl_id)
 (vl-file-delete fl)
ret
)

(defun c:fla (/  PR RL  lst0 lst1 lst2  val pt lst)
;Lay ten file
(or  fn0
 (setq fn0 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn0 (getfiled "Chon file chua so lieu Class300 " "" "txt" 2)))
(or  fn1
 (setq fn1 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn1 (getfiled "Chon file chua so lieu Class400 " "" "txt" 2)))
(or  fn2
 (setq fn2 (findfile "Nhap ten file mac dinh vao day"))
 (setq fn2 (getfiled "Chon file chua so lieu Class600 " "" "txt" 2)))
;Het lay ten file
(if (and fn0 fn1 fn2)
 (progn
; Doc tung file dua vao list
  (setq PR (open fn0 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst0 (append lst0 (list (list (car RL)(cdr RL)))) 
  )
)
(setq lst0 (list "0" lst0))
(close PR)
; Doc file fn1 dua vao list
  (setq PR (open fn1 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst1 (append lst1 (list (list (car RL)(cdr RL)))) 
  )
)
(setq lst1 (list "1" lst1))
(close PR)
(setq PR (open fn2 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst2 (append lst2 (list (list (car RL)(cdr RL)))) 
  )
)
(setq lst2 (list "2" lst2))
(close PR)
(setq lst (list lst0 lst1 lst2)) ;Lay list du lieu dang (("0" (NPS (OD B))(NPS (OD B))...)("1" (NPS (OD B))(NPS (OD B))...)...)
(if
(and (setq val (DCL lst))
  (setq pt (getpoint "\nDiem chen:"))
)
(apply 'fla (append val (list pt)))
(princ "Loi")
)
);Het Progn
(princ "\nThieu file")
)
(princ)
)


;--------------------------------------------------------------------------------
(defun FLA(Loai D X G tsmall WT T1 A r1 C D1 p1 / OldOS)
 (princ "\nYou are using copyright by Nguyen Thanh Luan-CPE-Doosan vina")
 (setq   
P2(polar P1 pi G)
P3(polar P2 (* pi 1.5) 6.35)
P4(polar P3 pi (/(- D G) 2))
P5(polar P4 (* pi 1.5) tsmall)
P6(polar P5 0.0 (/(- D X) 2))
P7 (list (+ (car P6) (/ (- X A) 2)) (- (cadr P6) (- T1 tsmall)) (caddr p6))
P8(polar P7 0.0 A)
P9(list (+ (car P8) (/ (- X A) 2)) (+ (cadr P8) (- T1 tsmall)) (caddr p8))
P10(polar P9 0.0 (/(- D X) 2))
P11(polar P10 (/ pi 2) tsmall)
P12(polar P11 pi (/(- D G) 2))
P13(polar P1 pi (/(- G (- A (* WT 2))) 2))
P14(polar P13 (* pi 1.5) (+ T1 6.35))
P15(polar P13 pi (- A (* WT 2)))
P16(polar P15 (* pi 1.5) (+ T1 6.35))
P17(polar P3 pi (/(- C G D1) 2))
P18(polar P17 (* pi 1.5) tsmall)
P19(polar P17 pi D1)
P20(polar P19 (* pi 1.5) tsmall)
P21(polar P12 0.0 (/(- C G D1) 2))
P22(polar P21 (* pi 1.5) tsmall)
P23(polar P21 0.0 D1)
P24(polar P23 (* pi 1.5) tsmall)
P25(list (- (car P24) (/ D1 2)) (- (cadr P24) 10) (caddr p24))
P26(polar P25 (* pi 0.5) (+ tsmall 20))
P27(list (- (car P8) (/ A 2)) (- (cadr P8) 15) (caddr p8))
P28(polar P27 (* pi 0.5) (+ T1 36.35))
P29(list (- (car P18) (/ D1 2)) (- (cadr P18) 10) (caddr p18))
P30(polar P29 (* pi 0.5) (+ tsmall 20))
)
 (setq OldOs(getvar "osmode"))
 (setvar "osmode" 0)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "line" P1 P2 P3 P4 P5 "")
 (command "line" P5 P6 "")
 (setq A1 (entlast))
 (command "line" P6 P7 "")
 (setq B1 (entlast))
 (command "line" P7 P8 "")
 (command "line" P8 P9 "")
 (setq C1 (entlast))
 (command "line" P9 P10 "")
 (setq D1 (entlast))
 (command "line" P10 P11 P12 p1 "")
 (command "line" P13 P14"")
 (command "line" P15 P16"")
 (command "line" P17 P18"")
 (command "line" P19 P20"")
 (command "line" P21 P22"")
 (command "line" P23 P24"")
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER2" "" "")
 (command "line" P25 P26"")
 (command "line" P27 P28"")
 (command "line" P29 P30"")
 (command "fillet" "r" r1 "" "fillet" A1 B1 )
 (command "fillet" "" "fillet" C1 D1 )
 (command "zoom" "w" P26 P29)
 (setvar "osmode" OldOs)
 (princ)
 )

  • 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 anh,em có một đoạn lisp thế này :

(defun DCL ( lstType / fl ret dcl_id Return# add_lst )
(defun add_lst (key lst method)
(start_list key method)
(mapcar 'add_list lst)
(end_list)
)
 (vl-load-com)
 (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
 (setq  ret (open fl "w"))
 (mapcar
'(lambda (x) (write-line x ret))
(list
 " mip_msg : dialog { label = \"ANSI B16.5 FORGED FLANGES\";"
 " : boxed_column { label = \"Select The Type Of Flanges\";"
 " : list_box { key = \"mylist\";width = 20;}"
 " } "
 " : boxed_column { label = \"Select Nominal Pipe Size\";"
 " : popup_list {key = \"NPS\"; width = 17; height = 8;} "
 " } "
 " : boxed_column { label = \"Select Wall Thickness\";"
 " : edit_box {label = \"Wall Thichkness : t =\"; key = \"Tlon\"; edit_width = 8;}"
 " } "
 " : row { "
 " : button {label = \"OK\"; key = \"accept\"; width = 10; fixed_width = true;} "
 " : button {label = \"Cancel\"; is_cancel = true; key = \"cancel\"; width = 10; fixed_width = true;}"
 " } "
 "} "
)
 )
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 (Defun Get_lwn1()
 (setq Tlon (atof (get_tile "Tlon"))
)
)
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 (setq ret (close ret))
 (if (and (not (minusp (setq dcl_id (load_dialog fl))))
 (new_dialog "mip_msg" dcl_id)
  )
(progn
 (add_lst "mylist" '("CLASS 150 FLANGES UNDER 8 INCH" "CLASS 300 FLANGES UNDER 8 INCH" "CLASS 400 FLANGES UNDER 8 INCH" "CLASS 600 FLANGES UNDER 8 INCH" "CLASS 900 FLANGES UNDER 8 INCH" "CLASS 1500 FLANGES UNDER 8 INCH" "CLASS 150 FLANGES 10-24 INCH" "CLASS 300 FLANGES 10-24 INCH" "CLASS 400 FLANGES 10-24 INCH" "CLASS 600 FLANGES 10-24 INCH" "CLASS 900 FLANGES 10-24 INCH" "CLASS 1500 FLANGES 10-24 INCH") 3)
 (set_tile "mylist" "0")
 (add_lst "NPS" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadadr lst)) 3)
 (action_tile "mylist"
  "(add_lst \"NPS\" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadr (assoc $value lst))) 3)"
 )
 (action_tile "accept"
 "(setq ret  (cons (get_tile \"mylist\")
  (cadr
  (nth (atoi (get_tile \"NPS\")) (cadr (assoc (get_tile \"mylist\") lst))))
  )
  )(Get_lwn1)(done_dialog)")
 (start_dialog)
)
 )
 (unload_dialog dcl_id)
 (vl-file-delete fl)
ret
)
(defun c:wn (/  PR RL  lst0 lst1 lst2 lst3 lst4 lst5 lst40 lst41 lst42 lst43 lst44 lst45 val pt lst)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(or  fn0
 (setq fn0 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 150.txt"))
 (setq fn0 (getfiled "Data Welding Neck Under 8 inch class 150" "" "txt" 2)))
(or  fn1
 (setq fn1 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 300.txt"))
 (setq fn1 (getfiled "Data Welding Neck Under 8 inch class 300" "" "txt" 2)))
(or  fn2
 (setq fn2 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 400.txt"))
 (setq fn2 (getfiled "Data Welding Neck Under 8 inch class 400" "" "txt" 2)))
(or  fn3
 (setq fn3 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 600.txt"))
 (setq fn3 (getfiled "Data Welding Neck Under 8 inch class 600" "" "txt" 2)))
(or  fn4
 (setq fn4 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 900.txt"))
 (setq fn4 (getfiled "Data Welding Neck Under 8 inch class 900" "" "txt" 2)))
(or  fn5
 (setq fn5 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 1500.txt"))
 (setq fn5  (getfiled "Data Welding Neck Under 8 inch class 1500" "" "txt" 2)))
(or  fn40
 (setq fn40 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 150.txt"))
 (setq fn40 (getfiled "Data Welding Neck Under 8 inch class 150" "" "txt" 2)))
(or  fn41
 (setq fn41 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 300.txt"))
 (setq fn41 (getfiled "Data Welding Neck Under 8 inch class 300" "" "txt" 2)))
(or  fn42
 (setq fn42 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 400.txt"))
 (setq fn42 (getfiled "Data Welding Neck Under 8 inch class 400" "" "txt" 2)))
(or  fn43
 (setq fn43 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 600.txt"))
 (setq fn43 (getfiled "Data Welding Neck Under 8 inch class 600" "" "txt" 2)))
(or  fn44
 (setq fn44 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 900.txt"))
 (setq fn44 (getfiled "Data Welding Neck Under 8 inch class 900" "" "txt" 2)))
(or  fn45
 (setq fn45 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 1500.txt"))
 (setq fn45  (getfiled "Data Welding Neck Under 8 inch class 1500" "" "txt" 2)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(if (and fn0 fn1 fn2 fn3 fn4 fn5 fn40 fn41 fn42 fn43 fn44 fn45)
 (progn
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq PR (open fn0 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst0 (append lst0 (list (list (car RL)(cdr RL))))
  )
)
(setq lst0 (list "0" lst0))
(close PR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq PR (open fn1 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst1 (append lst1 (list (list (car RL)(cdr RL))))
  )
)
(setq lst1 (list "1" lst1))
(close PR)
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn2 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst2 (append lst2 (list (list (car RL)(cdr RL))))
  )
)
(setq lst2 (list "2" lst2))
(close PR)
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq PR (open fn3 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst3 (append lst3 (list (list (car RL)(cdr RL))))
  )
)
(setq lst3 (list "3" lst3))
(close PR)
  ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq PR (open fn4 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst4 (append lst4 (list (list (car RL)(cdr RL))))
  )
)
(setq lst4 (list "4" lst4))
(close PR)
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq PR (open fn5 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst5 (append lst5 (list (list (car RL)(cdr RL))))
  )
)
(setq lst5 (list "5" lst5))
(close PR)
(setq PR (open fn40 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst40 (append lst40 (list (list (car RL)(cdr RL))))
  )
)
(setq lst40 (list "6" lst40))
(close PR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq PR (open fn41 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst41 (append lst41 (list (list (car RL)(cdr RL))))
  )
)
(setq lst41 (list "7" lst41))
(close PR)
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn42 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst42 (append lst42 (list (list (car RL)(cdr RL))))
  )
)
(setq lst42 (list "8" lst42))
(close PR)
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq PR (open fn43 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst43 (append lst43 (list (list (car RL)(cdr RL))))
  )
)
(setq lst43 (list "9" lst43))
(close PR)
  ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq PR (open fn44 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst44 (append lst44 (list (list (car RL)(cdr RL))))
  )
)
(setq lst44 (list "10" lst44))
(close PR)
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (setq PR (open fn45 "r") RL (read-line PR))
  (while  (setq RL (read-line PR))
  (setq   RL (read (strcat "(" RL ")"))
  lst45 (append lst45 (list (list (car RL)(cdr RL))))
  )
)
(setq lst45 (list "11" lst45))
(close PR)
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq lst (list lst0 lst1 lst2 lst3 lst4 lst5 lst40 lst41 lst42 lst43 lst44 lst45))
(if
(and (setq val (DCL lst))
  (setq pt (getpoint "\nStart Point:"))
)
(apply 'wna (append val (list pt)))
(princ "Error")
)
)
(princ "\nMissing File")
)
(princ)
)
;--------------------------------------------------------------------------------
(defun wna (Loai D X G tnho T1 A C D1 p1 / OldOS)
 (setq OldOs(getvar "osmode"))
  (setvar "osmode" 0)
(setq
P2(polar P1 0.0 (/ G 2))
P3(polar P2 (/ pi 2) 1.6)
P4(polar P3 0.0 (/ (- D G) 2))
P5(polar P4 (/ pi 2) tnho)
P6(polar P5 pi (/ (- D X) 2))
P7(polar P1 (/ pi 2) (+ T1 1.6))
P8(polar P7 0.0 (/ A 2))
P9(polar P8 (* pi 1.5) 6)
P10(polar P8 pi Tlon)
P11(polar P10 (* pi 1.5) (+ T1 1.6))
P12(polar P3 0.0 (/ (- C G) 2))
P13(polar P12 pi (/ D1 2))
P14(polar P13 (/ pi 2) tnho)
P15(polar P12 0.0 (/ D1 2))
P16(polar P15 (/ pi 2) tnho)
P17(polar P1 (* pi 1.5) (/ T1 8))
P18(polar P7 (/ pi 2) (/ T1 8))
P19(polar P12 (* pi 1.5) (/ tnho 8))
P20(polar P12 (/ pi 2) (+ tnho (/ tnho 8)))
P21(polar P1 0.0 (/ D 2))
P22(polar P7 pi (/ D 2))
)
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "line" P1 P2 P3 P4 P5 P6 P9 P8 P7 "")
 (command "line" P10 P11 "")
 (command "line" P13 P14 "")
 (command "line" P15 P16 "")
 (COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER2" "" "")
 (command "line" P17 P18 "")
 (command "line" P19 P20 "")
 (COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
 (command "zoom" "a" "")
 (command "zoom" "w" P21 P22)
 (COMMAND "MIRROR" "BOX" P21 P7 "" P1 P7 "" )
(setvar "osmode" OldOs)
 (princ)
)

 

Nếu viết như thế này thì em thấy cách lấy file dữ liệu có vẻ dài quá,có cách nào để làm ngắn gọn lại không vậy các anh ??

 

Thanks !!!!

 

- Đọc code lisp có lẽ phần đầu là ketxu viết. Phần lấy dữ liệu bạn biến báo đi, tuy nhiên áp dụng 1 cách quá máy móc. Trước đây code chỉ yêu cầu 2 file nên ketxu k viết hàm con. Nay bạn cần đến 7 8 cái lận. Thế nếu 100 cái thì code của bạn trông ra sao ?Hãy nhớ tất cả các thao tác có thể lặp đi lặp lại nhiều lần thì nên được cho vào hàm con, tất cả các biến lúc này sẽ biến thành đối số. Trong code của bạn đoạn này :

Trích dẫn

 

(or fn0 (setq fn0 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 150.txt")) (setq fn0 (getfiled "Data Welding Neck Under 8 inch class 150" "" "txt" 2)))

;......

(setq PR (open fn0 "r") RL (read-line PR)) (while (setq RL (read-line PR)) (setq RL (read (strcat "(" RL ")")) lst0 (append lst0 (list (list (car RL)(cdr RL)))) ))(setq lst0 (list "11" lst0))(close PR)

 

của bạn lặp đi lặp lại quá nhiều. Hãy viết lại thành 1 hàm con với đối số fn và string "11". Hàm trả về lst0

Phần này để dành cho bạn

 

Vâng,đúng là đoạn Lisp này em có nhờ anh viết.

Nhưng cái đoạn anh nói ở trên em vẫn ko hiểu rõ lắm cách viết lại thành 1 hàm con đó. :wacko: :wacko:

Các anh Pro giúp em vớ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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×