Chuyển đến nội dung
Diễn đàn CADViet
Học AutoCAD Online cùng CADViet
kedensau88

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

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

Các anh ơi cho em hỏi cái này.Giả sử em muốn vẽ 1 thư viện hình chữ nhật với các số liệu có sẵn trong file txt này mà khi vẽ thì chỉ cần gõ lệnh "chunhat" sau đó chỉ cần nhập số loại hình chữ nhật (ví dụ: loại 1,2,3...) là nó ra luôn hình chữ nhật với các kích thước tương ứng đó.Vậy nhờ các anh viết dùm em 1 cái lisp như vậy dc ko ạ.

Em mới học lập trình lisp nên cũng còn chưa biết nhiều.

Cảm ơn các anh nhiều.

436f3c52090b0fc6bacfed80dd5bf908_38076571.chunhat.jpg

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 cái này.Giả sử em muốn vẽ 1 thư viện hình chữ nhật với các số liệu có sẵn trong file txt này mà khi vẽ thì chỉ cần gõ lệnh "chunhat" sau đó chỉ cần nhập số loại hình chữ nhật (ví dụ: loại 1,2,3...) là nó ra luôn hình chữ nhật với các kích thước tương ứng đó.Vậy nhờ các anh viết dùm em 1 cái lisp như vậy dc ko ạ.

Em mới học lập trình lisp nên cũng còn chưa biết nhiều.

Cảm ơn các anh nhiều.

436f3c52090b0fc6bacfed80dd5bf908_38076571.chunhat.jpg

Đây bạn! Nhưng lần sau đừng làm "kẻ đến sau" nữa nhé!

P/S (13h 21/11/2011): đã bổ sung hàm (vl-load-com) còn thiếu.

;Doan Van Ha - CADViet.com
;Ve Rectangle theo file so lieu *.txt
(defun C:HA( / lst stt pt loai dai rong)
(vl-load-com)
(BAT_DAU)
(command "undo" "begin")
(acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
(if (setq fn (getfiled "Chon file chua so lieu" "" "txt" 2))
 (progn
  (setq PR (open fn "r") RL (read-line PR))
  (while (setq RL (read-line PR))
(setq lst (cons RL lst)))
  (setq lst (reverse lst))
  (close PR)))
(initget 7) (setq stt (getint "\nChon STT cua hinh chu nhat: "))
(initget 1) (setq pt (getpoint "\nPich diem goc trai duoi cua hinh chu nhat: "))
(foreach n lst
 (setq loai (atoi (TRAI_STR n "\t")))
 (setq dai (atof (GIUA_STR n "\t" "\t")))
 (setq rong (atof (PHAI_STR (PHAI_STR n "\t") "\t")))
 (if (= loai stt)
  (command "rectangle" pt (polar (polar pt 0 dai) (/ pi 2) rong))))
(acet-sysvar-restore)
(command "undo" "end")
(KET_THUC)
(princ))
(defun FINDSTR (str sym / z find) (setq z 0) (while (and (/= find sym) (<= z (- (strlen str) (strlen sym)))) (setq z (1+ z)) (setq find (substr str z (strlen sym)))) (if (= find sym) z nil))
(defun TRAI_STR(str str1) (if (acet-str-find str1 str) (substr str 1 (- (acet-str-find str1 str) 1))))
(defun PHAI_STR(str str1) (if (TRAI_STR str str1) (substr str (+ 1 (strlen str1) (strlen (TRAI_STR str str1))))))
(defun GIUA_STR(str str1 str2) (if (PHAI_STR str str1) (TRAI_STR (PHAI_STR str str1) str2)))
(defun BAT_DAU()
(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)))
(vla-StartUndoMark AcDoc)
(setq err *error* *error* KHI_LOI))
(defun KET_THUC()
(acet-sysvar-restore)
(vla-EndUndoMark AcDoc)
(setq *error* err))
(defun KHI_LOI(msg)
(acet-sysvar-restore)
(vla-EndUndoMark AcDoc)
(redraw)
(command "u")
(princ (strcat "\n" msg ", Reset System Variables\n"))
(setq *error* err))

  • 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

Chào anh Hà !

Tiện đây cho em hỏi luôn cái này với. Giả sử em muốn vẽ về đầu báo khói cho hệ thống báo cháy địa chỉ như sau: Em vẽ một đầu báo khói có tên là A1. Do số lượng đầu báo khói lớn nên em muốn cho tiện là khi em copy A1 thành bản mới thì đồng thời bảng copy đó có tên là A2, A3, A4... chẳng hạng, thì có lệnh gì làm được điều đó không ?

 

Có, viết được, và đã có! Nhưng bạn chưa trả lời trả vốn gì về cái lisp trước cả hè!

P/S: srr bạn vì tôi nhầm với chủ topic là kedensau88. Vấn đề bạn hỏi thì bạn có thể tìm trên CADViet này. Mà hỏi vấn đề khác thì nên qua đúng topic đó cho dễ theo dõi hơn 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
Anh Hà ơi,sau khi em gõ lệnh HA xong thì nó báo lỗi thế này nè : Command: ha ; error: no function definition: VLAX-GET-ACAD-OBJECT

Hề hề hề,

Hãy bổ sung (vl-load-com) vào đầu lisp.

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ó, viết là được, và đã có! Nhưng bạn chưa trả lời trả vốn gì về cái lisp trước cả hè!

Hề hề hề,

Bác này nhanh tay thiệt, nhưng mà bác nhầm đối tượng rùi, Bài post bác trích hổng phải của chủ thớt đâ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

Anh ơi,cho em hỏi,giả sử em có 1 chương trình vẽ hình chữ nhật như thế này,em muốn đưa chương trình này vào cái chương trình của anh để thay thế cho câu lệnh này :"(command "rectangle" pt (polar (polar pt 0 dai) (/ pi 2) rong))))" thì em phải thay như thế nào cho đúng ạ ?

 

(defun C:CHUNHAT(/ W H1 P1 P2 P3 P4 OldOS)

(setq

dai(getreal "\nChieu dai=")

rong(getreal "\nChieu rong=")

P1(getpoint "\n Diem chuan:")

P2(polar P1 0.0 dai)

P3(polar P2 (/ pi 2) rong)

P4(polar P3 pi dai)

)

(setq OldOs(getvar "osmode"))

(setvar "osmode" 0)

(command "line" P1 P2 P3 P4 "c")

(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 ơi,cho em hỏi,giả sử em có 1 chương trình vẽ hình chữ nhật như thế này,em muốn đưa chương trình này vào cái chương trình của anh để thay thế cho câu lệnh này :"(command "rectangle" pt (polar (polar pt 0 dai) (/ pi 2) rong))))" thì em phải thay như thế nào cho đúng ạ ?

 

(defun C:CHUNHAT(/ W H1 P1 P2 P3 P4 OldOS)

(setq

dai(getreal "\nChieu dai=")

rong(getreal "\nChieu rong=")

P1(getpoint "\n Diem chuan:")

P2(polar P1 0.0 dai)

P3(polar P2 (/ pi 2) rong)

P4(polar P3 pi dai)

)

(setq OldOs(getvar "osmode"))

(setvar "osmode" 0)

(command "line" P1 P2 P3 P4 "c")

(setvar "osmode" OldOs)

(princ)

)

 

Hình như bạn chưa thử chạy chương trình mà tôi viết thì phải. Bạn đang muốn tự động hoá. Tôi tự động hoá cho bạn. Có tự động hoá rồi thì bạn xoay lại thủ công. Chương trình của tôi cũng vẽ hình chữ nhật (bằng lệnh rectangle) như bạn (vẽ bằng lệnh line) mà thôi. Bạn cứ chạy thử đi xem có tiện không đã nhé!

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

Anh ơi,cho em hỏi,giả sử em có 1 chương trình vẽ hình chữ nhật như thế này,em muốn đưa chương trình này vào cái chương trình của anh để thay thế cho câu lệnh này :"(command "rectangle" pt (polar (polar pt 0 dai) (/ pi 2) rong))))" thì em phải thay như thế nào cho đúng ạ ?

 

(defun C:CHUNHAT(/ W H1 P1 P2 P3 P4 OldOS)

(setq

dai(getreal "\nChieu dai=")

rong(getreal "\nChieu rong=")

P1(getpoint "\n Diem chuan:")

P2(polar P1 0.0 dai)

P3(polar P2 (/ pi 2) rong)

P4(polar P3 pi dai)

)

(setq OldOs(getvar "osmode"))

(setvar "osmode" 0)

(command "line" P1 P2 P3 P4 "c")

(setvar "osmode" OldOs)

(princ)

)

Hề hề hề,

Thay thế nào cho đúng ư???

Hoàn toàn không đơn giản như bạn nghĩ vì mỗi người viết lisp có một tư duy khác nhau. Từ cách đặt tên biến tới việc đặt các loại biến toàn cục và cục bộ. Nếu bạn chưa hiểu hết về những vấn đề này mà cứ thay lung tung vào cho nó khoái thì cái việc thay thế ấy sẽ hại bạn đó. Ngay cả việc lựa chọn thuật toán để hoàn thành nhiệm vụ của lisp cũng có nhiều phương án lắm chứ không phải lisp nào cũng giống nhau đâu, tùy vào cách tư duy của người làm lisp. Có thể có những lisp có chung đầu vào và đầu ra nhưng cách xử lý trong lisp lại hoàn toàn khác nhau. Vì thế hãy cẩn trọng.

Cách tốt nhất là bạn hãy nên sử dụng các lisp sưu tầm này độc lập với nhau cho tới khi bạn có đủ khả năng đọc và hiểu được nội dung của từng câu lệnh có trong lisp. Khi đó hãy nghĩ đến việc ghép các lisp để dùng bạn ạ.

Việc ghép lisp trước hết bạn cần phải hiểu về các biến được sử dụng trong các lisp đó và phải đồng nhất các biến này đã. Sau đó mới nói chuyện tới việc vận dụng từng câu lệnh cho phù hợp bạn ạ.

 

Trừ phi chính tác giả của lisp là người tiến hành ghép, còn nói chung đây là việc hoàn toàn không ngon ăn tí nào.

 

Hề hề hề, vài lời khó nghe, mong bạn chớ giận.

Hề hề hề....

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ình như bạn chưa thử chạy chương trình mà tôi viết thì phải. Bạn đang muốn tự động hoá. Tôi tự động hoá cho bạn. Có tự động hoá rồi thì bạn xoay lại thủ công. Chương trình của tôi cũng vẽ hình chữ nhật (bằng lệnh rectangle) như bạn (vẽ bằng lệnh line) mà thôi. Bạn cứ chạy thử đi xem có tiện không đã nhé!

Thân thương!

Vâng,em đã chạy chuơng trình của anh rồi.

Đúng là rất tiện lơi nhưng tại vì em mới học lisp nên chưong trình của anh em ko dc hiểu cho lắm.

Em muốn nhờ anh sửa lại chuơng trình vẫn vẽ theo kiểu chỉ cần nhập loại hình chữ nhật nhưng không dùng lệnh rectangle mà vẽ theo kiểu thủ công để em có thể dựa vào đây viết 1 số chuơng trình khác tuơng tự ạ.Vì đây là hình chữ nhật nên mới dùng dc lệnh Rectangle luôn,còn nếu có những hình có hình dạng khác thì em không biết làm thế nào ạ.

Cảm ơn 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

Vâng,em đã chạy chuơng trình của anh rồi.

Đúng là rất tiện lơi nhưng tại vì em mới học lisp nên chưong trình của anh em ko dc hiểu cho lắm.

Em muốn nhờ anh sửa lại chuơng trình vẫn vẽ theo kiểu chỉ cần nhập loại hình chữ nhật nhưng không dùng lệnh rectangle mà vẽ theo kiểu thủ công để em có thể dựa vào đây viết 1 số chuơng trình khác tuơng tự ạ.Vì đây là hình chữ nhật nên mới dùng dc lệnh Rectangle luôn,còn nếu có những hình có hình dạng khác thì em không biết làm thế nào ạ.

Cảm ơn anh nhiều.

Nếu nhằm mục đích như thế, thì đây!

;Doan Van Ha - CADViet.com
;Ve rectangle theo file so lieu *.txt
(defun C:HA( / lst stt pt loai dai rong)
(command "undo" "begin")
(acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
(if (or fn (setq fn (getfiled "Chon file chua so lieu" "" "txt" 2)))
 (progn
  (setq PR (open fn "r") RL (read-line PR))
  (while (setq RL (read-line PR))
(setq lst (cons RL lst)))
  (setq lst (reverse lst))
  (close PR)))
(initget 7) (setq stt (getint "\nChon STT cua hinh chu nhat: "))
(initget 1) (setq p1 (getpoint "\nPich diem goc trai duoi cua hinh chu nhat: "))
(foreach n lst
 (setq loai (atoi (TRAI_STR n "\t")))
 (setq dai (atof (GIUA_STR n "\t" "\t")))
 (setq rong (atof (PHAI_STR (PHAI_STR n "\t") "\t")))
 (if (= loai stt)
  (progn
(setq p2 (polar p1 0 dai) p3 (polar p2 (/ pi 2) rong) p4 (polar p3 pi dai))
(command "line" p1 p2 p3 p4 "c"))))
;   (command "rectangle" p1 (polar (polar p1 0 dai) (/ pi 2) rong))))
(acet-sysvar-restore)
(command "undo" "end")
(princ))
;-----
(defun FINDSTR (str sym / z find) (setq z 0) (while (and (/= find sym) (<= z (- (strlen str) (strlen sym)))) (setq z (1+ z)) (setq find (substr str z (strlen sym)))) (if (= find sym) z nil))
(defun TRAI_STR(str str1) (if (acet-str-find str1 str) (substr str 1 (- (acet-str-find str1 str) 1))))
(defun PHAI_STR(str str1) (if (TRAI_STR str str1) (substr str (+ 1 (strlen str1) (strlen (TRAI_STR str str1))))))
(defun GIUA_STR(str str1 str2) (if (PHAI_STR str str1) (TRAI_STR (PHAI_STR str str1) str2)))

  • 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ạy được chuơng trình rồi.Anh cho em hỏi thêm cái này nữa:

- Giả sử nếu có từ nhiều biến (4 biến trở lên) thì phải khai báo kiểu gì ạ?

- Làm thế nào để khi mình chạy thì chuơng trình tự động chọn file txt luôn được ko ạ,chứ mỗi lần chạy lệnh lại phải chọn file txt em thấy cũng hơi bất tiện.

Mong anh giúp đỡ em.

Em làm phiền anh nhiều quá,mong anh thông cảm cho em với nha.

Em cảm ơn anh nhiều ạ.Chúc anh luôn vui vẻ!!!

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ạy được chuơng trình rồi.Anh cho em hỏi thêm cái này nữa:

- Giả sử nếu có từ nhiều biến (4 biến trở lên) thì phải khai báo kiểu gì ạ?

- Làm thế nào để khi mình chạy thì chuơng trình tự động chọn file txt luôn được ko ạ,chứ mỗi lần chạy lệnh lại phải chọn file txt em thấy cũng hơi bất tiện.

Mong anh giúp đỡ em.

Em làm phiền anh nhiều quá,mong anh thông cảm cho em với nha.

Em cảm ơn anh nhiều ạ.Chúc anh luôn vui vẻ!!!

Câu 1: bạn có thể nói rõ hơn, tôi chưa hiểu ý bạn?

Câu 2: đã sửa cho bạn ở trên.

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

Câu 1: bạn có thể nói rõ hơn, tôi chưa hiểu ý bạn?

Thân thương!

Chương trình em đưa cho anh chỉ có 2 biến là "dài" và "rộng"

Nếu một chương trình có nhiều biến hơn thì phải khai báo làm sao ạ ???

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

Chương trình em đưa cho anh chỉ có 2 biến là "dài" và "rộng"

Nếu một chương trình có nhiều biến hơn thì phải khai báo làm sao ạ ???

Thanks!!!!!

Bạn chú ý kẻo nhầm: topic này viết lisp theo y/c chứ không phải giải thích code lisp. Nếu tiện thì bạn sang bên topic Cùng nhau học lisp hoặc Hỏi về lisp thì tiện hơn, kẻo lạc đề dễ bị các Mod xoá lắm đấy. Riêng trường hợp này tôi trả lời cho bạn như sau:

Bài toán của bạn hiện đang có 3 biến (chứ không phải 2) là stt, dài, rộng. Khi lấy kết quả từng dòng sang lisp thì 3 biến này nằm trong 1 string, được cách nhau bởi từng "\t". Do đó nếu có n biến thì bạn dùng vòng lặp n lần để lấy từng giá trị bên trái của "\t" là được. Không biết khả năng code lisp của bạn ngang đâu nên hơi khó giải thích. Nếu cần, tôi có thể làm cho bạn 1 ví dụ, nhưng bạn phải cho biết các biến mà bạn lấy ra là để làm gì, nhằm tôi có thể đưa vào chương trình.

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

Nếu đã dùng acet bác ĐVH nên dùng (vl-remove "" (acet-str-to-list "\t" str)) để tách biến (hoặc thay "\t" bằng (chr 9), " ", (chr 32)

  • 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

Nếu đã dùng acet bác ĐVH nên dùng (vl-remove "" (acet-str-to-list "\t" str)) để tách biến (hoặc thay "\t" bằng (chr 9), " ", (chr 32)

Cám ơn Ket! Thực ra mấy cái thằng TRAI, PHAI, GIUA này viết thừ thời... chống Pháp (R14), nên giờ hoà bình rồi lôi ra xài cho nhanh vậy 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

Bạn chú ý kẻo nhầm: topic này viết lisp theo y/c chứ không phải giải thích code lisp. Nếu tiện thì bạn sang bên topic Cùng nhau học lisp hoặc Hỏi về lisp thì tiện hơn, kẻo lạc đề dễ bị các Mod xoá lắm đấy. Riêng trường hợp này tôi trả lời cho bạn như sau:

Bài toán của bạn hiện đang có 3 biến (chứ không phải 2) là stt, dài, rộng. Khi lấy kết quả từng dòng sang lisp thì 3 biến này nằm trong 1 string, được cách nhau bởi từng "\t". Do đó nếu có n biến thì bạn dùng vòng lặp n lần để lấy từng giá trị bên trái của "\t" là được. Không biết khả năng code lisp của bạn ngang đâu nên hơi khó giải thích. Nếu cần, tôi có thể làm cho bạn 1 ví dụ, nhưng bạn phải cho biết các biến mà bạn lấy ra là để làm gì, nhằm tôi có thể đưa vào chương trình.

Thân thương!

 

Em có 1 ví dụ vẽ cái hình này,anh có thể viết cho em 1 cái lisp để vẽ hình này tuơng tự như cái lisp vẽ hình chữ nhật ở trên được không ạ ,trong file txt sẽ chứa số liệu của "Loại hình,D,X,G,tsmall,WT,T1,A,r1,C,D1"

Cảm ơn anh nhiều nhiều.

Cho em xin lỗi nếu làm phiền anh nhiều quá nha.^^

anhso-121855_Flanges.jpg

Còn đây là cái chuơng trình thủ công em viết cho nó :

(defun C:FLA(/ D X G tsmall WT T1 A r1 C D1 OldOS)
  (setq
D(getreal "\nOutside Diameter: D=")
X(getreal "\nDiameter at Base of Hub: X=")
G(getreal "\nO.D of Raised Face: G=")
tsmall(getreal "\nThickness: tsmall=")
WT(getreal "\nWall Thickness: WT=")
T1(getreal "\nLength Thru Hub : T1=")
A(getreal "\nDiameter of Hub at Bevel: A=")
r1(getreal "\nRadius of Fillet: r1=")
C(getreal "\nBolt Circle Diameter: C=")
D1(getreal "\nDiameter of Holes: D1=")
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)
 )

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

....

[/code]

Chú tham khảo, cái gì cần thiết a ghi trong file hết rồi. Code vẽ lấy nguyên si của chú, đúng sai gì chú tự chịu :)

(defun c:test (/  PR RL lst)   
;Dat ten file mac dinh
;Neu trong may k co ten file mac dinh, CT yeu cau chon file
(or (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 (getint "\nType :"))
;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 3

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

...

(or (setq fn (findfile "Nhap ten file mac dinh vao day"))

(setq fn (getfiled "Chon file chua so lieu" "" "txt" 2)))

...

Ket sửa lại dòng code trên chút xíu kẻo nó bắt nhập file hoặc chọn file hoà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

Ket sửa lại dòng code trên chút xíu kẻo nó bắt nhập file hoặc chọn file hoài.

 

Tại sao thế bác nhỉ :)

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ại sao thế bác nhỉ :)

Ý là nếu dùng như thế thì hoặc file phải nằm trong thư mục "Support..." hoặc phải kèm Patt đầy đủ, còn nếu dùng

(if (or fn (setq fn (getfiled "Chon file chua so lieu" "" "txt" 2)))

thì không cần quan tâm vị trí của nó.

Mà thôi, cái này cũng tuỳ ý tưởng.

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

Ý là nếu dùng như thế thì hoặc file phải nằm trong thư mục "Support..." hoặc phải kèm Patt đầy đủ, còn nếu dùng

(if (or fn (setq fn (getfiled "Chon file chua so lieu" "" "txt" 2)))

thì không cần quan tâm vị trí của nó.

Mà thôi, cái này cũng tuỳ ý tưởng.

Thân thương!

 

"- Làm thế nào để khi mình chạy thì chuơng trình tự động chọn file txt luôn được ko ạ,chứ mỗi lần chạy lệnh lại phải chọn file txt em thấy cũng hơi bất tiện." (kedensau88)

+ Nếu trong máy người khác không có file ở đúng địa chỉ đó ?

=> Or.

Cái này là do yêu cầu của chính OP + bắt lỗi bác ạ.E nghĩ bác chưa test mà đoán nó là Getstring, hê hê ^^

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

 

"- Làm thế nào để khi mình chạy thì chuơng trình tự động chọn file txt luôn được ko ạ,chứ mỗi lần chạy lệnh lại phải chọn file txt em thấy cũng hơi bất tiện." (kedensau88)

+ Nếu trong máy người khác không có file ở đúng địa chỉ đó ?

=> Or.

Cái này là do yêu cầu của chính OP + bắt lỗi bác ạ.E nghĩ bác chưa test mà đoán nó là Getstring, hê hê ^^

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

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


×