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

[Yêu cầu] lisp Phun tọa độ các điểm từ file txt vào CAD

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

Bạn post file ví dụ có tất cả các dạng trên được không ạ?

 

Nói chung là mọi chuyện đều có thể.

Bạn vui lòng post file CAD có điểm ở định dạng Attribute

File đây ạ!

Mong bác giúp đỡ nhiều!

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
Bác Bách à!

Cháu cũng rất ngại khi phải nhờ bác chỉ bảo cháu đôi điều

Bác có thể viết lisp lấy được điểm toạ độ trên bản vẽ mà điểm ở định dạng Attribute (Trên bản vẽ hiển thị Text Số thứ tự, text độ cao và text mã Code)

bác có thể lấy được toạ độ X, Y, Z, STT và mã Code từ các điểm trên bản vẽ và ghi thành 1 file txt được không ạ.

Giả sử điểm đó mà cao độ bị đưa về "0" thì bác có thể lấy cao độ từ text Cao độ hiển thị trên màn hình dạng Attribute được không ạ?

Vấn đề này làm cháu đau đầu từ lâu

Cháu cảm ơn bác nhiều

Bạn thử Lisp : Xuất tọa độ và các Tag (STT, mã code) của Block Attribute ra file Text (Bao gồm : Số thứ tự, text mã Code, toạ độ X-Y-Z)

Truờng hợp cao độ Z của Block bị đưa về "0" thì lấy giá trị của Tag Cao độ (EL.EV).

(defun c:exTA(/ Caodo Des ent i obj pos ss str Stt tmp z zero)
 (vl-load-com)
 (princ "\nChon doi tuong can xuat thuoc tinh :" )
 (if (and
(setq ss (ssget (list (cons 0 "INSERT")(cons 66 1)(cons 2 "D_chitiet"))))
(setq tmp (getfiled "Ten file xuat toa do" (getvar "dwgprefix") "txt" 1))  )
   (progn
     (setq tmp (open tmp "a") i -1)
     (write-line "STT,DESCP,X,Y,Z" tmp)
     (while (setq ent (ssname ss (setq i (1+ i))))
(setq obj (vlax-ename->vla-object ent)
      pos (mapcar 'rtos (vlax-get obj 'InsertionPoint)))
(foreach att (vlax-invoke obj 'GetAttributes)
  (cond
    ( (= (vla-get-TagString att) "EL.EV")
      (setq Caodo (vla-get-TextString att)) )
    ( (= (vla-get-TagString att) "DESCP")
      (setq Des (vla-get-TextString att)) )
    ( (= (vla-get-TagString att) "POINT")
      (setq Stt (vla-get-TextString att)) ))  )
(if (and
      (= 0 (atof (setq z(caddr pos))))
      (/= 0 (atof Caodo)))
  (setq z Caodo))
(write-line (strcat Stt (chr 44) Des (chr 44)
		    (car pos) (chr 44) (cadr pos) (chr 44) z  )
  	    tmp))
     (close tmp)) )
 (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
Bạn thử Lisp : Xuất tọa độ và các Tag (STT, mã code) của Block Attribute ra file Text (Bao gồm : Số thứ tự, text mã Code, toạ độ X-Y-Z)

Truờng hợp cao độ Z của Block bị đưa về "0" thì lấy giá trị của Tag Cao độ (EL.EV).

(defun c:exTA(/ Caodo Des ent i obj pos ss str Stt tmp z zero)
 (vl-load-com)
 (princ "\nChon doi tuong can xuat thuoc tinh :" )
 (if (and
(setq ss (ssget (list (cons 0 "INSERT")(cons 66 1)(cons 2 "D_chitiet"))))
(setq tmp (getfiled "Ten file xuat toa do" (getvar "dwgprefix") "txt" 1))  )
   (progn
     (setq tmp (open tmp "a") i -1)
     (write-line "STT,DESCP,X,Y,Z" tmp)
     (while (setq ent (ssname ss (setq i (1+ i))))
(setq obj (vlax-ename->vla-object ent)
      pos (mapcar 'rtos (vlax-get obj 'InsertionPoint)))
(foreach att (vlax-invoke obj 'GetAttributes)
  (cond
    ( (= (vla-get-TagString att) "EL.EV")
      (setq Caodo (vla-get-TextString att)) )
    ( (= (vla-get-TagString att) "DESCP")
      (setq Des (vla-get-TextString att)) )
    ( (= (vla-get-TagString att) "POINT")
      (setq Stt (vla-get-TextString att)) ))  )
(if (and
      (= 0 (atof (setq z(caddr pos))))
      (/= 0 (atof Caodo)))
  (setq z Caodo))
(write-line (strcat Stt (chr 44) Des (chr 44)
		    (car pos) (chr 44) (cadr pos) (chr 44) z  )
  	    tmp))
     (close tmp)) )
 (princ))

Mình đã chọn đối tượng là các khối thuộc tính nhưng không thấy gì 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
Mình đã chọn đối tượng là các khối thuộc tính nhưng không thấy gì cả

Lisp chỉ chạy đuợc cho file CAD có Block tên là D_chitiet do bạn thanhduan2407 Post ở bài 28

Nếu bạn muốn sử dụng Lisp này vui lòng gửi file CAD có Block cần chọn, tui sẽ cập nhật sau.

  • 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
Lisp chỉ chạy đuợc cho file CAD có Block tên là D_chitiet do bạn thanhduan2407 Post ở bài 28

Nếu bạn muốn sử dụng Lisp này vui lòng gửi file CAD có Block cần chọn, tui sẽ cập nhật sau.

Nếu có thể cám ơn bác 100 lần cháu cũng cảm ơn bác nhiều

Cảm ơn bác.

Bác có thể xem giúp cháu lisp cháu chỉnh sửa xem lỗi ở đâu?

Cháu tìm mãi mà chưa tìm ra.

File đây ạ!

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
Lisp chỉ chạy đuợc cho file CAD có Block tên là D_chitiet do bạn thanhduan2407 Post ở bài 28

Nếu bạn muốn sử dụng Lisp này vui lòng gửi file CAD có Block cần chọn, tui sẽ cập nhật sau.

File Lisp

http://www.4shared.com/file/ej_NRC_f/rft_tuyetvoi.html

File cháu muốn phun điểm lên là file mẫu dạng: Stt X Y Z Code

Khi cháu insert Attribute "D_chitiet" thì mã code nó ko nhận, nếu mã Code là số thì nó nhận

Cảm ơn bác đã xem

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
File Lisp

http://www.4shared.com/file/ej_NRC_f/rft_tuyetvoi.html

File cháu muốn phun điểm lên là file mẫu dạng: Stt X Y Z Code

Khi cháu insert Attribute "D_chitiet" thì mã code nó ko nhận, nếu mã Code là số thì nó nhận

Cảm ơn bác đã xem

Bạn cần sửa hàm SPLIT để đổi giá trị Code thành kiểu String.

(defun c:RFT(/ data ten f h line str Code Stt X Y Z ELE Code Code1 Pnt);;;;;Read File Txt
(vl-load-com)
(defun Split (Str Char / Lst str pos)
 (while (setq pos (vl-string-search Char Str))
   (if (null Lst)
     (setq Lst (list (substr Str 1 pos)))
     (setq Lst (append Lst (list (read (substr Str 1 pos))))))
   (setq Str (substr Str (+ pos 2)) ))
 (setq Lst (append Lst (list Str)))  )  

 (if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
   (progn
     (setq f (open (findfile ten) "r"))
     (while
(setq Line (read-line f))	
(if (vl-string-search "\t" Line)
  (progn
    (setq data (split Line "\t" ))
    (setq Stt (nth 0 data))
    (setq X (nth 1 data))
    (setq Y (nth 2 data))
    (setq Z (nth 3 data))
    (setq Code (nth 4 data))	    
    (setq ELE (rtos z 2 2))
    (setq Pnt (list X Y Z))	    
    (command "insert"  "D_chitiet"  Pnt  1 1 0  Stt  ELE Code)	    ) ) ) ) )
 (command "zoom" "extents")
 (princ)
 )

Đã kiểm tra với dữ liệu :

1 4.376 5.577 12.000 123

2 3.576 3.777 10.000 abc

0 4.176 5.577 13.000 444

a 3.876 3.977 10.000 ddd

Chú ý : thêm dòng (setvar "AttReq" 1) vào Lisp nếu cần thiết.

  • 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
Bạn cần sửa hàm SPLIT để đổi giá trị Code thành kiểu String.

(defun c:RFT(/ data ten f h line str Code Stt X Y Z ELE Code Code1 Pnt);;;;;Read File Txt
(vl-load-com)
(defun Split (Str Char / Lst str pos)
 (while (setq pos (vl-string-search Char Str))
   (if (null Lst)
     (setq Lst (list (substr Str 1 pos)))
     (setq Lst (append Lst (list (read (substr Str 1 pos))))))
   (setq Str (substr Str (+ pos 2)) ))
 (setq Lst (append Lst (list Str)))  )  

 (if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
   (progn
     (setq f (open (findfile ten) "r"))
     (while
(setq Line (read-line f))	
(if (vl-string-search "\t" Line)
  (progn
    (setq data (split Line "\t" ))
    (setq Stt (nth 0 data))
    (setq X (nth 1 data))
    (setq Y (nth 2 data))
    (setq Z (nth 3 data))
    (setq Code (nth 4 data))	    
    (setq ELE (rtos z 2 2))
    (setq Pnt (list X Y Z))	    
    (command "insert"  "D_chitiet"  Pnt  1 1 0  Stt  ELE Code)	    ) ) ) ) )
 (command "zoom" "extents")
 (princ)
 )

Đã kiểm tra với dữ liệu :

1 4.376 5.577 12.000 123

2 3.576 3.777 10.000 abc

0 4.176 5.577 13.000 444

a 3.876 3.977 10.000 ddd

Chú ý : thêm dòng (setvar "AttReq" 1) vào Lisp nếu cần thiết.

Không biết phải nói như thế nào

Cảm ơn bác gia_bach 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
Bạn cần sửa hàm SPLIT để đổi giá trị Code thành kiểu String.

(defun c:RFT(/ data ten f h line str Code Stt X Y Z ELE Code Code1 Pnt);;;;;Read File Txt
(vl-load-com)
(defun Split (Str Char / Lst str pos)
 (while (setq pos (vl-string-search Char Str))
   (if (null Lst)
     (setq Lst (list (substr Str 1 pos)))
     (setq Lst (append Lst (list (read (substr Str 1 pos))))))
   (setq Str (substr Str (+ pos 2)) ))
 (setq Lst (append Lst (list Str)))  )  

 (if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
   (progn
     (setq f (open (findfile ten) "r"))
     (while
(setq Line (read-line f))	
(if (vl-string-search "\t" Line)
  (progn
    (setq data (split Line "\t" ))
    (setq Stt (nth 0 data))
    (setq X (nth 1 data))
    (setq Y (nth 2 data))
    (setq Z (nth 3 data))
    (setq Code (nth 4 data))	    
    (setq ELE (rtos z 2 2))
    (setq Pnt (list X Y Z))	    
    (command "insert"  "D_chitiet"  Pnt  1 1 0  Stt  ELE Code)	    ) ) ) ) )
 (command "zoom" "extents")
 (princ)
 )

Đã kiểm tra với dữ liệu :

1 4.376 5.577 12.000 123

2 3.576 3.777 10.000 abc

0 4.176 5.577 13.000 444

a 3.876 3.977 10.000 ddd

Chú ý : thêm dòng (setvar "AttReq" 1) vào Lisp nếu cần thiết.

Bác à! Nếu cháu có file txt mà các phần tử được phân biệt bởi nhiều dấu cách, hoặc nhiều dấu Tab hoặc nhiều sổ phẩy thì phải làm thế nào hả bác. Nếu trên mộ t dòng có cả dấu cách, dấu Tab, dấu phẩy thì phải làm thế nào hả bác VD của cháu đây:

Stt “dấu cách” tọa độ X “dấu Tab” tọa độ Y “dấu phẩy” tọa độ Z “dấu cách” Mã Code

Cảm ơn bác đã quan tâm đến bài của cháu.

Vì cháu cũng đang nghiên cứu lập trình Lisp nên còn nhiều bỡ ngỡ.

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
Lisp chỉ chạy đuợc cho file CAD có Block tên là D_chitiet do bạn thanhduan2407 Post ở bài 28

Nếu bạn muốn sử dụng Lisp này vui lòng gửi file CAD có Block cần chọn, tui sẽ cập nhật sau.

Nhờ anh giúp em về Block để chay lisp bắn tọa độ sang Cad, hỏi chiều cao text nha

File block điểm đo :

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

Cám ơn và mong tin

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 muốn "bắn tọa độ " của đối tưọng gì ?

File cad của bạn chỉ có 3 đối tuợng TEXT, không có bất kì Block nào ?!

Căn cứ vào Lisp RFT sử dụng Block D_chitiet với các số đo trên thể hiện file text STT X Y Code,

Mình muốn nhờ anh giúp xây dựng Block theo dạng file của mình gới, chỉnh sửa Lisp RFT để bắn các điểm đo file Text trên ra Cad theo Block kiểu của mình.

Rất mong được Anh 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
Căn cứ vào Lisp RFT sử dụng Block D_chitiet với các số đo trên thể hiện file text STT X Y Code,

Mình muốn nhờ anh giúp xây dựng Block theo dạng file của mình gới, chỉnh sửa Lisp RFT để bắn các điểm đo file Text trên ra Cad theo Block kiểu của mình.

Rất mong được Anh giúp.

Bạn viết linh tinh nhỉ? banghead.gif

"Block kiểu của mình" là Block kiểu gì ?

File cad của bạn chỉ có 3 đối tuợng TEXT, không có bất kì Block nào ?!

 

Có phải là : tuơng tự như Lisp ở bài viết số 7 http://www.cadviet.com/forum/index.php?sho...ost&p=96989

Lớp point là chứa đối tượng có kí hiệu điểm point ( Của Cad ) theo tọa độ x,y của bảng tọa độ trên ( cột 2 và 3 )

Lớp Sothutu là thể hiện số thứ tự hay tên điểm ( cột 1 )

Lớp cao độ là xuất text ở cột 4 ( Chú ý đừng để text STT và Caodo chồng lên nhau )

bạn yêu cầu bổ sung thêm đối tuợng TEXT có thuộc tính : Layer= "Code" và nội dung text ở cột 5

với định dạng của file điểm đo : STT X Y Z Code

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 à! Nếu cháu có file txt mà các phần tử được phân biệt bởi nhiều dấu cách, hoặc nhiều dấu Tab hoặc nhiều sổ phẩy thì phải làm thế nào hả bác. Nếu trên mộ t dòng có cả dấu cách, dấu Tab, dấu phẩy thì phải làm thế nào hả bác VD của cháu đây:

Stt “dấu cách” tọa độ X “dấu Tab” tọa độ Y “dấu phẩy” tọa độ Z “dấu cách” Mã Code

Cảm ơn bác đã quan tâm đến bài của cháu.

Vì cháu cũng đang nghiên cứu lập trình Lisp nên còn nhiều bỡ ngỡ.

Cảm ơn bác rất nhiễu

Bạn lấy data (File txt) ở đâu mà phức tạp thế ? :(

 

Tham khảo hàm Split chấp nhận các dấu cách, dấu Tab, dấu phẩy.

vd : Stt “dấu cách” tọa độ X “dấu Tab” tọa độ Y “dấu phẩy” tọa độ Z “dấu cách” Mã Code

Chú ý : giữa các giá trị chỉ có 1 kí tự , không áp dụng cho t/hợp có nhiều dấu Tab hoặc nhiều dấu phẩy.

(defun Split(str / i kitu line lst txtPhanbiet)
 (setq i 1
txtPhanbiet " 	,")
 (while (< i (strlen str))
   (setq kitu (substr str i 1))
   (if (vl-string-search kitu  txtPhanbiet)
     (progn
(if (null Lst)
  (setq Lst (list (substr Str 1 (- i 1))))
  (setq Lst (append Lst (list (read (substr Str 1 (- i 1)))))))
(setq Str (substr Str (+ i 1)) i 1))
     (setq i (1+ i)) )   )
 (setq Lst (append Lst (list Str)))  )

  • 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
Bạn viết linh tinh nhỉ? banghead.gif

"Block kiểu của mình" là Block kiểu gì ?

File cad của bạn chỉ có 3 đối tuợng TEXT, không có bất kì Block nào ?!

 

Có phải là : tuơng tự như Lisp ở bài viết số 7 http://www.cadviet.com/forum/index.php?sho...ost&p=96989

Lớp point là chứa đối tượng có kí hiệu điểm point ( Của Cad ) theo tọa độ x,y của bảng tọa độ trên ( cột 2 và 3 )

Lớp Sothutu là thể hiện số thứ tự hay tên điểm ( cột 1 )

Lớp cao độ là xuất text ở cột 4 ( Chú ý đừng để text STT và Caodo chồng lên nhau )

bạn yêu cầu bổ sung thêm đối tuợng TEXT có thuộc tính : Layer= "Code" và nội dung text ở cột 5

với định dạng của file điểm đo : STT X Y Z Code

Xin lổi bạn , mình trình bày không mạch lạc lấm.

Đúng như như ý bạn nói. Không cấn Block, xuất điểm ra chỉ theo các nội dung trên.

Mong được bạn 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
Bạn lấy data (File txt) ở đâu mà phức tạp thế ? :(

 

Tham khảo hàm Split chấp nhận các dấu cách, dấu Tab, dấu phẩy.

vd : Stt “dấu cách” tọa độ X “dấu Tab” tọa độ Y “dấu phẩy” tọa độ Z “dấu cách” Mã Code

Chú ý : giữa các giá trị chỉ có 1 kí tự , không áp dụng cho t/hợp có nhiều dấu Tab hoặc nhiều dấu phẩy.

(defun Split(str / i kitu line lst txtPhanbiet)
 (setq i 1
txtPhanbiet " 	,")
 (while (< i (strlen str))
   (setq kitu (substr str i 1))
   (if (vl-string-search kitu  txtPhanbiet)
     (progn
(if (null Lst)
  (setq Lst (list (substr Str 1 (- i 1))))
  (setq Lst (append Lst (list (read (substr Str 1 (- i 1)))))))
(setq Str (substr Str (+ i 1)) i 1))
     (setq i (1+ i)) )   )
 (setq Lst (append Lst (list Str)))  )

Cảm ơn bác nhiều

Không phải là file số liệu nó phức tạp đâu bác

Mà là cháu muốn mở 1 file số liệu mà kí tự phân biệt có thể là dấu cách hoặc dấu tab hoặc dấu phẩy mà cháu không phải chuyển đổi sang một dạng nhất định. Bác có thể nói cho cháu cách sử dụng hàm trên được không ạ?

Cháu đã học VB và cháu muốn học thêm về Lisp. Càng học cháu càng say mê. Không biết bác Gia_bach đã học từ đâu mà sao bác giỏi thế. bác có thể cho cháu lời khuyên khi nghiên cứu Lisp được không ạ?

Cháu cảm ơn bác nhiều. Bác thật Pro

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 bạn , mình trình bày không mạch lạc lấm.

Đúng như như ý bạn nói. Không cấn Block, xuất điểm ra chỉ theo các nội dung trên.

Mong được bạn giúp

Cập nhật theo yêu cầu :

Lisp tạo ra 1 đ/tuợng POINT và 3 đ/tuợng TEXT như sau :

1. Lớp Point có kí hiệu điểm (cột 2-3)

2. Lớp Sothutu : TEXT Số thứ tự (cột 1)

3. Lớp Caodo : TEXT Cao độ (cột 4)

4. Lớp Code : TEXT Code (cột 5)

 

với định dạng của file điểm đo : STT X Y Z Code ,

chấp nhận kí tự phân biệt giữa các giá trị trong file điểm đo : dấu cách, dấu Tab, dấu phẩy.

(defun c:RFT(/ code data f h line pt pxy spc txt stt ten);Read File Txt
 ;|  By : Gia Bach, gia_bach @  www.CadViet.com             |;    
 (vl-load-com)
(defun Split(str / i kitu line lst txtPhanbiet)
 (setq i 1 txtPhanbiet (strcat(chr 9)(chr 32)(chr 44)))
 (while (< i (strlen str))
   (setq kitu (substr str i 1))
   (if (vl-string-search kitu  txtPhanbiet)
     (progn
(if (null Lst)
  (setq Lst (list (substr Str 1 (- i 1))))
  (setq Lst (append Lst (list (read (substr Str 1 (- i 1)))))))
(setq Str (substr Str (+ i 1)) i 1))
     (setq i (1+ i)) )   )
 (setq Lst (append Lst (list Str)))  )
 (or *h* (setq *h* 2 ))
 (initget 6)
 (setq h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")) )
 (if h (setq *h* h) (setq h *h*))
 (if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
   (progn
     (or (tblsearch "layer" "Point") (command "-layer" "n" "Point" "") )
     (or (tblsearch "layer" "Sothutu") (command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "") )
     (or (tblsearch "layer" "Caodo") (command "-layer" "n" "Caodo" "c" 4 "Caodo" "") )
     (or (tblsearch "layer" "Code") (command "-layer" "n" "Code" "c" 2 "Code" "") )
     (setq spc (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-Acad-Object))))
     (setq f (open (findfile ten) "r"))
     (while (setq Line (read-line f))
(if (wcmatch Line (strcat "*"(chr 9)"*,*"(chr 32)"*,*`"(chr 44)"*"))
  (progn
    (setq data (split Line) code (last data))
    (if (and
	  (= (vl-list-length data)5)
	  (setq pt (vl-remove code (cdr data)))
	  (not(vl-catch-all-error-p (vl-catch-all-apply 'vlax-3d-point pt))) )
      (progn
	(setq stt (car data) pXY (list (car pt)(cadr pt)))
	(vla-put-Layer (vla-addpoint spc (vlax-3d-point pXY)) "Point")
	(vla-put-Layer (setq txt (vla-addtext spc stt (vlax-3d-point (list 0 0 0)) h)) "Sothutu")
	(vla-put-Alignment txt 8)
	(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
	(vla-put-Layer (setq txt (vla-addtext spc code (vlax-3d-point (list 0 0 0)) h)) "Code")
	(vla-put-Alignment txt 6)
	(vla-put-TextAlignmentPoint txt (vlax-3d-point (polar pXY 0 (* 0.2 h))))
	(vla-put-Layer (vla-addtext spc (caddr pt) (vlax-3d-point pXY) h) "Caodo")	))))) ) )
 (princ))

 

.........

Mà là cháu muốn mở 1 file số liệu mà kí tự phân biệt có thể là dấu cách hoặc dấu tab hoặc dấu phẩy mà cháu không phải chuyển đổi sang một dạng nhất định. Bác có thể nói cho cháu cách sử dụng hàm trên được không ạ?

Cháu đã học VB và cháu muốn học thêm về Lisp. Càng học cháu càng say mê.

.............

to : thanhduan2407

- Bạn tham khảo cách sử dụng hàm Split ở trên, chỉ đơn giản thay dòng (split Line "\t") bằng (split Line)

và dòng (vl-string-search "\t" Line) bằng (wcmatch Line (strcat "*"(chr 9)"*,*"(chr 32)"*,*`"(chr 44)"*"))

- Nếu bạn đã biết VB thì việc học LISP rất đơn giản (Ngôn ngữ chỉ là cách thể hiện, thuật toán mới là vấn đề)

- Bạn có thể tham khảo bài Hướng dẫn lập trình Lisp, Hãy tự mình khám phá... của bác SSG.

Chỉnh sửa theo gia_bach
  • 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ập nhật theo yêu cầu :

Lisp tạo ra 1 đ/tuợng POINT và 3 đ/tuợng TEXT như sau :

1. Lớp Point có kí hiệu điểm (cột 2-3)

2. Lớp Sothutu : TEXT Số thứ tự (cột 1)

3. Lớp Caodo : TEXT Cao độ (cột 4)

4. Lớp Code : TEXT Code (cột 5)

 

với định dạng của file điểm đo : STT X Y Z Code ,

chấp nhận kí tự phân biệt giữa các giá trị trong file điểm đo : dấu cách, dấu Tab, dấu phẩy.

(defun c:RFT(/ code data f h line pt pxy spc txt stt ten);Read File Txt
 ;|  By : Gia Bach, gia_bach @  www.CadViet.com             |;    
 (vl-load-com)
(defun Split(str / i kitu line lst txtPhanbiet)
 (setq i 1 txtPhanbiet (strcat(chr 9)(chr 32)(chr 44)))
 (while (< i (strlen str))
   (setq kitu (substr str i 1))
   (if (vl-string-search kitu  txtPhanbiet)
     (progn
(if (null Lst)
  (setq Lst (list (substr Str 1 (- i 1))))
  (setq Lst (append Lst (list (read (substr Str 1 (- i 1)))))))
(setq Str (substr Str (+ i 1)) i 1))
     (setq i (1+ i)) )   )
 (setq Lst (append Lst (list Str)))  )
 (or *h* (setq *h* 2 ))
 (initget 6)
 (setq h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")) )
 (if h (setq *h* h) (setq h *h*))
 (if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
   (progn
     (or (tblsearch "layer" "Point") (command "-layer" "n" "Point" "") )
     (or (tblsearch "layer" "Sothutu") (command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "") )
     (or (tblsearch "layer" "Caodo") (command "-layer" "n" "Caodo" "c" 4 "Caodo" "") )
     (or (tblsearch "layer" "Code") (command "-layer" "n" "Code" "c" 2 "Code" "") )
     (setq spc (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-Acad-Object))))
     (setq f (open (findfile ten) "r"))
     (while (setq Line (read-line f))
(if (wcmatch Line (strcat "*"(chr 9)"*,*"(chr 32)"*,*`"(chr 44)"*"))
  (progn
    (setq data (split Line) code (last data))
    (if (and
	  (= (vl-list-length data)5)
	  (setq pt (vl-remove code (cdr data)))
	  (not(vl-catch-all-error-p (vl-catch-all-apply 'vlax-3d-point pt))) )
      (progn
	(setq stt (car data) pXY (list (car pt)(cadr pt)))
	(vla-put-Layer (vla-addpoint spc (vlax-3d-point pXY)) "Point")
	(vla-put-Layer (setq txt (vla-addtext spc stt (vlax-3d-point (list 0 0 0)) h)) "Sothutu")
	(vla-put-Alignment txt 8)
	(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
	(vla-put-Layer (setq txt (vla-addtext spc code (vlax-3d-point (list 0 0 0)) h)) "Code")
	(vla-put-Alignment txt 6)
	(vla-put-TextAlignmentPoint txt (vlax-3d-point (polar pXY 0 (* 0.2 h))))
	(vla-put-Layer (vla-addtext spc (caddr pt) (vlax-3d-point pXY) h) "Caodo")	))))) ) )
 (princ))

Mình load RFT về, không biết tại sao mình lại không xuất các điểm ra Cad được,

file tọa độ của mình đây :

http://www.cadviet.com/upfiles/3/toado9.txt

http://www.cadviet.com/upfiles/3/ntdau.txt

Mong được anh giúp và hướng dẫn cho. 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
Lisp yêu cầu cấu trúc file điểm đo có 5 cột : STT X Y Z Code.

Data của file toado9.txtntdau.txt chỉ có 4 cột : STT X Y Z làm sao lấy đuợc giá trị Code?

pótay :(

Yêu cầu không rõ ràng, do vậy làm khó cho GIA_BACH. pó tay là phải. Để mình nói hộ cho các bạn ấy yêu cầu thế này nhé:

Yêu cầu một lisp như sau: sau khi gõ lệnh lisp, xuất hiện hộp thoại chọn file dữ liệu. File dữ liệu có định dạng STT X Y Z CODE, tuy nhiên không nhất thiết phải có đầy đủ 5 cột, nhưng tối thiểu phải có 4 cột trong đó 3 cột bắt buột là STT X Y, cột còn lại là tùy chọn (có thể là Z có thể là CODE). Về kiểu phân tách dữ liệu giữa các cột có thể là dấu tab, dấu cách, dấu phảy nhưng kiểu nào một kiểu không thể lẫn lộn nhiều kiểu trong một file. Thực thể bắn vào Cad có thể là point kèm theo các thông tin STT Z CODE được phân lớp riêng, hoặc có thể là block do người sử dụng lựa chọn.

Diễn giải như thế không biết đã trúng ý chưa

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
Yêu cầu không rõ ràng, do vậy làm khó cho GIA_BACH. pó tay là phải. Để mình nói hộ cho các bạn ấy yêu cầu thế này nhé:

Yêu cầu một lisp như sau: sau khi gõ lệnh lisp, xuất hiện hộp thoại chọn file dữ liệu. File dữ liệu có định dạng STT X Y Z CODE, tuy nhiên không nhất thiết phải có đầy đủ 5 cột, nhưng tối thiểu phải có 4 cột trong đó 3 cột bắt buột là STT X Y, cột còn lại là tùy chọn (có thể là Z có thể là CODE). Về kiểu phân tách dữ liệu giữa các cột có thể là dấu tab, dấu cách, dấu phảy nhưng kiểu nào một kiểu không thể lẫn lộn nhiều kiểu trong một file. Thực thể bắn vào Cad có thể là point kèm theo các thông tin STT Z CODE được phân lớp riêng, hoặc có thể là block do người sử dụng lựa chọn.

Diễn giải như thế không biết đã trúng ý chưa

Xin lổi anh giabach và cám ơn Anh tnmtpc đã giúp . Đúng như ý anh tnmtpc giải thích

Trong file text mình có 5 cột gồm STT - Tọa độ X - Tọa độ Y - Cao độ Z - Ghi chú Code ---->( Có thể dạng Tab, cách hay " , " )

Sau khi gỏ lệnh lisp, xuất hiện hộp thoại chọn file text tọa độ trên, Chọn file; Lisp yêu cầu người dùng chọn dạng tọa độ Trắc địa hay tọa độ Cad thì xuất các điểm đó ra Cad; Trên bản vẽ : Tạo theo các lớp riêng là : STT, điểm , Cao độ và Code ; Xuất các dử liệu đó theo cột 1 : STT, Điểm ( Theo tọa độ X,Y Cột 2 và 3 ), Cao độ ( theo cột 4 ), Code ( theo cột 5 ).

File mình gởi lại đây, cả dạng mẫu xuất ra.

http://www.cadviet.com/upfiles/3/toado9_1.txt

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

Mong được anh giúp, Cám ơn Anh

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ái này mình mạn phép chỉnh bản quyền của tác giả 1 ty để làm theo yêu cầu của bạn

Có gì pm nhé

;; free lisp from cadviet.com
(defun c:RFT (/ code data f h line pt pxy spc txt stt ten)
				;Read File Txt
     ;|  By : Gia Bach, gia_bach @  www.CadViet.com             |;
 (vl-load-com)
 (defun Split (str / i kitu line lst txtPhanbiet)
   (setq i 1
  txtPhanbiet
   (strcat (chr 9) (chr 32) (chr 44))
   )
   (while (< i (strlen str))
     (setq kitu (substr str i 1))
     (if (vl-string-search kitu txtPhanbiet)
(progn
  (if (null Lst)
    (setq Lst (list (substr Str 1 (- i 1))))
    (setq Lst (append Lst (list (read (substr Str 1 (- i 1))))))
  )
  (setq	Str (substr Str (+ i 1))
	i   1
  )
)
(setq i (1+ i))
     )
   )
   (setq Lst (append Lst (list Str)))
 )
 (or *h* (setq *h* 2))
 (initget 6)
 (setq	h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")
  )
 )
 (if h
   (setq *h* h)
   (setq h *h*)
 )
 (if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
   (progn
     (or (tblsearch "layer" "Point")
  (command "-layer" "n" "Point" "")
     )
     (or (tblsearch "layer" "Sothutu")
  (command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "")
     )
     (or (tblsearch "layer" "Caodo")
  (command "-layer" "n" "Caodo" "c" 4 "Caodo" "")
     )
     (or (tblsearch "layer" "Code")
  (command "-layer" "n" "Code" "c" 2 "Code" "")
     )
     (setq spc	(vla-get-ModelSpace
	  (vla-get-ActiveDocument (vlax-get-Acad-Object))
	)
     )
     (setq f (open (findfile ten) "r"))
     (while (setq Line (read-line f))
(if (wcmatch
      Line
      (strcat "*" (chr 9) "*,*" (chr 32) "*,*`" (chr 44) "*")
    )
  (progn
    (setq data (split Line)
	  code (last data)
    )
    (if	(and
	  (= (vl-list-length data) 5)
	  (setq pt (vl-remove code (cdr data)))
	  (not (vl-catch-all-error-p
		 (vl-catch-all-apply 'vlax-3d-point pt)
	       )
	  )
	)
;;;neu du lieu data co 5 bien so
      (progn
	(setq stt (car data)
	      pXY (list (car pt) (cadr pt))
	)
	(vla-put-Layer
	  (vla-addpoint spc (vlax-3d-point pXY))
	  "Point"
	)
	(vla-put-Layer
	  (setq	txt (vla-addtext
		      spc
		      stt
		      (vlax-3d-point (list 0 0 0))
		      h
		    )
	  )
	  "Sothutu"
	)
	(vla-put-Alignment txt 8)
	(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
	(vla-put-Layer
	  (setq	txt (vla-addtext
		      spc
		      code
		      (vlax-3d-point (list 0 0 0))
		      h
		    )
	  )
	  "Code"
	)
	(vla-put-Alignment txt 6)
	(vla-put-TextAlignmentPoint
	  txt
	  (vlax-3d-point (polar pXY 0 (* 0.2 h)))
	)
	(vla-put-Layer
	  (vla-addtext spc (caddr pt) (vlax-3d-point pXY) h)
	  "Caodo"
	)
      )
      ;;het progn list data=5
;;;neu du lieu data co 4 bien so (ban co the dung ham COND hoac if de bay loi
      (progn
	(setq pt (vl-remove code (cdr data)))
	(not (vl-catch-all-error-p
	       (vl-catch-all-apply 'vlax-3d-point pt)
	     )
	)


	(setq stt (car data)
	      pXY (list (car pt) (cadr pt))
	)
	(vla-put-Layer
	  (vla-addpoint spc (vlax-3d-point pXY))
	  "Point"
	)
	(vla-put-Layer
	  (setq	txt (vla-addtext
		      spc
		      stt
		      (vlax-3d-point (list 0 0 0))
		      h
		    )
	  )
	  "Sothutu"
	)
	(vla-put-Alignment txt 8)
	(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
	(vla-put-Layer
	  (vla-addtext spc (last data) (vlax-3d-point pXY) h)
	  "Caodo"
	)
      )
;;;het progn list=4
    )
  )
)
     )
   )
 )
 (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
Mình cũng mới ra trường, mình có một file txt tọa độ và độ cao của các điểm. MÌnh cần phun các điểm này lên cad, mình đang chạy Cad 2004, mong các bạn giúp mình với. Mình xin cảm ơn các bạn nhiều

Cấu trúc file dữ liệu txt của mình như sau : STT[dấu tab]X[dấu tab]Y[dấu tab]H

Đây là file dữ liệu text của mình

1	2329601.111	354348.8217	4.05
2	2329680.452	354348.2847	4.8
3	2329695.731	354348.2665	4.59
4	2329760.395	354350.4096	3.83
5	2329734.627	354350.1736	4.06
6	2330033.924	354349.2966	4.02
7	2329853.42	354349.7547	2.51
8	2329954.23	354348.8552	2.96
9	2330024.335	354351.0173	4.36
10	2329141.601	353367.2477	0.87
11	2330083.283	354226.1244	4.41
12	2330096.782	354188.1586	4.56
13	2330084.739	354223.5669	4.41
14	2330072.18	354255.2336	4.24
15	2330082.446	354246.8349	4.28
16	2330086.674	354234.9562	4.31
17	2330090.746	354233.5468	4.34
18	2330116.096	354243.8815	4.56
19	2330118.593	354238.1892	4.6
20	2330101.13	354230.8936	4.38
21	2330091.073	354224.7862	4.53
22	2330091.201	354221.8695	4.55
23	2330099.308	354215.9192	4.74
24	2330071.157	354221.5968	4.64
25	2330095.871	354223.633	4.76
26	2330100.713	354225.8228	4.74
27	2330096.417	354228.2863	4.4
28	2330076.872	354207.8337	4.33
29	2330098.445	354236.9191	4.18
30	2330089.139	354245.2211	4.54
31	2330093.554	354234.947	4.43
32	2330093.809	354234.1311	4.3
33	2330077.296	354206.8475	4.36
34	2330077.296	354206.8359	4.36
35	2330080.467	354207.1728	4.34
36	2330077.579	354223.6025	4.32
37	2328911.223	353810.2686	1.55
38	2328930.38	353819.8861	1.35
39	2328932.433	353812.9436	1.94
40	2328924.433	353805.1256	1.6
41	2328947.281	353825.2526	0.83
42	2328949.977	353816.2742	1.76
43	2328906.788	353794.8497	2.29
44	2328976.065	353841.1843	0.85
45	2328979.015	353829.1792	1.93
46	2328880.018	353796.0264	0.95
47	2328884.037	353784.6955	2.26
48	2329026.355	353856.6625	1.55
49	2329027.518	353848.5523	1.71
50	2328858.222	353787.9463	0.95
51	2328862.666	353775.4874	1.88
52	2329054.445	353866.6599	1.27
53	2329053.742	353858.7875	1.73
54	2328839.054	353780.611	1.26
55	2328843.557	353768.0034	1.91
56	2329078.308	353869.6154	2.39
57	2329085.9	                 353867.6712	3.99
58	2328821.916	353769.5474	1.71
59	2328825.473	353760.1213	1.95
60	2329026.61	353860.7997	1.44
61	2329003.847	353875.4712	1.46
62	2329011.732	353897.4581	0.79
63	2329021.917	353911.9714	1.73
64	2329028.05	353914.3383	3.28
65	2329044.328	353901.1668	3.16
66	2329040.012	353897.6879	2.55
67	2329034.921	353863.9433	1.39
68	2329039.723	353881.0748	1.45
69	2329044.894	353889.0434	1.77
70	2329011.37	353425.3278	4.61
71	2329064.694	353867.1626	1.64
72	2329069.979	353873.7371	1.81
73	2329061.087	353463.8208	3.11
74	2329329.408	354070.541	2.66
75	2329080.108	353860.5343	4.69
76	2328794.414	354261.704	6.67
77	2329329.419	354070.4917	2.7
78	2329189.908	353430.8551	0.9
79	2329601.943	353646.8228	1.8
80	2329581.827	353628.4327	1.77
81	2329588.321	353590.2256	1.85
82	2329552.453	353635.0785	1.7
83	2329566.867	353618.4323	1.68
84	2329548.335	353606.4003	1.64
85	2329563.541	353597.9979	1.64
86	2329559.423	353565.6399	1.5
87	2329528.219	353567.7175	1.34
88	2329360.117	353856.4385	3.01
89	2329901.307	353838.1542	2.03
90	2329879.959	353833.0103	2.06
91	2329410.493	354139.359	3.16
92	2329414.134	354181.8021	3.26
93	2329460.394	354210.5262	3.06
94	2329438.549	354182.5595	3.21
95	2329428.269	354155.6503	3.36
96	2329444.118	354137.8585	3.37
97	2329450.543	354157.3651	3.18
98	2329462.536	354182.8739	3.08
99	2329471.821	354156.3236	3.13
100	2329498.932	354159.7108	2.94
101	2329484.285	354175.7011	3.03
102	2329478.605	354199.3376	3.22
103	2329476.064	354222.5253	2.98
104	2329491.459	354232.4484	3.11
105	2329509.754	354224.4423	2.73
106	2329497.199	354210.2139	2.79
107	2329500.637	354180.743	2.89
108	2329515.733	354203.4819	2.89
109	2329519.619	354178.6653	2.83
110	2329559.919	354231.6953	2.76
111	2329571.177	354254.3869	2.86
112	2329577.346	354209.3126	2.83
113	2329540.482	354182.3826	2.79
114	2329524.382	354228.2562	2.68
115	2329533.636	354206.4522	2.67
116	2329543.566	354223.8679	2.69
117	2329553.784	354207.0975	2.68
118	2329626.709	354331.7136	3.51
119	2329631.417	354307.7982	3.58
120	2329600.893	354265.6954	3.42
121	2329656.473	354242.136	3.08
122	2329641.136	354231.0403	3.23
123	2329628.227	354248.2159	3.73
124	2329627.013	354275.7271	3.65
125	2329639.01	354283.0229	3.67
126	2329697.331	354296.742	3.03
127	2329698.904	354271.4127	3.04
128	2329728.226	354318.2756	3.34
129	2329733.608	354337.3948	3.46
130	2329749.658	354324.7107	3.54
131	2329735.412	354298.1964	3.2
132	2329741.424	354314.1186	3.35
133	2329327.247	354208.2119	2.83
134	2329382.94	354215.3401	2.71
135	2329400.162	354250.7598	2.74
136	2329590.31	354326.2031	4.12
137	2329567.523	354298.5968	4.14
138	2329551.795	354288.4233	4.09
139	2329530.579	354281.19	3.99
140	2329508.943	354268.9288	3.89
141	2329491.988	354267.0737	3.97
142	2329472.663	354263.0806	3.85
143	2329464.457	354128.786	3.11
144	2329461.662	354104.0341	3.12
145	2329436.668	354113.7444	3.42
146	2329446.863	354082.3093	3.33
147	2329447.192	354101.0716	3.3
148	2329452.454	354120.1631	3.23
149	2329014.338	353983.0356	1.72
150	2329004.07	354005.1022	1.76
151	2328988.285	354016.6165	1.8
152	2328977.317	354034.1895	1.81
153	2329003.535	354023.2941	1.79
154	2329023.772	354001.9913	1.72
155	2329031.652	353982.1207	1.69
156	2329032.875	353961.4675	1.66
157	2329044.695	353990.4159	1.69
158	2329049.043	353969.7627	1.67
159	2329048.499	353948.2936	1.64
160	2329060.35	353958.853	1.63
161	2329069.861	353973.5229	1.59
162	2329061.981	353991.1177	1.61
163	2329052.575	354004.0478	1.64
164	2329038.11	354011.4198	1.72
165	2329019.846	354026.4674	1.75
166	2328993.661	354039.0803	1.83
167	2329011.432	354040.0549	1.82
168	2328990.496	354057.3544	1.82
169	2329088.88	353976.5068	1.82
170	2329098.556	353970.0502	1.92
171	2329099.094	353969.461	1.92
172	2329109.388	354100.9901	1.96
173	2329115.774	354082.3129	1.97
174	2329091.236	354016.8952	1.87
175	2329118.582	354052.5581	2.01
176	2329097.306	354049.8987	1.94
177	2329079.97	354054.5447	1.86
178	2329088.598	354043.3077	1.87
179	2329073.536	354024.497	1.83
180	2329065.01	354035.6059	1.82
181	2329056.511	354046.945	1.82
182	2329067.337	354109.8725	1.81
183	2329061.774	354086.6043	1.84
184	2329059.196	354065.9122	1.89
185	2329041.657	354070.4651	1.85
186	2329038.549	354086.206	1.84
187	2329035.826	354115.7098	1.76
188	2329054.451	354133.0674	1.77
189	2329048.2	                354110.8097	1.75
190	2329029.83	354103.7988	1.81
191	2329041.392	354140.1436	1.73
192	2329045.719	354159.8214	1.73
193	2329060.005	354163.5647	1.74
194	2329123.259	354116.0352	1.91
195	2329121.565	354102.2377	1.94
196	2329133.097	354091.2322	1.96
197	2329097.002	354076.1075	1.99
198	2329079.472	354089.8692	1.91
199	2329079.575	354068.2903	1.92
200	2329099.401	354063.3615	1.94
201	2329108.934	354073.4725	1.97
202	2329109.467	354132.6348	1.85
203	2329102.084	354112.7204	1.88
204	2329083.817	354111.8766	1.86
205	2329086.662	354131.7224	1.81
206	2329078.821	354145.9014	1.78
207	2329084.443	354161.5853	1.77
208	2329102.146	354146.9556	1.81
209	2329086.538	354224.0938	1.7
210	2329126.434	354242.1297	1.73
211	2329125.352	354227.33	1.71
212	2329127.709	354213.3064	1.84
213	2329106.1	                354221.002	1.72
214	2329101.997	354204.2132	1.81
215	2329109.828	354191.2014	1.79
216	2329095.116	354169.3198	1.76
217	2329109.344	354175.6344	1.74
218	2329116.48	354160.4862	1.82
219	2329159.585	354221.5597	1.76
220	2329137.947	354216.668	1.76
221	2329124.202	354198.1743	1.76
222	2329129.275	354181.278	1.72
223	2329160.525	354208.2795	1.75
224	2329146.39	354197.641	1.75
225	2329151.466	354181.7352	1.7
226	2329169.994	354201.3772	1.74
227	2329167.87	354178.5351	1.73
228	2329136.449	354160.2965	1.89
229	2329149.083	354162.7697	1.8
230	2329144.757	354149.3288	1.87
231	2329125.069	354142.1175	1.88
232	2329150.965	354136.2676	1.88
233	2329133.172	354125.1692	1.9
234	2329169.971	354147.125	1.78
235	2329162.062	354159.5629	1.46
236	2329154.539	354122.9936	1.88
237	2329168.803	354105.9881	1.87
238	2329186.445	354123.9234	1.77
239	2329205.451	354129.2301	1.77
240	2329192.144	354145.4276	1.76
241	2329192.056	354068.6113	1.86
242	2329166.475	354083.4023	1.95
243	2329197.398	354112.6559	1.79
244	2329186.238	354095.3848	1.84
245	2329178.505	354134.0333	1.78
246	2329172.778	354122.4415	1.81
247	2329143.789	354108.3114	1.93
248	2329157.596	354094.9717	1.96
249	2329144.009	354077.1375	1.24
250	2329130.953	354075.7252	1.97
251	2329146.794	354054.4384	1.99
252	2329187.345	353995.6889	1.92
253	2329132.434	353961.3012	1.92
254	2329132.028	353935.1167	1.84
255	2329119.202	353926.778	1.72
256	2329109.045	353960.1	1.84
257	2329109.709	353948.4834	1.68
258	2329109.348	353930.9206	1.72
259	2329101.629	353920.3708	1.67
260	2329083.57	353942.8778	1.6
261	2329088.078	353930.3007	1.65
262	2329075.722	353913.924	1.68
263	2329093.13	354005.5501	1.91
264	2329111.642	354027.8498	1.98
265	2329115.959	354004.2776	1.98
266	2329125.05	353988.8494	2.01
267	2329130.009	354031.9827	2.02
268	2329127.738	354056.8024	1.99
269	2329158.064	354064.8042	1.99
270	2329166.641	354042.8475	1.96
271	2329147.118	354039.4426	1.99
272	2329150.307	354015.8454	2.01
273	2329169.275	354027.0437	1.97
274	2329173.484	354055.9448	1.87
275	2329182.549	354074.7298	1.85
276	2329187.861	354044.5164	1.95
277	2329198.877	354060.5214	1.87
278	2329201.533	354075.7256	1.89
279	2329214.057	354052.622	1.89
280	2329203.212	354027.854	1.94
281	2329226.797	354038.1144	1.92
282	2329237.518	354042.2618	1.98
283	2329222.929	354012.2059	1.85
284	2329229.828	354000.1155	1.74
285	2329236.555	353979.3012	1.92
286	2329238.533	353992.1372	1.76
287	2329249.809	354004.2657	1.72

Chào bạn...

Mình xem chuỗi toạ độ này quen lắm. Bạn gần khu vực Thị trấn Mạo Khê??? Liên hệ với mình nếu thấy cầ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
Cái này mình mạn phép chỉnh bản quyền của tác giả 1 ty để làm theo yêu cầu của bạn

Có gì pm nhé

;; free lisp from cadviet.com
(defun c:RFT (/ code data f h line pt pxy spc txt stt ten)
				;Read File Txt
     ;|  By : Gia Bach, gia_bach @  www.CadViet.com             |;
 (vl-load-com)
 (defun Split (str / i kitu line lst txtPhanbiet)
   (setq i 1
  txtPhanbiet
   (strcat (chr 9) (chr 32) (chr 44))
   )
   (while (< i (strlen str))
     (setq kitu (substr str i 1))
     (if (vl-string-search kitu txtPhanbiet)
(progn
  (if (null Lst)
    (setq Lst (list (substr Str 1 (- i 1))))
    (setq Lst (append Lst (list (read (substr Str 1 (- i 1))))))
  )
  (setq	Str (substr Str (+ i 1))
	i   1
  )
)
(setq i (1+ i))
     )
   )
   (setq Lst (append Lst (list Str)))
 )
 (or *h* (setq *h* 2))
 (initget 6)
 (setq	h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")
  )
 )
 (if h
   (setq *h* h)
   (setq h *h*)
 )
 (if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
   (progn
     (or (tblsearch "layer" "Point")
  (command "-layer" "n" "Point" "")
     )
     (or (tblsearch "layer" "Sothutu")
  (command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "")
     )
     (or (tblsearch "layer" "Caodo")
  (command "-layer" "n" "Caodo" "c" 4 "Caodo" "")
     )
     (or (tblsearch "layer" "Code")
  (command "-layer" "n" "Code" "c" 2 "Code" "")
     )
     (setq spc	(vla-get-ModelSpace
	  (vla-get-ActiveDocument (vlax-get-Acad-Object))
	)
     )
     (setq f (open (findfile ten) "r"))
     (while (setq Line (read-line f))
(if (wcmatch
      Line
      (strcat "*" (chr 9) "*,*" (chr 32) "*,*`" (chr 44) "*")
    )
  (progn
    (setq data (split Line)
	  code (last data)
    )
    (if	(and
	  (= (vl-list-length data) 5)
	  (setq pt (vl-remove code (cdr data)))
	  (not (vl-catch-all-error-p
		 (vl-catch-all-apply 'vlax-3d-point pt)
	       )
	  )
	)
;;;neu du lieu data co 5 bien so
      (progn
	(setq stt (car data)
	      pXY (list (car pt) (cadr pt))
	)
	(vla-put-Layer
	  (vla-addpoint spc (vlax-3d-point pXY))
	  "Point"
	)
	(vla-put-Layer
	  (setq	txt (vla-addtext
		      spc
		      stt
		      (vlax-3d-point (list 0 0 0))
		      h
		    )
	  )
	  "Sothutu"
	)
	(vla-put-Alignment txt 8)
	(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
	(vla-put-Layer
	  (setq	txt (vla-addtext
		      spc
		      code
		      (vlax-3d-point (list 0 0 0))
		      h
		    )
	  )
	  "Code"
	)
	(vla-put-Alignment txt 6)
	(vla-put-TextAlignmentPoint
	  txt
	  (vlax-3d-point (polar pXY 0 (* 0.2 h)))
	)
	(vla-put-Layer
	  (vla-addtext spc (caddr pt) (vlax-3d-point pXY) h)
	  "Caodo"
	)
      )
      ;;het progn list data=5
;;;neu du lieu data co 4 bien so (ban co the dung ham COND hoac if de bay loi
      (progn
	(setq pt (vl-remove code (cdr data)))
	(not (vl-catch-all-error-p
	       (vl-catch-all-apply 'vlax-3d-point pt)
	     )
	)
	(setq stt (car data)
	      pXY (list (car pt) (cadr pt))
	)
	(vla-put-Layer
	  (vla-addpoint spc (vlax-3d-point pXY))
	  "Point"
	)
	(vla-put-Layer
	  (setq	txt (vla-addtext
		      spc
		      stt
		      (vlax-3d-point (list 0 0 0))
		      h
		    )
	  )
	  "Sothutu"
	)
	(vla-put-Alignment txt 8)
	(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
	(vla-put-Layer
	  (vla-addtext spc (last data) (vlax-3d-point pXY) h)
	  "Caodo"
	)
      )
;;;het progn list=4
    )
  )
)
     )
   )
 )
 (princ)
)

Cám ơn Bạn thật nhiều, Mình có thể nhớ bạn hướng dẫn nội dung của lisp trên được không ? Mình muốn học và hiểu về cách xây dựng đoạn Lisp trên.

Mong được bạn 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
Cái này mình mạn phép chỉnh bản quyền của tác giả 1 ty để làm theo yêu cầu của bạn

Có gì pm nhé

;; free lisp from cadviet.com
(defun c:RFT (/ code data f h line pt pxy spc txt stt ten)
				;Read File Txt
     ;|  By : Gia Bach, gia_bach @  www.CadViet.com             |;
 (vl-load-com)
 (defun Split (str / i kitu line lst txtPhanbiet)
   (setq i 1
  txtPhanbiet
   (strcat (chr 9) (chr 32) (chr 44))
   )
   (while (< i (strlen str))
     (setq kitu (substr str i 1))
     (if (vl-string-search kitu txtPhanbiet)
(progn
  (if (null Lst)
    (setq Lst (list (substr Str 1 (- i 1))))
    (setq Lst (append Lst (list (read (substr Str 1 (- i 1))))))
  )
  (setq	Str (substr Str (+ i 1))
	i   1
  )
)
(setq i (1+ i))
     )
   )
   (setq Lst (append Lst (list Str)))
 )
 (or *h* (setq *h* 2))
 (initget 6)
 (setq	h (getdist (strcat "\nNhap chieu cao Text <" (rtos *h*) "> :")
  )
 )
 (if h
   (setq *h* h)
   (setq h *h*)
 )
 (if (setq ten (getfiled "Chon File txt" (getvar "dwgprefix") "txt" 8))
   (progn
     (or (tblsearch "layer" "Point")
  (command "-layer" "n" "Point" "")
     )
     (or (tblsearch "layer" "Sothutu")
  (command "-layer" "n" "Sothutu" "c" 3 "Sothutu" "")
     )
     (or (tblsearch "layer" "Caodo")
  (command "-layer" "n" "Caodo" "c" 4 "Caodo" "")
     )
     (or (tblsearch "layer" "Code")
  (command "-layer" "n" "Code" "c" 2 "Code" "")
     )
     (setq spc	(vla-get-ModelSpace
	  (vla-get-ActiveDocument (vlax-get-Acad-Object))
	)
     )
     (setq f (open (findfile ten) "r"))
     (while (setq Line (read-line f))
(if (wcmatch
      Line
      (strcat "*" (chr 9) "*,*" (chr 32) "*,*`" (chr 44) "*")
    )
  (progn
    (setq data (split Line)
	  code (last data)
    )
    (if	(and
	  (= (vl-list-length data) 5)
	  (setq pt (vl-remove code (cdr data)))
	  (not (vl-catch-all-error-p
		 (vl-catch-all-apply 'vlax-3d-point pt)
	       )
	  )
	)
;;;neu du lieu data co 5 bien so
      (progn
	(setq stt (car data)
	      pXY (list (car pt) (cadr pt))
	)
	(vla-put-Layer
	  (vla-addpoint spc (vlax-3d-point pXY))
	  "Point"
	)
	(vla-put-Layer
	  (setq	txt (vla-addtext
		      spc
		      stt
		      (vlax-3d-point (list 0 0 0))
		      h
		    )
	  )
	  "Sothutu"
	)
	(vla-put-Alignment txt 8)
	(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
	(vla-put-Layer
	  (setq	txt (vla-addtext
		      spc
		      code
		      (vlax-3d-point (list 0 0 0))
		      h
		    )
	  )
	  "Code"
	)
	(vla-put-Alignment txt 6)
	(vla-put-TextAlignmentPoint
	  txt
	  (vlax-3d-point (polar pXY 0 (* 0.2 h)))
	)
	(vla-put-Layer
	  (vla-addtext spc (caddr pt) (vlax-3d-point pXY) h)
	  "Caodo"
	)
      )
      ;;het progn list data=5
;;;neu du lieu data co 4 bien so (ban co the dung ham COND hoac if de bay loi
      (progn
	(setq pt (vl-remove code (cdr data)))
	(not (vl-catch-all-error-p
	       (vl-catch-all-apply 'vlax-3d-point pt)
	     )
	)
	(setq stt (car data)
	      pXY (list (car pt) (cadr pt))
	)
	(vla-put-Layer
	  (vla-addpoint spc (vlax-3d-point pXY))
	  "Point"
	)
	(vla-put-Layer
	  (setq	txt (vla-addtext
		      spc
		      stt
		      (vlax-3d-point (list 0 0 0))
		      h
		    )
	  )
	  "Sothutu"
	)
	(vla-put-Alignment txt 8)
	(vla-put-TextAlignmentPoint txt (vlax-3d-point pXY))
	(vla-put-Layer
	  (vla-addtext spc (last data) (vlax-3d-point pXY) h)
	  "Caodo"
	)
      )
;;;het progn list=4
    )
  )
)
     )
   )
 )
 (princ)
)

Lisp có trục trặc:

Nếu hàng nào có đủ 5 cột thì nó hiểu cột thứ 5 là "độ cao" còn cột thứ tư bị lờ đi

Trong trắc địa trục X là trục bắc, Y là trục đông, khác với trục toạ độ Đề các trong toán học, do vậy lisp đã thể hiện vị trí points sai.

Các point được bắn vào cad là 2D , nên gán Z cho nó để còn sử dụng vào việc tạo bình đồ. Nếu ai không cần chế độ 3D point thì chỉ cần sử dụng lệnh là phẳng là xong

Bác xem lại các vấn đề trê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
Lisp có trục trặc:

Nếu hàng nào có đủ 5 cột thì nó hiểu cột thứ 5 là "độ cao" còn cột thứ tư bị lờ đi

Trong trắc địa trục X là trục bắc, Y là trục đông, khác với trục toạ độ Đề các trong toán học, do vậy lisp đã thể hiện vị trí points sai.

Các point được bắn vào cad là 2D , nên gán Z cho nó để còn sử dụng vào việc tạo bình đồ. Nếu ai không cần chế độ 3D point thì chỉ cần sử dụng lệnh là phẳng là xong

Bác xem lại các vấn đề trên.

Cám ơn Bạn đã chỉ giúp.

Nhờ các bạn giúp giùm,

1. Cột thứ 6 là code, tên code trùng với kí hiệu nhờ các bạn giúp chèn kí hiệu đó ra bản vẽ luôn.

2. Thên cộ thứ 7 : là NOI ( nối điểm ) mục đích nối điểm tự động, dựa và tên điểm cột 1 nối theo thứ tự ta chọn ( ví dụ 1,2,5,7,9) thì nối các điểm 1-2-5-7-9 thành Pl.

Rất mong được các bạn 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

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

×