Đến nội dung


Hình ảnh
* * - - - 2 Bình chọn

[Giúp em viết cái lisp] chuyển text các cao độ trong Autocad sang file dạng *.txt


  • Please log in to reply
67 replies to this topic

#41 dovananh.xd

dovananh.xd

    biết lệnh offset

  • Members
  • PipPipPip
  • 174 Bài viết
Điểm đánh giá: 25 (tàm tạm)

Đã gửi 13 November 2011 - 09:57 PM

Cái này hình như trong Cad có sẵn lệnh mà. "DATAEXTRACTION", lệnh tắt là DX hay sao ấy. xuất sang cả txt, cả xls mà.
  • 0

#42 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 14 November 2011 - 07:57 AM

Không biết bạn dùng cad bao nhiêu,mình thấy cad 2012 có chức năng này còn với cad 2007 chưa có lệnh này bạn ah
  • 0

#43 luandv

luandv

    biết zoom

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

Đã gửi 09 May 2012 - 02:06 PM

Chào mọi người!
Minh co file cad mà cao độ dưới dạng Mtext sau:http://www.cadviet.c...oan_thanh_2.dwg, mình muốn chuyển các cao độ text trong bản vẽ này sang file txt có cao độ và tọa độ các điểm.
Mình đã dùng lisp mà cd2k44 post lên và dùng cả nova, Topo cũng không đc. Mong mọi người trả lời giúp.
  • 1

#44 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 09 May 2012 - 02:38 PM

Chào mọi người!
Minh co file cad mà cao độ dưới dạng Mtext sau:http://www.cadviet.c...oan_thanh_2.dwg, mình muốn chuyển các cao độ text trong bản vẽ này sang file txt có cao độ và tọa độ các điểm.
Mình đã dùng lisp mà cd2k44 post lên và dùng cả nova, Topo cũng không đc. Mong mọi người trả lời giúp.

Hề hề hề,
Lisp dạng này đã có rất nhiều trên diễn đàn. Bạn nói lisp của bạn cd2k44 post lên là lisp nào, và không được ở chỗ nào???
Bạn muốn cái kết quả của bạn nó cụ thể ra sao thì phải post mẫu lên mới làm được chứ.
Bạn nên chịu khó tìm kiếm trước khi yêu cầu bạn ạ. trên diễn đàn về vấn đề này không chỉ có lisp của bạn Cd2k44 mà rất nhiều, chả nhẽ không có cái nào gần đáp ứng được yêu cầu của bạn hay sao chứ.
Cụ thể mình cũng vừa mới sửa một lisp tương tự cho bạn dung.... gì gì đó. bạn hãy tìm và test thử coi có ưng không.
Bản vẽ bạn gửi toàn các text 5.50 chứ chả đúng với cao độ của điểm đặt text tí nào. Vậy bạn muốn cái gì?????
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#45 luandv

luandv

    biết zoom

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

Đã gửi 09 May 2012 - 04:57 PM

Hix, tụi khảo sát nó gửi cho mình file khảo sát tuyến http://www.cadviet.c...alig1bfinal.dwg bây giờ mình muốn chuyển text trong bản cad thành file cao độ.txt để mình sử dụng trong Topo giống như file này http://www.cadviet.c...do_thiet_ke.txt. Mọi người giúp mình với! thanks
  • 1

#46 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 09 May 2012 - 05:07 PM

Hoặc là bạn xóa hết các điểm thừa, để lại 1 2 điểm và file txt bạn muốn xuất ra ứng với 1 hoặc 2 điểm đó, hoặc topic sẽ đi vào quên lãng :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#47 luandv

luandv

    biết zoom

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

Đã gửi 09 May 2012 - 05:46 PM

Hoặc là bạn xóa hết các điểm thừa, để lại 1 2 điểm và file txt bạn muốn xuất ra ứng với 1 hoặc 2 điểm đó, hoặc topic sẽ đi vào quên lãng :)

Ketxu có thể nói rõ được không, file cad mình gửi nhẹ và ít điểm mà. Mình muốn hỏi có cách ji hay lisp nào để xuất các text trong cad sang file txt như trên được không!
  • 1

#48 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5451 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 09 May 2012 - 06:11 PM

Ketxu có thể nói rõ được không, file cad mình gửi nhẹ và ít điểm mà. Mình muốn hỏi có cách ji hay lisp nào để xuất các text trong cad sang file txt như trên được không!

Khi post bài lên forum bạn nên giản lược file để cho nó nhẹ nhất nhưng vẫn nói lên đủ ý nghĩa. Ý của Ketxu là file cad bạn chỉ nên để lại vài ba điểm tượng trưng, cũng như file txt cũng thế (file txt của bạn lên tới mấy ngàn điểm lận).
Về lisp này thì viết được.
Đây: lisp xuất các điểm của phần mềm Softdesk (kiểu Block_Att) ra file txt.

;Doan Van Ha - CADViet.com - Ngay 09/5/2012
;Muc dich: Xuat cac diem Softdesk (Block_Att) ra file txt.
(defun C:HA( / ent entlst fn pw n x y z)
(vl-load-com)
(princ "\nChon cac Block Attributes can xuat ket qua ra file...")
(setq entlst (reverse (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 0 "INSERT"))))))))
(setq fn (getfiled "Chon file de xuat ket qua" "" "txt" 1))
(setq pw (open fn "w"))
(foreach ent entlst
(setq n (cdr (assoc "POINT" (GetAtts (vlax-ename->vla-object ent)))))
(setq x (rtos (cadr (assoc 10 (entget ent))) 2 2))
(setq y (rtos (caddr (assoc 10 (entget ent))) 2 2))
(setq z (cdr (assoc "ELEV" (GetAtts (vlax-ename->vla-object ent)))))
(princ (strcat n " " x " " y " " z "\n") pw))
(close pw)
(princ))
;-----
(defun GetAtts (Obj) (mapcar '(lambda (Att) (cons (vla-get-TagString Att) (vla-get-TextString Att))) (vlax-invoke Obj 'GetAttributes)))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#49 luandv

luandv

    biết zoom

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

Đã gửi 09 May 2012 - 09:59 PM

Sau khi mình dùng lisp trên của Anh Hà về thi AP vao cad nó báo lỗi:
Command: ha
Chon 1 Block Attributes mau...
Chon cac Block Attributes can xuat ket qua ra file...
Select objects: Specify opposite corner: 218 found
Select objects: ; error: no function definition: VLAX-ENAME->VLA-OBJECT
Sau đó xuất ra file ko có dữ liệu, ah Hà thử kiểm tra xem líp lỗi ở đau giúp mình nhé! thanks
  • 0

#50 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5451 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 09 May 2012 - 10:13 PM

Sau khi mình dùng lisp trên của Anh Hà về thi AP vao cad nó báo lỗi:
Command: ha
Chon 1 Block Attributes mau...
Chon cac Block Attributes can xuat ket qua ra file...
Select objects: Specify opposite corner: 218 found
Select objects: ; error: no function definition: VLAX-ENAME->VLA-OBJECT
Sau đó xuất ra file ko có dữ liệu, ah Hà thử kiểm tra xem líp lỗi ở đau giúp mình nhé! thanks

Srr bạn. Đã bổ sung ở link trên
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#51 luandv

luandv

    biết zoom

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

Đã gửi 09 May 2012 - 10:30 PM

Hix, minh đã copy đoạn lisp ah update lại ở trên vào lại thì khi xuất ra nó sai ở tọa độ Y: file xuất http://www.cadviet.c...xuat_toa_do.txt. và cả cái thứ tự điểm nữa anh à! Anh Hà xem kiểm tra lại giúp với! với lại mình hỏi (xin đừng cừoi) trong lisp của ah có cần thiết phải thêm câu lệnh Chon 1 Block Attributes mau... không? thanks
  • 0

#52 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5451 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 09 May 2012 - 11:00 PM

Hix, minh đã copy đoạn lisp ah update lại ở trên vào lại thì khi xuất ra nó sai ở tọa độ Y: file xuất http://www.cadviet.c...xuat_toa_do.txt. và cả cái thứ tự điểm nữa anh à! Anh Hà xem kiểm tra lại giúp với! với lại mình hỏi (xin đừng cừoi) trong lisp của ah có cần thiết phải thêm câu lệnh Chon 1 Block Attributes mau... không? thanks

1). Toạ độ Y là đúng, nhưng vì số lớn quá nên viết qua dạng khác, VD: 1000000 = 1e8. Tôi đã chuyển về xong.
2). STT đúng theo người đặt nó. Bạn hãy mở layer "PNST" sẽ thấy STT.
3). Chọn block mẫu là để tránh nhầm. Bạn thấy rắc rối thì tôi bỏ luôn.
4). Sửa tất cả, ở link cũ.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#53 luandv

luandv

    biết zoom

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

Đã gửi 09 May 2012 - 11:13 PM

1). Toạ độ Y là đúng, nhưng vì số lớn quá nên viết qua dạng khác, VD: 1000000 = 1e8. Tôi đã chuyển về xong.
2). STT đúng theo người đặt nó. Bạn hãy mở layer "PNST" sẽ thấy STT.
3). Chọn block mẫu là để tránh nhầm. Bạn thấy rắc rối thì tôi bỏ luôn.
4). Sửa tất cả, ở link cũ.

ok anh! em dùng được rồi, cảm ơn anh nhiều. G9
  • 0

#54 luandv

luandv

    biết zoom

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

Đã gửi 10 May 2012 - 09:38 AM

Chào anh Hà!
Lisp anh khi xuất ra file txt thì nó có 2 dấu cách ở giữa mỗi cột do dòng lệnh
(princ (strcat n " " x " " y " " z "n") pw))
nên khi chạy vào trong Topo thi nó không hiểu nên bỏ chỉ còn 1 dấu cách thì được.
Nếu với Lisp trên của Anh mà muốn không dùng dấu cách mà dùng dấu Tab thì phải xử lý ntn vậy anh? (vì trong Topo khi xuất file txt vào nó có lựa chọn là dấu phân cách là tab hay dấu cách mà! :mellow:
  • 0

#55 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5451 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 10 May 2012 - 10:01 AM

Chào anh Hà!
Lisp anh khi xuất ra file txt thì nó có 2 dấu cách ở giữa mỗi cột do dòng lệnh
(princ (strcat n " " x " " y " " z "n") pw))
nên khi chạy vào trong Topo thi nó không hiểu nên bỏ chỉ còn 1 dấu cách thì được.
Nếu với Lisp trên của Anh mà muốn không dùng dấu cách mà dùng dấu Tab thì phải xử lý ntn vậy anh? (vì trong Topo khi xuất file txt vào nó có lựa chọn là dấu phân cách là tab hay dấu cách mà! :mellow:

1 dấu cách: " "
2 dấu cách: " "
1 dấu tab: "\t"
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#56 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 10 May 2012 - 12:07 PM

Hix, tụi khảo sát nó gửi cho mình file khảo sát tuyến http://www.cadviet.c...alig1bfinal.dwg bây giờ mình muốn chuyển text trong bản cad thành file cao độ.txt để mình sử dụng trong Topo giống như file này http://www.cadviet.c...do_thiet_ke.txt. Mọi người giúp mình với! thanks

Hề hề hề,
Phải chăng bạn muốn cái này:


(defun c:xpbl2t ()
(vl-load-com)
(command "undo" "be")
(setq ssbl (acet-ss-to-list (ssget (list (cons 0 "insert") (cons 2 "point") (cons 66 1))))
tmp (getfiled "Chon file xuat Text goc" (getvar "dwgprefix") "txt" 1)
)
(if tmp
(progn
(setq fw (open tmp "w") )
(foreach bl ssbl
(setq at (entnext bl) )
(while (/= (cdr (assoc 0 (entget at))) "SEQEND")
(setq atl (entget at) )
(if (= (cdr (assoc 2 atl )) "ELEV")
(setq elev (cdr (assoc 1 atl)) )
)
(if (= (cdr (assoc 2 atl)) "POINT")
(setq stt (cdr (assoc 1 atl))
p (cdr (assoc 10 atl)) )
)
(setq at (entnext at) )
)
(setq ptxt (strcat stt (chr 9) (rtos (car p) 2 3) (chr 9) (rtos (cadr p) 2 3) (chr 9) elev) )
(write-line ptxt fw)
)
(close fw)
)
)
(command "undo" "e")
(princ)
)

Hề hề hề,
cái này là mình xem voi nên có thể đoán chửa trúng ý bạn. Mình chỉ thử chơi để bạn thấy đã đúng ý chửa, nếu chửa đúng thì lại làm lại chứ chả biết bạn muốn gì sốt.
Block point của bạn có tới 3 thuộc tính mà mỗi thuộc tính lại có điểm chèn khác nhau. Do vậy mình cứ doán bừa rằng thuộc tính point sẽ đặt tại điểm bạn cần và giá trị của thuộc tính này là số thứ tự của điểm.
Hề hề hề, nếu có đoán sai mong bạn chớ chửi cái thằng mù này nhé.
Còn cái thuộc tính DESc mình chửa biết dùng nó vào việc chi bạn ạ.
Dù trúng hay trật cũng mong bạn test vài phát rồi cho mình biết ý kiến nhé. Nếu có thể được mình sẽ chỉnh sửa lại theo ý của bạn.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#57 vietlove

vietlove

    biết pan

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

Đã gửi 08 June 2012 - 10:23 PM

Chào các bác em là gà con mới vào nghề mong các bác chỉ giáo.
em có file dữ liệu dạng file text hoặc excel có cấu trúc là:

Cột 1: Số thứ tự
Cột 2: X
Cột 3: Y
Cột 4: H

mong các bác viết dùm 1 lisp phun điểm lên autocad (nếu lấy dữ liệu từ file excel thì quá tuyệt)

em xin up file dữ liệu và file autocad làm ví dụ mong được các bác giúp đỡ.
  • 0

#58 vietlove

vietlove

    biết pan

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

Đã gửi 08 June 2012 - 10:23 PM

http://www.cadviet.c...109856_diem.rar
  • 0

#59 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 09 June 2012 - 03:00 AM

http://www.cadviet.com/upfiles/3/109856_diem.rar

Hề hề hề,
Bạn dùng thử cái này xem đã đúng ý bạn chưa nhé. Vì mình chưa biết cách đọc dữ liệu từ file xls nên mới viết cho việc đọc dữ liệu từ file txt. nếu bạn có thể chuyển file xls về file csv thì có thể dùng được lisp này với điều kiện thay chuỗi txt trong dòng (setq fn (getfiled "Select Data File" "" "txt" 0) bằng chuỗi csv.
<br />
(defun Separate (S sym / i L ch)<br />
(setq i 0 L nil)<br />
(while (< i (strlen S))<br />
      (setq i (1+ i) ch (substr S i 1))<br />
      (if (= ch sym) (progn<br />
	(setq<br />
	      L (append L (list (substr S 1 (- i 1))))<br />
	      S (substr S (1+ i) (- (strlen S) i))<br />
	      i 0<br />
	)<br />
      ))	<br />
)<br />
(append L (list S))<br />
)<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
(defun c:nht (/ oldos fn f txl stt x y z p p0)<br />
(setq oldos (getvar  "osmode" ))<br />
(setvar "osmode" 0)<br />
(command "undo" "be")<br />
<br />
(setq  fn (getfiled "Select Data File" "" "txt" 0)<br />
            f (open fn "r")<br />
)<br />
(while  (/= (setq str (read-line f)) nil)           <br />
        (setq txl (separate str ",")<br />
                 stt (nth 0 txl)<br />
                 x (nth 2 txl)<br />
                 y (nth 1 txl)<br />
                 z (nth 3 txl)<br />
                 p (list (atof x ) (atof y ) (atof z ))<br />
                 p0 (list (atof x) (atof y) 0.0)<br />
        )<br />
        (entmake  (list '(0 . "POINT") (cons 8 "point") (cons 10 p)))<br />
        (entmake  (list '(0 . "TEXT") (cons 8 "point") (cons 10 p0) (cons 40 2) (cons 1 z) (cons 50 0.0) <br />
                                  (cons 7 "standard") (cons 11 p0) (cons 71 0 ) (cons 72 4) (cons 73 0)))<br />
        (entmake  (list '(0 . "TEXT") (cons 8 "stt")  (cons 10 p0) (cons 40 2) (cons 1 (strcat "   " stt " ")) (cons 50 0.785398) <br />
                                  (cons 7 "standard") (cons 11 p0) (cons 71 0 ) (cons 72 4) (cons 73 0)))        <br />
)<br />
(close f)<br />
(command "undo" "e")<br />
(setvar "osmode" oldos)<br />
(princ)<br />
)<br />
Chúc bạn vui.
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#60 vietlove

vietlove

    biết pan

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

Đã gửi 09 June 2012 - 09:27 AM

Quá tốt cảm ơn bác PHAMTHANH BINH nhiều nhé, e mới ra trường đang thực tập mong các bác chỉ giáo nhiều,

còn một việc nữa là làm sao để gán màu và font chữ cho layer vậy các bác.
  • 0