Chuyển đến nội dung
Diễn đàn CADViet
M se

Lisp xuất dữ liệu (nhãn độ cao, tọa độ từ cad ra tệp TXT)

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

Chào các anh chị trên forum. Việc là em có file bản đồ có nhãn độ cao. Giờ em muốn xuất nhãn đó và tọa độ ra tệp TXT. anh chị nào có lisp cho em xin với, cảm ơn mọi người.

- em có file kèm theo.

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

Xem bản vẽ của bạn rồi, nhãn thì chắc là cái Text, còn tọa độ điểm chắc là lấy cái Circle bên cạnh.

 

  • Like 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
13 giờ trước, M se đã nói:

Chào các anh chị trên forum. Việc là em có file bản đồ có nhãn độ cao. Giờ em muốn xuất nhãn đó và tọa độ ra tệp TXT. anh chị nào có lisp cho em xin với, cảm ơn mọi người.

- em có file kèm theo.

cad.dwg

file ntn a

dc.txt

  • Like 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
2 giờ trước, PhamYen đã nói:

file ntn a

dc.txt

như file txt của bạn thì tọa độ là ok rồi nhưng độ cao thì lấy độ cao nhãn hiện ra file á. vì độ cao trong file txt của bạn lấy độ cao thuộc tính nên nó khác độ cao hiển thị trên file. Bạn giúp dùm mình với. cảm ơn bạn

cad.jpg

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ết cho bạn, xem có đúng ý không???

(defun c:tt  (/ els ent fn fw id ins pnt ss zco)
  (cond ((and (setq ss (ssget '((0 . "TEXT") (8 . "Docao"))))
              (setq fn (getfiled "Nhap the file" (getvar 'DWGPREFIX) "txt" 1)))
         (setq fw (open fn "w")
               id 0)
         (write-line "STT\tTOA DO-X\tTOA DO-Y\tTOA DO-Z" fw)
         (while (and (setq ent (ssname ss 0)) (ssdel ent ss))
           (if (setq zco (distof (cdr (assoc 1 (setq els (entget ent))))))
             (progn (setq ins (cdr (assoc 10 els))
                          pnt (list (- (car ins) 0.225) (cadr ins) zco))
                    (write-line (apply 'strcat
                                       (cons (itoa (setq id (1+ id)))
                                             (mapcar '(lambda (x) (strcat "\t" (rtos x 2 2))) pnt)))
                                fw))))
         (close fw)))
  (princ))

  • Like 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
19 giờ trước, M se đã nói:

như file txt của bạn thì tọa độ là ok rồi nhưng độ cao thì lấy độ cao nhãn hiện ra file á. vì độ cao trong file txt của bạn lấy độ cao thuộc tính nên nó khác độ cao hiển thị trên file. Bạn giúp dùm mình với. cảm ơn bạn

cad.jpg

Do khi nâng cao độ text bạn không nâng cao độ đường tròn lên nó chênh lệch là phải rồi . bạn chỉ cần giảm cao độ trong file text đi 2.483 là được . còn không bạn dung lsp của bác 

Quocmanh04tt cũng rất hay

  • Like 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
2 giờ trước, quocmanh04tt đã nói:

Viết cho bạn, xem có đúng ý không???

(defun c:tt  (/ els ent fn fw id ins pnt ss zco)
  (cond ((and (setq ss (ssget '((0 . "TEXT") (8 . "Docao"))))
              (setq fn (getfiled "Nhap the file" (getvar 'DWGPREFIX) "txt" 1)))
         (setq fw (open fn "w")
               id 0)
         (write-line "STT\tTOA DO-X\tTOA DO-Y\tTOA DO-Z" fw)
         (while (and (setq ent (ssname ss 0)) (ssdel ent ss))
           (if (setq zco (distof (cdr (assoc 1 (setq els (entget ent))))))
             (progn (setq ins (cdr (assoc 10 els))
                          pnt (list (- (car ins) 0.225) (cadr ins) zco))
                    (write-line (apply 'strcat
                                       (cons (itoa (setq id (1+ id)))
                                             (mapcar '(lambda (x) (strcat "\t" (rtos x 2 2))) pnt)))
                                fw))))
         (close fw)))
  (princ)) 

 

1 giờ} trướ}c, PhamYen đã nói:

Do khi nâng cao độ text bạn không nâng cao độ đường tròn lên nó chênh lệch là phải rồi . bạn chỉ cần giảm cao độ trong file text đi 2.483 là được . còn không bạn dung lsp của bác 

Quocmanh04tt cũng rất hay

 

Vô tình bản vẽ này là ở chỗ toạ độ X của text cao độ - 0.225 là toạ độ X của tâm vòng tròn (điểm đo địa hình). Với những bản vẽ khác, text độ cao sẽ dịch chuyển rất tự do xung quanh điểm đo thì lisp của @quocmanh04tt , hay phải giảm cao độ trong file text đi 2.483 như @PhamYen nói sẽ không chính xác. Có khi gây sai sót lớn cho việc làm báo cáo kết quả đo đạc.

Có nhiều vấn đề cho loại hình bản vẽ này:

1.  Với cao độ Z: bên trắc địa đo chi tiết rất dày đặc, text cao độ chồng chất nhau, nên không thể lấy tâm vòng tròn để dò tìm text cao độ gần nó nhất. Thiệp đã có lisp xuất điểm đo chi tiết kiểu này từ lâu rồi, nhưng cũng rất cẩn thận với mấy nhà trắc địa đo đạc quá dày đặc. Trong trường hợp này, trước tiên phải chạy 1 lisp khác, lisp này sẽ tạo 1 "đường tròn" với 1 bán kính ảnh hưởng tối ưu tại điểm đo để dò tìm các text cao độ ở gần điểm đo chi tiết:

a) Nếu phát hiện có > 2 text chồng chất thì khoanh tròn vị trí này. Người dùng tay move các text cao độ chồng chất đi chỗ khác ra khỏi khoang tròn này, hoặc bằng nhiều cách miễn là chỉ để 1 text cao độ trong khoang tròn mà thôi.

b) Nếu không tìm 1 text cao độ nào cũng khoanh tròn điểm đo này để người dùng "chế" thêm text cao độ, hoặc thay đổi "bán kính ảnh hưởng để chạy lại lisp

2. Với toạ độ X, Y: Đối tượng điểm đo là loại gì: block, point, circle... hay tổng hợp nhiều loại đối tượng thể hiện điểm đo, từ đó mới dùng ssget để tìm toạ độ X, Y điểm chèn của điểm đo.

Một số tổng quát để viết lisp này vậy.

  • Like 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
3 giờ trước, thiep đã nói:

 

 

Vô tình bản vẽ này là ở chỗ toạ độ X của text cao độ - 0.225 là toạ độ X của tâm vòng tròn (điểm đo địa hình). Với những bản vẽ khác, text độ cao sẽ dịch chuyển rất tự do xung quanh điểm đo thì lisp của @quocmanh04tt , hay phải giảm cao độ trong file text đi 2.483 như @PhamYen nói sẽ không chính xác. Có khi gây sai sót lớn cho việc làm báo cáo kết quả đo đạc.

Có nhiều vấn đề cho loại hình bản vẽ này:

1.  Với cao độ Z: bên trắc địa đo chi tiết rất dày đặc, text cao độ chồng chất nhau, nên không thể lấy tâm vòng tròn để dò tìm text cao độ gần nó nhất. Thiệp đã có lisp xuất điểm đo chi tiết kiểu này từ lâu rồi, nhưng cũng rất cẩn thận với mấy nhà trắc địa đo đạc quá dày đặc. Trong trường hợp này, trước tiên phải chạy 1 lisp khác, lisp này sẽ tạo 1 "đường tròn" với 1 bán kính ảnh hưởng tối ưu tại điểm đo để dò tìm các text cao độ ở gần điểm đo chi tiết:

a) Nếu phát hiện có > 2 text chồng chất thì khoanh tròn vị trí này. Người dùng tay move các text cao độ chồng chất đi chỗ khác ra khỏi khoang tròn này, hoặc bằng nhiều cách miễn là chỉ để 1 text cao độ trong khoang tròn mà thôi.

b) Nếu không tìm 1 text cao độ nào cũng khoanh tròn điểm đo này để người dùng "chế" thêm text cao độ, hoặc thay đổi "bán kính ảnh hưởng để chạy lại lisp

2. Với toạ độ X, Y: Đối tượng điểm đo là loại gì: block, point, circle... hay tổng hợp nhiều loại đối tượng thể hiện điểm đo, từ đó mới dùng ssget để tìm toạ độ X, Y điểm chèn của điểm đo.

Một số tổng quát để viết lisp này vậy.

Cháu nghĩ điểm circle với điểm text đều là 1 . do bạn ấy dùng cad phá khối lên nó bị tách riêng thành 2 loại như vậy ( trước đó đưa lên là phần mềm khác ). sau đó lại nâng hạ text đi 1 khoảng (2.483) lên nó sảy ra trường hợp text với circle không trùng nhau

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
3 giờ trước, thiep đã nói:

 

 

Vô tình bản vẽ này là ở chỗ toạ độ X của text cao độ - 0.225 là toạ độ X của tâm vòng tròn (điểm đo địa hình). Với những bản vẽ khác, text độ cao sẽ dịch chuyển rất tự do xung quanh điểm đo thì lisp của @quocmanh04tt , hay phải giảm cao độ trong file text đi 2.483 như @PhamYen nói sẽ không chính xác. Có khi gây sai sót lớn cho việc làm báo cáo kết quả đo đạc.

Có nhiều vấn đề cho loại hình bản vẽ này:

1.  Với cao độ Z: bên trắc địa đo chi tiết rất dày đặc, text cao độ chồng chất nhau, nên không thể lấy tâm vòng tròn để dò tìm text cao độ gần nó nhất. Thiệp đã có lisp xuất điểm đo chi tiết kiểu này từ lâu rồi, nhưng cũng rất cẩn thận với mấy nhà trắc địa đo đạc quá dày đặc. Trong trường hợp này, trước tiên phải chạy 1 lisp khác, lisp này sẽ tạo 1 "đường tròn" với 1 bán kính ảnh hưởng tối ưu tại điểm đo để dò tìm các text cao độ ở gần điểm đo chi tiết:

a) Nếu phát hiện có > 2 text chồng chất thì khoanh tròn vị trí này. Người dùng tay move các text cao độ chồng chất đi chỗ khác ra khỏi khoang tròn này, hoặc bằng nhiều cách miễn là chỉ để 1 text cao độ trong khoang tròn mà thôi.

b) Nếu không tìm 1 text cao độ nào cũng khoanh tròn điểm đo này để người dùng "chế" thêm text cao độ, hoặc thay đổi "bán kính ảnh hưởng để chạy lại lisp

2. Với toạ độ X, Y: Đối tượng điểm đo là loại gì: block, point, circle... hay tổng hợp nhiều loại đối tượng thể hiện điểm đo, từ đó mới dùng ssget để tìm toạ độ X, Y điểm chèn của điểm đo.

Một số tổng quát để viết lisp này vậy.

Cảm ơn anh. Khi nào anh rãnh viết giúp em với..hihi

  • Vote giảm 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
3 giờ trước, M se đã nói:

Cảm ơn anh. Khi nào anh rãnh viết giúp em với..hihi

 

Hết cách ly xã hội vì con virus Vũ Hán, đi làm lại, bây giờ ít rãnh rồ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

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

×