Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
thuong_mdc80

Xuất file *.txt cho chiều dài các cạnh

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

Chào các Anh/ chị.

- Tôi có bản vẽ mà các điểm đã được nối lại thành các Line. Nhờ Anh/ chị viết giúp tôi Lisp để thống kê và xuất ra file dạng *.txt gồm: điểm đầu, điểm cuối của mỗi cạnh và chiều dài các cạnh đó.

- Các bác xem file đính kèmVisit My Website

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
Chào các Anh/ chị.

- Tôi có bản vẽ mà các điểm đã được nối lại thành các Line. Nhờ Anh/ chị viết giúp tôi Lisp để thống kê và xuất ra file dạng *.txt gồm: điểm đầu, điểm cuối của mỗi cạnh và chiều dài các cạnh đó.

- Các bác xem file đính kèmVisit My Website

Cảm ơn.

Tôi có thể viết lisp cho bạn, thời gian viết lisp này chắc chỉ 10 phút là cùng, nhưng tôi không muốn như vậy bởi vấn đề của bạn rất điển hình. Trên diễn đàn CADViet của chúng ta, thời gian gần đây các yêu cầu về viết lisp kết xuất dữ liệu ra bảng, ra excel rất nhiều. Những yêu cầu đó chính đáng, nó giúp rút ngắn thời gian làm việc cho người dùng lisp. Tuy nhiên, những yêu cầu như vậy thật ra các bạn có thể tự làm được bằng chính AutoCAD mà không cần đến lisp.

 

Dưới đây tôi xin hướng dẫn cách xử lý vấn đề của bạn. Từ đây, mọi người sẽ biết cách kết xuất dữ liệu cho riêng mình mà không cần phải yêu cầu viết lisp nữa.

Đầu tiên, bạn dùng lệnh DATAEXTRACTION (lệnh tắt chuẩn là DX). Tại Data Extraction - Page 1 of 8, nhấn next khi bạn tạo mới (lần đầu), còn khi bạn muốn update dữ liệu (cho các lần sau) thì bạn chọn Edit an existing data extraction. Rồi nhấn Next.

dataextrn1.jpg

 

Hộp thoại Save Data Extraction As sẽ xuất hiện yêu cầu bạn tạo mới 1 file dxe. File này có mục đích là lưu các bước mà bạn làm, để lần sau bạn không phải làm lại nữa . Vì các bước làm rất nhiều, save lại sau này open file dxe này sẽ giúp bạn tiết kiệm khá nhiều thời gian khi extract cùng một kiểu dữ liệu nhiều lần.

dataextrn2.jpg

 

Hộp thoại Data Extraction Page 2 of 8 xuất hiện, cho phép bạn chọn dữ liệu, bạn có thể chọn dữ liệu trong 1 phần của file, toàn bộ dữ liệu trong file hay nhiều file một lúc. Với trường hợp của bạn, chọn 1 phần của file tức là Select objects in the current drawing. Nhấn Next.

dataextrn3.jpg

 

ACAD sẽ cho bạn chọn các đối tượng, với trường hợp của bạn, bạn sẽ chọn các line. Do vậy trong hộp thoại Page 3 of 8 chỉ có duy nhất dữ liệu line.

dataextrn4.jpg

 

Trong hộp thoại Page 4 of 8, bạn uncheck tất cả những phần mà bạn không cần đến, rồi nhấn next.

dataextrn5.jpg

 

Trong hộp thoại Page 5 of 8, bạn cũng uncheck tất cả những phần mà bạn không cần đến, rồi nhấn next.

dataextrn6.jpg

 

Trong hộp thoại Page 6 of 8, bạn hãy chọn kiểu dữ liệu kết xuất. ACAD cho bạn kết xuất đồng thời cả 2 loại là table trong file DWG và kết xuất ra file dữ liệu dạng xls, csv, mdb, txt. Trường hợp của bạn cứ check cả 2 rồi nhấn next.

dataextrn7.jpg

 

CAD sẽ ra hộp thoại chọn style của table, bạn cứ để nguyên mà nhấn next.

Thế là xong, bạn đã có phần dữ liệu mà bạn muốn.

dataextrn8.jpg

 

Và kết quả bạn có được trong CAD:

dataextrn9.jpg

 

ngoài ra, bạn còn có thêm cả file excel nữa:

dataextrn10.jpg

  • Vote tăng 3

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 hỏi LỆNH DATAEXTRACTION này có từ version CAD nào, tôi xài cad2005 không có lệnh nà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

Mình nghĩ yêu cầu của bạn thuong_mdc80 không nhý bạn Nguyen Hoanh nghĩ ðâu. Cái bạn ấy cần không phải là tọa ðộ mà là số hiệu ðiểm và ðộ dài cạnh. Giá sử ta có 2 line trên bản vẽ có ðộ dài là 5 và 10. Nếu 2 line này có một ðiểm chung thì sau khi chạy lisp, ta có file txt nhý sau :

1 2 5.0

2 3 10.0

Còn nếu 2 line trên không có ðểm chung thì file txt sẽ là

1 2 5.0

3 4 10.0

và lúc ðó, trên bản vẽ cũng có text týõng ứng là 1 2 3 hay 1 2 3 4 tại mỗi ðầu mút của line.

Mình nghĩ nhý vậy có ðúng không bạn thuong_mdc80 ?

  • 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ủa mình hoàn toàn ðúng với ý của bạn TDVN nói.

Xin phép bác Nguyen Hoanh cho mình viết cái lisp này giúp bạn 'thuong_mdc80' nhé.

(defun dxf( name n)
 (cdr (assoc n (entget name)))
)
(defun opw( tieude duoi)
(setq duongdanfile (getfiled tieude duongdanfile duoi 7))
) 
(defun opr( tieude duoi)
(setq duongdanfile (getfiled tieude duongdanfile duoi 6))
) 

;ham thong ke so hieu diem va do dai canh
(defun C:DVAC( / ss name i j l p10 p11 d1 d2 s lis n1 f1 n old)
 (defun ltp( p)
(list (atof (rtos (car p) 2 2)) (atof (rtos (cadr p) 2 2)) 0)
 )
 (setq ss (ssget '((0 . "line"))))
 (if ss (progn
(setq n1 (opw "Ten file  : " "txt"))
(setq f (open n1 "w"))
(setq i 0 lis nil j 1 l (sslength ss))
(while (< i l)
  (setq name (ssname ss i))
  (setq p10 (dxf name 10) p11 (dxf name 11) s (distance p10 p11))
  (if (null lis) (setq d1 1 d2 2 lis (list (list (ltp p10) 1) (list (ltp p11) 2))) (progn
	(if (null (setq a (assoc (ltp p10) lis))) (setq lis (append lis (list (list (ltp p10) (+ 1 (length lis))))) d1 (length lis)) (setq d1 (cadr a))
	)
	(if (null (setq a (assoc (ltp p11) lis))) (setq lis (append lis (list (list (ltp p11) (+ 1 (length lis))))) d2 (length lis)) (setq d2 (cadr a))
   )
  ))
  (write-line (strcat (itoa d1) "\t" (itoa d2) "\t" (rtos s 2 2)) f)
;Nếu bạn muốn có tọa độ thì thay dòng trên bằng dòng này
;	  (write-line (strcat (itoa d1) "\t" (itoa d2) "\t" (rtos (car p10) 2 2) "\t" (rtos (cadr p10) 2 2) "\t" (rtos (car p11) 2 2) "\t" (rtos (cadr p11) 2 2) "\t" (rtos s 2 2)) f)
;Nếu là tọa độ trắc địa thì như vậy
;	  (write-line (strcat (itoa d1) "\t" (itoa d2) "\t" (rtos (cadr p10) 2 2) "\t" (rtos (car p10) 2 2) "\t" (rtos (cadr p11) 2 2) "\t" (rtos (car p11) 2 2) "\t" (rtos s 2 2)) f)
  (setq i (1+ i))
)
 ))
 (close f)
 (setq old (getvar "osmode"))
 (setvar "osmode" 0)
 (if lis (foreach n lis (command "_.text" (car n) 2.0 0.0 (itoa (cadr n)))))
 (setvar "osmode" old)
)
(if (null duongdanfile) (setq duongdanfile ""))

lisp này mặc ðịnh ðộ dài cần 2 số lẽ và ðộ cao text =2. Nếu bạn không thích có thể chỉnh lại

Thýờng thì mình thấy ngýời ta có yêu cầu cả tọa ðộ nhýng bác chỉ cần cạnh. Bác xem thử có ðc 0 nhé

  • 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
Xin phép bác Nguyen Hoanh cho mình viết cái lisp này giúp bạn 'thuong_mdc80' nhé.

(defun dxf( name n)
 (cdr (assoc n (entget name)))
)
(defun opw( tieude duoi)
(setq duongdanfile (getfiled tieude duongdanfile duoi 7))
) 
(defun opr( tieude duoi)
(setq duongdanfile (getfiled tieude duongdanfile duoi 6))
) 

;ham thong ke so hieu diem va do dai canh
(defun C:DVAC( / ss name i j l p10 p11 d1 d2 s lis n1 f1 n old)
 (defun ltp( p)
(list (atof (rtos (car p) 2 2)) (atof (rtos (cadr p) 2 2)) 0)
 )
 (setq ss (ssget '((0 . "line"))))
 (if ss (progn
(setq n1 (opw "Ten file  : " "txt"))
(setq f (open n1 "w"))
(setq i 0 lis nil j 1 l (sslength ss))
(while (< i l)
  (setq name (ssname ss i))
  (setq p10 (dxf name 10) p11 (dxf name 11) s (distance p10 p11))
  (if (null lis) (setq d1 1 d2 2 lis (list (list (ltp p10) 1) (list (ltp p11) 2))) (progn
	(if (null (setq a (assoc (ltp p10) lis))) (setq lis (append lis (list (list (ltp p10) (+ 1 (length lis))))) d1 (length lis)) (setq d1 (cadr a))
	)
	(if (null (setq a (assoc (ltp p11) lis))) (setq lis (append lis (list (list (ltp p11) (+ 1 (length lis))))) d2 (length lis)) (setq d2 (cadr a))
   )
  ))
  (write-line (strcat (itoa d1) "\t" (itoa d2) "\t" (rtos s 2 2)) f)
  (setq i (1+ i))
)
 ))
 (close f)
 (setq old (getvar "osmode"))
 (setvar "osmode" 0)
 (if lis (foreach n lis (command "_.text" (car n) 2.0 0.0 (itoa (cadr n)))))
 (setvar "osmode" old)
)
(if (null duongdanfile) (setq duongdanfile ""))

lisp này mặc ðịnh ðộ dài cần 2 số lẽ và ðộ cao text =2. Nếu bạn không thích có thể chỉnh lại

Thýờng thì mình thấy ngýời ta có yêu cầu cả tọa ðộ nhýng bác chỉ cần cạnh. Bác xem thử có ðc 0 nhé

Bạn có thể viết giúp mình thêm thể hiện tọa độ x,y của các điểm đó và xuất ra bảng.

Rất cám ơ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 có thể viết giúp mình thêm thể hiện tọa độ x,y của các điểm đó và xuất ra bảng.

Rất cám ơn

Xem 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
Xem trên

Không thấy xuất ra bảng tọa độ x,y và chiều dài, mà chỉ có đánh số thứ tự các đỉnh line và chiều dài thôi.

Ý mình muốn nhờ bạn giúp cho lisp tương tự như trên và bổ sung thêm tọa độ x,y của các đỉnh đường.

Như :

STT tọa độ x - tọa độ y - S(m)

S(m) là chiều dài theo stt (n+1 )

tính theo công thức căn bặc hai ( x2-x1)^2 +(y2-y1)^2

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
Không thấy xuất ra bảng tọa độ x,y và chiều dài, mà chỉ có đánh số thứ tự các đỉnh line và chiều dài thôi.

Ý mình muốn nhờ bạn giúp cho lisp tương tự như trên và bổ sung thêm tọa độ x,y của các đỉnh đường.

Như :

STT tọa độ x - tọa độ y - S(m)

S(m) là chiều dài theo stt (n+1 )

tính theo công thức căn bặc hai ( x2-x1)^2 +(y2-y1)^2

Mong được bạn giúp

Mình đã sửa cho bạn ở trên rồi nhưng bạn không chịu đọc. Trong lisp dấu ";" là ghi chú. Nếu ở đấu dòng bạn đánh ; thì dòng đó lisp sẽ bỏ qua. Như vậy bản phải chỉnh lại theo yêu cầu của mình.

Bạn thay dòng này

(write-line (strcat (itoa d1) "\t" (itoa d2) "\t" (rtos s 2 2)) f)

bằng dòng (nếu là tọa độ toán học)

(write-line (strcat (itoa d1) "\t" (itoa d2) "\t" (rtos (car p10) 2 2) "\t" (rtos (cadr p10) 2 2) "\t" (rtos (car p11) 2 2) "\t" (rtos (cadr p11) 2 2) "\t" (rtos s 2 2)) f)

hoặc dòng (nếu là tọa độ trắc địa)

(write-line (strcat (itoa d1) "\t" (itoa d2) "\t" (rtos (cadr p10) 2 2) "\t" (rtos (car p10) 2 2) "\t" (rtos (cadr p11) 2 2) "\t" (rtos (car p11) 2 2) "\t" (rtos s 2 2)) f)

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 đã sửa cho bạn ở trên rồi nhưng bạn không chịu đọc. Trong lisp dấu ";" là ghi chú. Nếu ở đấu dòng bạn đánh ; thì dòng đó lisp sẽ bỏ qua. Như vậy bản phải chỉnh lại theo yêu cầu của mình.

Bạn thay dòng này

(write-line (strcat (itoa d1) "\t" (itoa d2) "\t" (rtos s 2 2)) f)

bằng dòng (nếu là tọa độ toán học)

(write-line (strcat (itoa d1) "\t" (itoa d2) "\t" (rtos (car p10) 2 2) "\t" (rtos (cadr p10) 2 2) "\t" (rtos (car p11) 2 2) "\t" (rtos (cadr p11) 2 2) "\t" (rtos s 2 2)) f)

hoặc dòng (nếu là tọa độ trắc địa)

(write-line (strcat (itoa d1) "\t" (itoa d2) "\t" (rtos (cadr p10) 2 2) "\t" (rtos (car p10) 2 2) "\t" (rtos (cadr p11) 2 2) "\t" (rtos (car p11) 2 2) "\t" (rtos s 2 2)) f)

Cám ơn bạn đã quan tâm giúp.

mình thay thế theo toạ độ Trắc địa, thử có một line thôi mà sao lisp thống kê lập lại qúa nhiều lầ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ám ơn bạn đã quan tâm giúp.

mình thay thế theo toạ độ Trắc địa, thử có một line thôi mà sao lisp thống kê lập lại qúa nhiều lần.

Mong được bạn giúp

Mình đã thử rồi mới post lên. File txt có dạng

"Điểm đầu" "Điểm cuối" "X đầu" "Y đầu" "X cuối" "Y cuối" "Cạ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
Mình đã thử rồi mới post lên. File txt có dạng

"Điểm đầu" "Điểm cuối" "X đầu" "Y đầu" "X cuối" "Y cuối" "Cạnh"

Xin lỗi Bạn , mình đã nhầm trong việc thay thế.

Mình chạy được rồi. Cám ơn nha.

Nhưng khi nhập từ text vào Cad, kết quả mình cảm thấy dài,

Tính nhờ Bạn đơn giản cho các dòng được chứ, như sau :

"Điểm đầu i " "X đầu" "Y đầu" "Cạnh"

(------dòng trống--------------) " cạnh của i+1"

"Điểm kế i+1" "X kế " "Y kế "

..........

Xuất và chèn ra từ Cad luôn , cũng như Lisp lập bảng Hồ sơ kỷ thuật thửa đất của Diễn đàn mình.

Mong được Bạn hiểu và 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
Xin lỗi Bạn , mình đã nhầm trong việc thay thế.

Mình chạy được rồi. Cám ơn nha.

Nhưng khi nhập từ text vào Cad, kết quả mình cảm thấy dài,

Tính nhờ Bạn đơn giản cho các dòng được chứ, như sau :

"Điểm đầu i " "X đầu" "Y đầu" "Cạnh"

(------dòng trống--------------) " cạnh của i+1"

"Điểm kế i+1" "X kế " "Y kế "

..........

Xuất và chèn ra từ Cad luôn , cũng như Lisp lập bảng Hồ sơ kỷ thuật thửa đất của Diễn đàn mình.

Mong được Bạn hiểu và giúp.

Hình như bạn không nắm rõ điều mình muốn thì phải. Đối với HSKT, các điểm liên tiếp nhau và tạo thành vòng khép kín, có nghĩa là hai điểm liên tiếp nhau (hoặc điểm đầu và điểm cuối) luôn luôn biểu diễn một cạnh. Do đó cái yêu cầu trên của bạn là đúng. Còn trong trường hợp đang xét, các điểm đc sinh ra bất kỳ, 2 điểm liên tiếp chưa chắc biểu diễn một cạnh, nên việc trình bày như bạn nói có thể sẽ sai, chỉ trình bày mỗi cạnh trên một dòng thì mới bảo đảm đúng đc.

  • 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
Hình như bạn không nắm rõ điều mình muốn thì phải. Đối với HSKT, các điểm liên tiếp nhau và tạo thành vòng khép kín, có nghĩa là hai điểm liên tiếp nhau (hoặc điểm đầu và điểm cuối) luôn luôn biểu diễn một cạnh. Do đó cái yêu cầu trên của bạn là đúng. Còn trong trường hợp đang xét, các điểm đc sinh ra bất kỳ, 2 điểm liên tiếp chưa chắc biểu diễn một cạnh, nên việc trình bày như bạn nói có thể sẽ sai, chỉ trình bày mỗi cạnh trên một dòng thì mới bảo đảm đúng đc.

Ờ, việc của mình hiện nay là khác hơn so với HSKT, vì nó là các đường, không tính như vòng kép kín như thửa đất. Chắc việc xuất ra bảng theo thứ tự như HSKT là chưa thể giải quyết hiện nay, Vậy mình phải biên tập bằng tay vậy.

Nhưng sau mình thấy hàng loạt bảng thống kê tọa độ và chiều dài tuyến đường của bản vẽ một số đơn vị đã thực hiện rất ngăn nấp và bài bảng.

Vậy nhờ Bạn giúp thêm : Trong việc xuất số hiệu điểm của các cạnh tên Cad, mình có thể chèn một block vào các điểm đó và có đường mủi tên chỉ ra và ghi số điểm, toạ độ x,y của từng điểm đó.

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
Ờ, việc của mình hiện nay là khác hơn so với HSKT, vì nó là các đường, không tính như vòng kép kín như thửa đất. Chắc việc xuất ra bảng theo thứ tự như HSKT là chưa thể giải quyết hiện nay, Vậy mình phải biên tập bằng tay vậy.

Nhưng sau mình thấy hàng loạt bảng thống kê tọa độ và chiều dài tuyến đường của bản vẽ một số đơn vị đã thực hiện rất ngăn nấp và bài bảng.

Vậy nhờ Bạn giúp thêm : Trong việc xuất số hiệu điểm của các cạnh tên Cad, mình có thể chèn một block vào các điểm đó và có đường mủi tên chỉ ra và ghi số điểm, toạ độ x,y của từng điểm đó.

Mong được bạn giúp

Hình như bạn thấy cái lisp này hơi giống với cái công việc của bạn nên bạn nghĩ là áp dụng đc. Vì bạn không post bản vẽ của bạn lên và nói rõ công việc của mình. Theo mình nghĩ cái lisp này không áp dụng cho công việc của bạn đc vì trên tuyến đg tuy không phải là khép kín nhưng số hiệu các điểm là liên tục, còn cách đánh số của lisp này là ngẫu nhiên. Việc lập bảng trên cad cũng là việc đơn giản nhưng mình nghĩ và theo cách trình bày hiện nay của bạn, nó không phù hợp. Nếu bạn muốn có lisp phù hợp hơn, bạn nên post file và nói rõ công việc của bạn, xem thử mình có giúp bạn đc hay không.

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
Hình như bạn thấy cái lisp này hơi giống với cái công việc của bạn nên bạn nghĩ là áp dụng đc. Vì bạn không post bản vẽ của bạn lên và nói rõ công việc của mình. Theo mình nghĩ cái lisp này không áp dụng cho công việc của bạn đc vì trên tuyến đg tuy không phải là khép kín nhưng số hiệu các điểm là liên tục, còn cách đánh số của lisp này là ngẫu nhiên. Việc lập bảng trên cad cũng là việc đơn giản nhưng mình nghĩ và theo cách trình bày hiện nay của bạn, nó không phù hợp. Nếu bạn muốn có lisp phù hợp hơn, bạn nên post file và nói rõ công việc của bạn, xem thử mình có giúp bạn đc hay không.

File mẫu và ghi chú yêu cầu trên file

http://www.cadviet.com/upfiles/QH03___Giao_thong.rar

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 mẫu và ghi chú yêu cầu trên file

http://www.cadviet.com/upfiles/QH03___Giao_thong.rar

Mình cung cấp cho bạn file block để vẽ mốc http://www.cadviet.com/upfiles/MOCTIM.dwg

và lisp http://www.cadviet.com/upfiles/khaosat2009_1.lsp

để bạn dùng. Việc vẽ cái vòng tròn và hai cái text trên duoi hôm nào rãnh mình làm tiếp.

Tuy nhiên, để mình hỏi thêm các bác trong diễn đàn xem có thể tạo cái block mà có thể kéo qua lại một nhóm đối tượng và có cái "dây" di chuyển theo hay không, tạm gọi là block động

block_dong.bmp

  • 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
Mình cung cấp cho bạn file block để vẽ mốc http://www.cadviet.com/upfiles/MOCTIM.dwg

và lisp http://www.cadviet.com/upfiles/khaosat2009_1.lsp

để bạn dùng. Việc vẽ cái vòng tròn và hai cái text trên duoi hôm nào rãnh mình làm tiếp.

Tuy nhiên, để mình hỏi thêm các bác trong diễn đàn xem có thể tạo cái block mà có thể kéo qua lại một nhóm đối tượng và có cái "dây" di chuyển theo hay không, tạm gọi là block động

block_dong.bmp

Cám ơn Bạn tdvn nha,

Rất nể phục bạn, không ngờ trong một thời gian chỉ vài tiếng đồng hồ mà Bạn đã cho ra một sản phẩm rất hữu ích.

... và tâm trạng hiện nay mình đang hồi hộp chờ phần hoàn thiện của Bạn.

Chúc Bạn sức khoẻ - hạnh phúc và thành đạ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
mình đang chờ phần hoàn thiện của Bạn.

Bạn thấy đấy. Vì muốn tạo một cái block như ý của bạn mà mình phải nhờ tới "cộng đồng" cadviet mới làm ra đc đấy chứ không phải đơn giản đâu. Có thể bạn cũng đã đọc thấy rồi. Vì thời gian có hạn nên mình cũng không nghiên cứu sâu về cái "block động" ngay đc, tạm sử dụng cái block của bạn "abcd" rồi chỉnh lại chút ít. Nếu bạn muốn có cái block như ý mình thì hãy nghiên cứu thêm để dùng nhé.

Mình post cho bạn cái file mình đã chỉnh lại để lisp sử dụnh để insert vào bản vẽ (nó chỉ "động" trên cad đời cao hơn 2004 - mình chạy trên cad2008): http://www.cadviet.com/upfiles/TRUTIM_R8.dwg

Còn trong code lisp bạn thay thế như vậy :

;thay dòng

(command "_.insert" "MOCTIM" "s" k p 0.0 so)

;thành dòng

(command "_.insert" "TRUTIM-R8" "s" (/ k 100.0) p 0.0 so "CDTK" "CDTC")

code đầy đủ :

;Lenh tao moc tim duong
(defun C:MOCTIM( / p so old k tyle1 lold)
 (setq lold (getvar "clayer"))
 (setq old (getvar "osmode"))
 (setvar "osmode" 9)
 (setq tylein 500)
 (setq tyle1 (getint (strcat "\nTy le in ban do <" (itoa tylein ) ">: ")))
 (if tyle1 (setq tylein tyle1))
 (setq k (/ tylein 1000.0))
 (setq so "1")
 (command "_.layer" "m" "MOCTIM" "c" 2 "" "")
 (setvar "clayer" "Moctim")
 (INITGET 128)
 (WHILE (SETQ P (GETPOINT (strcat "\nNhap so hieu diem <" so "> hoac Pick ")))
(cond 
  ((listp p) 
;		(command "_.insert" "MOCTIM" "s" k p 0.0 so)
	(command "_.insert" "TRUTIM-R8" "s" (/ k 100.0) p 0.0 so "CDTK" "CDTC");dong moi
	(setq so (itoa (1+ (atoi so))))
  )
  ((= (type p) 'STR) (setq so p))
)
(INITGET 128)
 )
 (setvar "osmode" old)
 (setvar "clayer" lold)
 (PRINC)
)


(defun bangtdmoc( lis / tyle1 p lis)
 (if (null tylein) (progn
(setq tylein 500)
(setq tyle1 (getint (strcat "\nTy le in <" (itoa tylein) ">: ")))
(if tyle1 (setq tylein tyle1))
 ))
 (if (setq p (getpoint "\nVi tri dat bang toa do")) (bangtdmoc1 lis tylein p) (PRINT "ban chua chon vi tri dat bang"))
)

(defun bangtdmoc2( lis2 lis3 p s h / p1 p2 p3 p4 s1 s2 s3 s4 st x1 y1 x2 y2 canh)
 (print lis2)
 (print lis3)
 (setq st (nth 0 lis2))
 (setq y1 (nth 1 lis2))
 (setq x1 (nth 2 lis2))
 (setq s1 (/ s 13.0) s2 (* 5.25 s1) s3 (* 9.25 s1) s4 (* 12.25 s1))
 (setq p1 (list (+ (car p) s1) (cadr p) 0.0) p2 (list (+ (car p) s2) (cadr p) 0.0) p3 (list (+ (car p) s3) (cadr p) 0.0) p4 (list (+ (car p) s4) (- (cadr p) h) 0.0)) 
 (command "_.text" "j" "c" p1 h 0.0 st)
 (command "_.text" "j" "r" p2 h 0.0 (rtos x1 2 3))
 (command "_.text" "j" "r" p3 h 0.0 (rtos y1 2 3))
 (if lis3 (progn
(setq y2 (nth 1 lis3))
(setq x2 (nth 2 lis3))
(setq canh (distance (list x1 y1 0.0) (list x2 y2 0.0)))
(if (> canh 0.0) (command "_.text" "j" "r" p4 h 0.0 (rtos canh 2 3)))
 ))
)

(defun bangtdmoc1( lis tylein p / h s1 s2 s3 i j k lis1 lis2 p1 hetd khn khd nl1 nl2)
 (setq nl1 (entlast))
 (setq h (* 2.0 (/ (float tylein) 1000.0)))
 (setq khn (* 71.5 (/ (float tylein) 1000.0)))
 (setq k 1)
 (setq p1 (list (+ (car p) (/ khn 2.0)) (- (cadr p) (* 4.0 k h)) 0.0))
 (command "_.text"  "s" "vhelvcb" "j" "c" p1 (* 1.25 h) 0.0 "BAÛNG THOÁNG KEÂ TOÏA ÑOÄ")
 (command "_.line" (list (car p) (- (cadr p) (* 5 h)) 0.0) (list (+ (car p) khn) (- (cadr p) (* 5 h)) 0.0) "")
 (setq p1 (list (car p) (- (cadr p) (* 7 h)) 0.0))
 (command "_.text" "s" "vhelvcn" p1 (* 1.0 h) 0.0 "   Moác			  X(m)					Y(m)			  Caïnh")
 (command "_.line" (list (car p) (- (cadr p) (* 8 h)) 0.0) (list (+ (car p) khn) (- (cadr p) (* 8 h)) 0.0) "")
 (setq i 0 k 5)
(while (< i (length lis))
  (setq lis1 (nth i lis))
  (setq j 0)
  (while (<= j (- (length lis1) 1))
	(if (< j (length lis1)) (setq lis2 (nth j lis1)) (setq lis2 (nth 0 lis1)))
	(if (< (+ j 1) (length lis1)) (setq lis3 (nth (+ j 1) lis1)) (setq lis3 nil))
	(setq p1 (list (car p) (- (cadr p) (* 2 k h)) 0.0))
	(bangtdmoc2 lis2 lis3 p1 khn h)
	(setq j (1+ j))
	(setq k (1+ k))
  )
  (command "_.line" (list (car p) (- (cadr p) (* 2 K h)) 0.0) (list (+ (car p) khn) (- (cadr p) (* 2 K h)) 0.0) "")
  (setq k (1+ k))
  (setq i (1+ i))
)
(setq k (1- k))
(command "_.line" (list (car p) (- (cadr p) (* 5 h)) 0.0) (list (car p) (- (cadr p) (* 2 K h)) 0.0) "")
(command "_.line" (list (+  (car p) (/ KHN 6.5)) (- (cadr p) (* 5 h)) 0.0) (list (+  (car p) (/ KHN 6.5)) (- (cadr p) (* 2 K h)) 0.0) "")
(command "_.line" (list (+  (car p) (* (/ KHN 6.5) 3.0)) (- (cadr p) (* 5 h)) 0.0) (list (+  (car p) (* (/ KHN 6.5) 3.0)) (- (cadr p) (* 2 K h)) 0.0) "")
(command "_.line" (list (+  (car p) (* (/ KHN 6.5) 5.0)) (- (cadr p) (* 5 h)) 0.0) (list (+  (car p) (* (/ KHN 6.5) 5.0)) (- (cadr p) (* 2 K h)) 0.0) "")
(command "_.line" (list (+  (car p) KHN) (- (cadr p) (* 5 h)) 0.0) (list (+  (car p) KHN) (- (cadr p) (* 2 K h)) 0.0) "")
)



;Lenh tao bang toa do
(defun C:BANGTDMT( / i list1 ss n listXY old kt n1 ent st p )
 (setq old (getvar "osmode"))
 (setq listXY nil)
 (setq i 1 kt T n nil)
 (setq list1 nil)
 (prompt (strcat "\nChon nhom doi tuong moc ranh thu " (itoa i)))
 (while kt
(while (setq n (entsel "\nChon moc"))
   (setq n (car n))
   (setq n1 (entnext n))
   (setq ent (entget n1))
   (setq st (cdr (assoc 1 ent)))
   (setq p (cdr (assoc 10 (entget n))))
   (setq list1 (append list1 (list (cons st p))))
)
(if list1 (setq listXY (append listXY (list list1))))
(setq i (1+ i))
(if (null (setq n (entsel (strcat "\nChon nhom doi tuong moc thu " (itoa i))))) (setq kt nil) (progn
  (setq list1 nil)
  (setq n (car n))
   (setq n1 (entnext n))
   (setq ent (entget n1))
   (setq st (cdr (assoc 1 ent)))
   (setq p (cdr (assoc 10 (entget n))))
   (setq list1 (append list1 (list (cons st p))))
))
 )
 (setvar "osmode" 0)
 (if listXY (progn
(if (null (tblsearch "style" "vhelvcn")) (command "_.style" "vhelvcn" "vhelvcn.ttf" "" "" "" "" ""))
(if (null (tblsearch "style" "vhelvcb")) (command "_.style" "vhelvcb" "vhelvcb.ttf" "" "" "" "" ""))
(command "_.layer" "m" "Bangtdgr" "")
(setvar "clayer" "Bangtdgr")
(bangtdmoc listXY)
 ))
 (setvar "osmode" old)
 (princ)
)

  • Vote tăng 3

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

Theo dõi Diển đàn nhận thấy bạn rất quyết tâm và nhờ các bạn khác cùng giúp .

Xin cám ơn bạn và tất cả mọi người cùng giúp.

Xin lỗi Bạn nha, sao mình chạy trên Cad2007 và 2004 không load được Block vào được, mặt dù đã thế dòng lệnh như bạn hướng dẫn.

Mong được Bạn giúp.

Còn vấn đề này nửa, Sau khi load block xong, chọn cao độ TK, CDTN thì có thể xuất sang bảng được không Bạn.

File mau mình đây : http://www.cadviet.com/upfiles/Xin_giup_1.dwg

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
Theo dõi Diển đàn nhận thấy bạn rất quyết tâm và nhờ các bạn khác cùng giúp .

Xin cám ơn bạn và tất cả mọi người cùng giúp.

Xin lỗi Bạn nha, sao mình chạy trên Cad2007 và 2004 không load được Block vào được, mặt dù đã thế dòng lệnh như bạn hướng dẫn.

Mong được Bạn giúp.

Còn vấn đề này nửa, Sau khi load block xong, chọn cao độ TK, CDTN thì có thể xuất sang bảng được không Bạn.

File mau mình đây : http://www.cadviet.com/upfiles/Xin_giup_1.dwg

- Xin lỗi, tên file dwg không cùng tên trong lisp. Bạn sửa cái cụm chữ màu đỏ sao cho cùng tên file block của bạn (nếu bạn muốn đặt tên file khác cũng làm giống như vậy), ở đây mình đã đánh nhầm dấu "-" và dấu "_".

(command "_.insert" "TRUTIM_R8" "s" (/ k 100.0) p 0.0 so "CDTK" "CDTC")

- Cái block này mình chỉnh và save tạo trên cad2008, do đó bạn phải dùng cad2007 trở lên mới gọi đc file block này. Tuy nhiên, tính năng "động" của cái block đó mình không rõ trên cad2007 có hiệu lực không (mình không có cad2007).

- Những gì bạn muốn bổ sung thêm tất nhiên là đc. Hôm nào rãnh mình sẽ làm. Tuy nhiên, mình chỉ giúp bạn những gì có tính chất phổ biến và có tính qui luật, những thao tác thường xuyên nhưng phải làm bằng tay, còn những gì cá biệt, ít gặp, có lẽ bạn cố gắng nhé.

  • 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

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
Đăng nhập để thực hiện theo  

×