Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
17 replies to this topic

#1 anhemTracdia

anhemTracdia

    biết zoom

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

Đã gửi 01 April 2013 - 02:32 PM

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.c...181039_diem.rar

http://www.cadviet.c...t_diem_01_1.rar


Bài viết đã được chỉnh sửa nội dung bởi anhemTracdia: 12 May 2013 - 10:27 AM

  • 0

#2 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 01 April 2013 - 10:05 PM

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.c...k_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")

  • 2

#3 anhemTracdia

anhemTracdia

    biết zoom

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

Đã gửi 02 April 2013 - 07:48 AM

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


  • 0

#4 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 02 April 2013 - 09:01 PM

Đ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.c.../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


  • 0

#5 anhemTracdia

anhemTracdia

    biết zoom

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

Đã gửi 02 April 2013 - 10:00 PM

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


  • 0

#6 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 02 April 2013 - 10:32 PM

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:


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#7 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 03 April 2013 - 04:04 PM

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 


  • 1

#8 anhemTracdia

anhemTracdia

    biết zoom

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

Đã gửi 03 April 2013 - 04:31 PM

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.c...39_diem_kh_.rar

http://www.cadviet.c...139_dienmia.txt

Rấ́t mong đượ̣c bạ̣n giú́p. Cá́m ơơn


  • 0

#9 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 03 April 2013 - 06:58 PM

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.c...162_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")

 

 


  • 1

#10 anhemTracdia

anhemTracdia

    biết zoom

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

Đã gửi 03 April 2013 - 08:27 PM

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


  • 0

#11 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 03 April 2013 - 09:11 PM

Down lisp ở #11 nhé.

http://www.cadviet.c...-excel-vao-cad/


  • 1

#12 khaosatheco

khaosatheco

    biết vẽ circle

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

Đã gửi 07 May 2013 - 10:48 AM

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.c...i-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")


  • 0

#13 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 07 May 2013 - 12:02 PM

Khỏi cần sửa code. Sau khi chạy bạn dùng lệnh BURST của ExpressTool để phá block đó là được.


  • 0

#14 khaosatheco

khaosatheco

    biết vẽ circle

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

Đã gửi 07 May 2013 - 12:27 PM

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.


  • 0

#15 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 07 May 2013 - 12:50 PM

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")

  • 1

#16 khaosatheco

khaosatheco

    biết vẽ circle

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

Đã gửi 07 May 2013 - 01:07 PM

Hay quá. Chạy ngon rồi. Cảm ơn anh nhé.


  • 0

#17 anhemTracdia

anhemTracdia

    biết zoom

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

Đã gửi 12 May 2013 - 11:41 AM

Các điểm point chèn vào chưa phá được block được bạn ơi.

Mong được bạn giúp


  • 0

#18 thanhlong.hygt

thanhlong.hygt

    biết vẽ pline

  • Members
  • PipPip
  • 65 Bài viết
Điểm đánh giá: -8 (bình thường)

Đã gửi 27 February 2014 - 03:15 PM

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 


  • 0