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

[ Yêu cầu ] Xuất điểm theo Block thuộc tính qui định bởi tên

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

Mình có một file tọa độ dạng : tên điểm – toa độ X,  Y và cao độ

Có các Block của tên điểm : GPS , DCI, DCII, TM,

 

Xuất file tọa độ này ( Ở dạng Txt hay Csv )  vào Cad. Vị trí Block kí hiệu là vị trí tâm tam giác hay vòng tròn, theo toa độ X,Y

Nếu cột tên điểm là GPS .., thì chọ kí hiệu GPS tên theo tên điểm, chèn  ra Cad, theo tọa dộ X,Y, Cao độ ghi the cột thứ tư

Nếu cột tên điểm là DCI .., thì chọ kí hiệu DCI tên theo tên điểm, chèn  ra Cad, theo tọa dộ X,Y, Cao độ ghi the cột thứ tư

....

Rất mong được giúp đỡ

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

http://www.cadviet.com/upfiles/3/1181039_xuat_diem_01_1.rar

Chỉnh sửa theo anhemTracdia

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
KangKung    229

Lisp của bạn đây. Trước khi chạy thì copy 4 file trong file zip dưới đây vào thư mục Support của CAD nhé

http://www.cadviet.com/upfiles/3/71162_block_attribute.zip

;========LISP DUA DIEM KHONG CHE VAO CAD THEO CODE=========
;================KANGKUNG 01/04/2013=======================
(defun C:KK()
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (if (not Path) (setq Path(getvar "dwgprefix")))
  (setq file(getfiled "Select File:" Path "txt" 2) Path file file_in(open file "R"))
  (while(setq txt(read-line file_in))
    (if (/= txt nil)
      (progn
	(setq lst (read (strcat "(" txt ")"  )))
	(setq Code(substr txt 1 (- (vl-string-search (rtos (fix (nth (- (length lst) 3) lst)) 2 0) txt) 1)))
	(cond ((= (strcase(substr Code 1 2)) "TM") (in "TM"))
	      ((= (strcase(substr Code 1 3)) "GPS") (in "GPS"))
	      ((= (strcase(substr Code 1 3)) "DCI") (in "DCI"))
	      ((= (strcase(substr Code 1 4)) "DCII") (in "DCII"))
	      ))))
  (close file_in)
  (setvar "OSMODE" os)
  (command "UNDO" "END")
  )
(defun in(ten)
  (command "INSERT" ten (list (nth (- (length lst) 2) lst) (nth (- (length lst) 3) lst) (nth (- (length lst) 1) lst)) "1" "1" "0" Code (rtos (nth (- (length lst) 1) lst) 2 3)))
(princ "\n                Written By KangKung - 01/04/2013\n")
(princ "\n                  Nhap KK de chay chuong trinh\n")
  • 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

Cám ơn Kangkung. Lisp bạn viết đã giải quyết trong quá trình phun điểm vào Cad,

riêng trong quá trình nhập phải đánh tên và cao độ vào. Ví như điểm GPS-01, thì cần phải đánh tiếp GPS -01 và cao độ như : 0.235 thì sẻ xuất hoàn chỉnh là GPS-01 cao độ 0.235... v.v... theo kí hiệu.

Có cách nào mình chọn file TXT, lisp lọc theo các dạng kí tự như GPS, DCI- , DCII-,... rồi sau đó lấy tên số hiệu, như 01, 03,...Chèn theo mẫu ký hiệu ráp tên và cao độ vào cho đúng. Nếu nhậy từng điểm thì qúa lâu. Hay là mình tách thêm cột như GPS-01 thành 2 cột GPS- và 01 cho tiện khi nhập được không KangKung. ?!!

Rất mong được Bạn thông cảm và giúp đỡ. 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
KangKung    229

Đang băn khoăn không hiểu bạn bị lỗi ở chỗ nào. Lisp trên mình viết để nhập tự động hết từ việc phân loại điểm theo kí hiệu đến tự động điền tên và cao độ của điểm đó và hoàn toàn không có việc nhập bằng tay một giá trị nào. Mình đã chạy thử với nhiều máy ở chỗ mình đều ngon lành không vấn đê gì. Bạn thử chạy lại với file số liệu mình gửi kèm xem sao. Nếu vẫn lỗi thì ấn F2 rồi copy toàn bộ nội dung rồi post lên đây để mình xem nhé.

http://www.cadviet.com/upfiles/3/71162_kk.zip

PS: Bác nào có thời gian chạy thử Lisp này xem có được hay không nhé. 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

Lỗi báo như thế này Bạn ạ:

 

Command: INSERT Enter block name or [?] <TM>: GPS
Units: Inches   Conversion:         1
Specify insertion point or [basepoint/Scale/X/Y/Z/Rotate]:
Enter X scale factor, specify opposite corner, or [Corner/XYZ] <1>: 1 Enter Y
scale factor <use X scale factor>: 1
Specify rotation angle <0>: 0
Command: GPS - 01 Unknown command "GPS - 01".  Press F1 for help.

Command: 0.510 Unknown command "0.510".  Press F1 for help.

Command: INSERT Enter block name or [?] <GPS>: GPS
Units: Inches   Conversion:         1
Specify insertion point or [basepoint/Scale/X/Y/Z/Rotate]:
Enter X scale factor, specify opposite corner, or [Corner/XYZ] <1>: 1 Enter Y
scale factor <use X scale factor>: 1
Specify rotation angle <0>: 0 *Invalid*
; error: Function cancelled

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
KangKung    229

Lỗi báo như thế này Bạn ạ:

 

Command: INSERT Enter block name or [?] <TM>: GPS

Units: Inches   Conversion:         1

Specify insertion point or [basepoint/Scale/X/Y/Z/Rotate]:

Enter X scale factor, specify opposite corner, or [Corner/XYZ] <1>: 1 Enter Y

scale factor <use X scale factor>: 1

Specify rotation angle <0>: 0

Command: GPS - 01 Unknown command "GPS - 01".  Press F1 for help.

 

Command: 0.510 Unknown command "0.510".  Press F1 for help.

 

Command: INSERT Enter block name or [?] <GPS>: GPS

Units: Inches   Conversion:         1

Specify insertion point or [basepoint/Scale/X/Y/Z/Rotate]:

Enter X scale factor, specify opposite corner, or [Corner/XYZ] <1>: 1 Enter Y

scale factor <use X scale factor>: 1

Specify rotation angle <0>: 0 *Invalid*

; error: Function cancelled

Nghi ngờ bác này chưa copy 4 file cad ở trên vào thư mục Support. Còn nếu đã copy rồi mà vẫn lỗi như thế thì bó tay rồi. Bệnh nan y chưa gặp bao giờ.

 

 

Lisp của bác KangKung dùng ngon lành, chẳng bị lỗi chút nào.

Tuy nhiên thì vấn đề căn lề Text chưa được đẹp lắm.  :wub:

Hi thanhduan. Thanks for testing.

Việc căn lề là của bác chủ thớt có phải của anh đâu. Anh chỉ copy cái mẫu của bác ấy gửi rồi save as thành 4 file khác nhau thôi mà. Không liên quan đến vụ này nhé  :D  :D  :D 

  • 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ám ơn Bạn KangKung, Bạn rất tài giỏi nha.

Mình cài Cad lại và Lisp chạy tốt.

Xin nhờ Bạn giúp mình thêm việc này, Nếu tên điểm là số, ví dụ như 45,63,79,.... thì cột 1 xuất ra tên điểm số, cột 2 và 3  là tọa độ x,y chèn kí hiệu điểm point , cột 4 là ghi chú.

Thể hiện theo vị trí và theo lớp.

http://www.cadviet.com/upfiles/3/118139_diem_kh_.rar

http://www.cadviet.com/upfiles/3/118139_dienmia.txt

Rấ́t mong đượ̣c bạ̣n giú́p. 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
KangKung    229

Lisp mới đây bạn ơi. Chức năng như cũ + đưa thêm điểm chi tiết lên bản vẽ. Nhớ copy cái File này vào Support nhé: 

http://www.cadviet.com/upfiles/3/71162_point_1.dwg

;========LISP DUA DIEM KHONG CHE + DIEM CHI TIET LEN BAN VE=========
;=======================KANGKUNG 03/04/2013=========================
(defun C:KK()
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (if (not Path) (setq Path(getvar "dwgprefix")))
  (setq file(getfiled "Select File:" Path "txt" 2) Path file file_in(open file "R"))
  (while(setq txt(read-line file_in))
    (if (/= txt nil)
      (progn
	(setq lst (read (strcat "(" txt ")"  )))
	(if (= (read txt) (atof (vl-princ-to-string(read txt))))
	  (command "INSERT" "Point" (list (nth 2 lst) (nth 1 lst) (nth 3 lst)) "1" "1" "0" (rtos (nth 0 lst) 2 0) (rtos (nth 3 lst) 2 2) (vl-princ-to-string(nth 4 lst)))
	  (progn
	    (setq Code(substr txt 1 (- (vl-string-search (rtos (fix (nth (- (length lst) 3) lst)) 2 0) txt) 1)))
	    (cond ((= (strcase(substr Code 1 2)) "TM") (in "TM"))
		  ((= (strcase(substr Code 1 3)) "GPS") (in "GPS"))
		  ((= (strcase(substr Code 1 3)) "DCI") (in "DCI"))
		  ((= (strcase(substr Code 1 4)) "DCII") (in "DCII"))
		  )
	    )
	  )
	)
      )
    )
  (close file_in)
  (setvar "OSMODE" os)
  (command "ZOOM" "E")
  (command "UNDO" "END")
  (Alert "Well Done")
  )
(defun in(ten)
  (command "INSERT" ten (list (nth (- (length lst) 2) lst) (nth (- (length lst) 3) lst) (nth (- (length lst) 1) lst)) "1" "1" "0" Code (rtos (nth (- (length lst) 1) lst) 2 3)))
(princ "\n                Written By KangKung - 03/04/2013\n")
(princ "\n                  Nhap KK de chay chuong trinh\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

Cám ơn Bạn, Block điểm chi tiết của bạn rất mới lạ,

Mình muốn bạn giúp xuất điểm chi tiết theo dạng điểm mà mình gởi, thể hiện có điểm point, cao độ, số thứ tự, để dùng cho việc biên tập bản 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
khaosatheco    2

Các anh cho em hỏi tý. Nếu muốn phá khối vừa chèn thì phải sửa code này như nào?

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/69905-yeu-cau-xuat-diem-theo-block-thuoc-tinh-qui-dinh-boi-ten/
;========LISP DUA DIEM KHONG CHE + DIEM CHI TIET LEN BAN VE=========
;=======================KANGKUNG 03/04/2013=========================
(defun C:KK()
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (if (not Path) (setq Path(getvar "dwgprefix")))
  (setq file(getfiled "Select File:" Path "txt" 2) Path file file_in(open file "R"))
  (while(setq txt(read-line file_in))
    (if (/= txt nil)
      (progn
	(setq lst (read (strcat "(" txt ")"  )))
	(if (= (read txt) (atof (vl-princ-to-string(read txt))))
	  (command "INSERT" "Point" (list (nth 2 lst) (nth 1 lst) (nth 3 lst)) "1" "1" "0" (rtos (nth 0 lst) 2 0) (rtos (nth 3 lst) 2 2) (vl-princ-to-string(nth 4 lst)))
	  (progn
	    (setq Code(substr txt 1 (- (vl-string-search (rtos (fix (nth (- (length lst) 3) lst)) 2 0) txt) 1)))
	    (cond ((= (strcase(substr Code 1 2)) "TM") (in "TM"))
		  ((= (strcase(substr Code 1 3)) "GPS") (in "GPS"))
		  ((= (strcase(substr Code 1 3)) "DCI") (in "DCI"))
		  ((= (strcase(substr Code 1 4)) "DCII") (in "DCII"))
		  )
	    )
	  )
	)
      )
    )
  (close file_in)
  (setvar "OSMODE" os)
  (command "ZOOM" "E")
  (command "UNDO" "END")
  (Alert "Well Done")
  )
(defun in(ten)
  (command "INSERT" ten (list (nth (- (length lst) 2) lst) (nth (- (length lst) 3) lst) (nth (- (length lst) 1) lst)) "1" "1" "0" Code (rtos (nth (- (length lst) 1) lst) 2 3))
(c:burst) (entlast)
)
(princ "\n                Written By KangKung - 03/04/2013\n")
(princ "\n                  Nhap KK de chay chuong trinh\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
khaosatheco    2

Em Vẫn đang làm như bác nói đó bác KangKung. Tuy nhiên trước khi thực hiện lệnh BURST phải dùng lệnh ssx -> tìm và chọn đối tượng mẫu. Nếu bổ sung lisp trên thêm 1 số Block nữa thì việc tìm các block này và BURST nó ra cũng hơi bất tiện. Nên em mới mò mẫm để phá nó ra ngay sau khi insert. Nhưng trình độ còi quá làm mãi không được đành phải nhờ các 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
KangKung    229

Thêm code để phá block attribute sau khi insert vào bản vẽ.

;========LISP DUA DIEM KHONG CHE + DIEM CHI TIET LEN BAN VE=========
;=======================KANGKUNG 03/04/2013=========================
;============07/05/2013 UPDATE: PHA BLOCK SAU KHI INSERT============
(defun C:KK(/ os txt lst Code)
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (if (not Path) (setq Path(getvar "dwgprefix")))
  (setq file(getfiled "Select File:" Path "txt" 2) Path file file_in(open file "R"))
  (while(setq txt(read-line file_in))
    (if (/= txt nil)
      (progn
	(setq lst (read (strcat "(" txt ")"  )))
	(if (= (read txt) (atof (vl-princ-to-string(read txt))))
	  (command "INSERT" "Point" (list (nth 2 lst) (nth 1 lst) (nth 3 lst)) "1" "1" "0" (rtos (nth 0 lst) 2 0) (rtos (nth 3 lst) 2 2) (vl-princ-to-string(nth 4 lst)))
	  (progn
	    (setq Code(substr txt 1 (- (vl-string-search (rtos (fix (nth (- (length lst) 3) lst)) 2 0) txt) 1)))
	    (cond ((= (strcase(substr Code 1 2)) "TM") (in "TM"))
		  ((= (strcase(substr Code 1 3)) "GPS") (in "GPS"))
		  ((= (strcase(substr Code 1 3)) "DCI") (in "DCI"))
		  ((= (strcase(substr Code 1 4)) "DCII") (in "DCII"))
		  )
	    (sssetfirst nil (ssadd (entlast))) (c:Burst)
	    )
	  )
	)
      )
    )
  (close file_in)
  (setvar "OSMODE" os)
  (command "ZOOM" "E")
  (command "UNDO" "END")
  (Alert "Well Done")
  )
(defun in(ten)
  (command "INSERT" ten (list (nth (- (length lst) 2) lst) (nth (- (length lst) 3) lst) (nth (- (length lst) 1) lst)) "1" "1" "0" Code (rtos (nth (- (length lst) 1) lst) 2 3)))
(princ "\n                Written By KangKung - 03/04/2013\n")
(princ "\n                  Nhap KK de chay chuong trinh\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

Bạn cho mình hỏi để thay đổi tỷ lệ chèn block att thì chỉnh sửa ntn. tại vì khi mình mở các file bản vẽ chèn thì cao độ text =0.5 trong khi bản vẽ sau khi được chèn thì chiều cao text là 0.005 

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


×