Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
tranvuminhhieu

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

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

luandv    5

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

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
Doan Van Ha    2.680

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ũ.

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
luandv    5

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

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
luandv    5

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:

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
Doan Van Ha    2.680

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"

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
phamthanhbinh    3.123

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.

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
vietlove    0

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 đỡ.

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
phamthanhbinh    3.123

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.

(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (< i (strlen S))
     (setq i (1+ i) ch (substr S i 1))
     (if (= ch sym) (progn
(setq
      L (append L (list (substr S 1 (- i 1))))
      S (substr S (1+ i) (- (strlen S) i))
      i 0
)
     ))	
)
(append L (list S))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:nht (/ oldos fn f txl stt x y z p p0)
(setq oldos (getvar  "osmode" ))
(setvar "osmode" 0)
(command "undo" "be")

(setq  fn (getfiled "Select Data File" "" "txt" 0)
           f (open fn "r")
)
(while  (/= (setq str (read-line f)) nil)           
       (setq txl (separate str ",")
                stt (nth 0 txl)
                x (nth 2 txl)
                y (nth 1 txl)
                z (nth 3 txl)
                p (list (atof x ) (atof y ) (atof z ))
                p0 (list (atof x) (atof y) 0.0)
       )
       (entmake  (list '(0 . "POINT") (cons 8 "point") (cons 10 p)))
       (entmake  (list '(0 . "TEXT") (cons 8 "point") (cons 10 p0) (cons 40 2) (cons 1 z) (cons 50 0.0) 
                                 (cons 7 "standard") (cons 11 p0) (cons 71 0 ) (cons 72 4) (cons 73 0)))
       (entmake  (list '(0 . "TEXT") (cons 8 "stt")  (cons 10 p0) (cons 40 2) (cons 1 (strcat "   " stt " ")) (cons 50 0.785398) 
                                 (cons 7 "standard") (cons 11 p0) (cons 71 0 ) (cons 72 4) (cons 73 0)))        
)
(close f)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)

Chúc bạn vui.

  • 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
vietlove    0

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.

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
phamthanhbinh    3.123

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.

Hề hề hề,

Gán màu cho layer thì bạn có thể sử dụng lệnh make layer để gán theo hướng dẫn trên dòng command.

Cò gán font chữ thì hình như hổng có mà chỉ có gán font chữ trong text style. Layer không quản lý font chữ bạn ạ.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
vietlove    0

Em đang mò mẫm học thôi, lên chưa biết nhiều về Lisp.

Lúc nào anh rảnh sửa giùm em với nhé, để e coi học hỏi.

 

1. Gán màu cho layer. point thành màu đỏ chẳng hạn.

2. Thay tên layer point là Cao do.

3. Tạo một layer trống là Mep duong

 

Em còn gà mong anh giúp đỡ 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
phamthanhbinh    3.123
Em đang mò mẫm học thôi, lên chưa biết nhiều về Lisp. Lúc nào anh rảnh sửa giùm em với nhé, để e coi học hỏi. 1. Gán màu cho layer. point thành màu đỏ chẳng hạn. 2. Thay tên layer point là Cao do. 3. Tạo một layer trống là Mep duong Em còn gà mong anh giúp đỡ nhé.

Hề hề hề,

Thật lòng chưa hiển ý bạn. Nếu là bạn hỏi về lệnh CAD thì chỉ cần bạn gõ -layer trên dòng command và thực hiện các option của nó là đủ để làm tất cả những điều bạn cần.

Nếu là bạn hỏi cách dùng lisp để làm thì trên diễn đàn cũng đã có vô thiên lủng.

Nếu bạn thực sự muốn tìm hiểu thì chỉ cần bạn chịu khó đọc help của CAd là sẽ vỡ hết .

Quá trình bạn tìm hiểu nếu bạn thấy khó khăn chỗ nào thì post cụ thể chỗ đó lên mọi người sẽ chỉ tiếp bạn 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
andday_09    0

Chào bạn!Mình đang cần cái lisp DC.LSP,nếu bạn có bạn có thể cho mình xin vào địa chỉ mail của mình: hoangtuan.st@gmail.com

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

Chào bạn!Mình đang cần cái lisp DC.LSP,nếu bạn có bạn có thể cho mình xin vào địa chỉ mail của mình: hoangtuan.st@gmail.com

Cản ơn bạn!

Hề hề hề

Bạn hãy nói rõ cái DC.lsp dùng để làm việc gì vậy??? Lisp có rất nhiều mà lệnh lisp lại khá tùy hứng nên nếu bạn chỉ nói vậy thì khó có thể biết bạn cần gì mà gử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
silictoong    0

Hix.Có bác nào có lisp tên là Dc.lsp ở các phần mềm hướng dẫn san nền HS 3.0 thì share cho em với.

Dc.lsp là lisp chuyển các điểm mtext trong cad sang file .txt. Giá trị mtext là giá trị cao độ Z. Vị trí dấu phẩy hoặc trung tâm chữ mtext được lấy làm tọa độ x,y của điể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
trieubb    5

 

Mình gửi bạn lisp xuất sang file text,mình thường dùng đề lấy cao độ khi làm san nền ( một số video hướng dẫn san nền mình cũng dùng lisp này)

(defun doichu ()
  (setvar "cmdecho" 0)
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
(if_file2)
  ;(setq s (getstring "\nFilename <Khong-Ten>: "))
;(if (= s nul) (setq s "Khong-Ten"))
(setq fn (open filename2 "w"))
  (setq i 0)
  (setq j 1)
  (prompt "\n")
  (prompt "\Chän C¸c §iÓm Cao §é : ")
  (setq ss  (ssget (list (cons 0 "Text"))))
  (if ss
            	(progn
                   	(repeat (sslength ss)   
	(setq ent (entget (ssname ss i)))    
	(setq nd (cdr (assoc 1 ent)))
	(setq ss1 (cdr (assoc 72 ent)))
	(setq ss2 (cdr (assoc 73 ent)))
 	(if (and (= ss1 0) (= ss2 0))
    	(setq td (cdr (assoc 10 ent)))
    	(setq td (cdr (assoc 11 ent)))
 	)
	;(setq td1 (cdr (assoc 10 ent)))
   (setq Y (cadr td))
   (setq X (car td))
   (setq z (caddr td))
   (write-line (strcat (itoa j)
     	" "
     	(rtos X 2 3)
     	" "
     	(rtos Y 2 3)
     	" "
     	(rtos z 2 3)
     	" "
     	nd
     	) fn)
	(setq i (+ i 1))
   (setq j (+ j 1))
    	)
	)
	)
  (close fn)
  (setvar "osmode" 191)
  (prompt "\n****	Chóc B¹n Thµnh C«ng ***")
  (princ) 
)
;********************************
;*********
(defun c:xtd ()
  	(doichu)     
  )
;;***************************Mo file
(defun if_file1 (/ name1)
  (if (= filename1 nil)
	(progn
           	(setq name1 (getfiled "Më TËp Tin Chøa Sè LiÖu"
                        	(strcat "d:/canhan/TUAN/luu/" "solieu") "txt" 2))
           	(if name1 (setq filename1 (strcase name1)))
  	)
	(progn
	(setq name1 (getfiled "Më TËp Tin Chøa Sè LiÖu"
                        	filename1 "txt" 2))
           	(if name1 (setq filename1 (strcase name1)))
	)
	)
           	)
;****************************Ghi file
(defun if_file2 (/ name2)
  (if (= filename2 nil)
	(progn
           	(setq name2 (getfiled "Më TËp Tin Chøa Sè LiÖu"
                        	(strcat "d:/canhan/TUAN/luu/" "solieu") "txt" 1))
           	(if name2 (setq filename2 (strcase name2)))
  	)
	(progn
	(setq name2 (getfiled "L­u TËp Tin Sè LiÖu"
                        	filename2 "txt" 1))
           	(if name2 (setq filename2 (strcase name2)))
	)
	)
           	)

Vậy bác có cái nào làm ngược lại không bác? tức từ file txt (giống như file bác xuất ra) và import các điểm vào bản vẽ có hiện cái cột thứ 5 cao độ lên ấy bác.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123

Vậy bác có cái nào làm ngược lại không bác? tức từ file txt (giống như file bác xuất ra) và import các điểm vào bản vẽ có hiện cái cột thứ 5 cao độ lên ấy bác.

Hề hề hề,

Hình như trên diễn đàn này có cái lisp như vậy rùi đó. bạn chịu khó tìm kiếm coi sao. nếu không thấy, bạn hãy gửi một file dữ liệu của bạn lên và gửi cái bản vẽ thể hiện cái kết quả bạn cần. Có nhẽ việc thực hiện sẽ không quá khó 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

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


×