Đến nội dung


Hình ảnh
- - - - -

Lọc các đối tượng Text trên bản vẽ theo Color để chuyển sang Excell ?


  • Please log in to reply
18 replies to this topic

#1 hoangtan_vn

hoangtan_vn

    biết zoom

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

Đã gửi 02 January 2011 - 03:53 PM

Chào các bác,
Hiện em đang gặp một số khó khăn trong quá trình thống kê các đối tượng Text trong bản vẽ ví dụ như sau

Hình đã gửi

hiện bản vẽ của em lên tới hơn 500 thửa, quá trình thống kê các đối tượng Text này với em là quá vất vả
Em muốn nhờ các bác trên diễn đàn giúp em cái Lisp " Chuyển các đối tượng TEXT trong một vùng kín từ CAD sang Excell dựa vào màu sắc của TEXT"

- Các TEXT có cùng một màu được thống kê trên một cột Excell
- Không quan tâm đến việc đặt tên Layer
- Thống kê được nhiều đối tượng TEXT hơn
- Thống kê các đối tượng TEXT theo quy tắc từ TRÁI sang PHẢI, từ TRÊN xuống Dưới

Đây là bản vẽ của em với 5 loại màu đặc trưng của TEXT và kết quả ở dang Excell em muốn có

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

Em rất mong được các bác giúp đỡ
Em xin cảm ơn !
  • 0

#2 linhoreka

linhoreka

    biết lệnh erase

  • Members
  • PipPipPip
  • 106 Bài viết
Điểm đánh giá: 46 (tàm tạm)

Đã gửi 02 January 2011 - 04:51 PM

Hì, cái này khó nhỉ. Sao bạn không sử dụng block với attributes để ghi chú ? Nếu ngay từ ban đầu dữ liệu bản vẽ được liên kết tốt , thì sau chỉ cần thống kê những block với attributes ấy. Bây giờ số liệu không có liên kết gì với nhau, tản mát khắp nơi, hic
  • 1

#3 linhoreka

linhoreka

    biết lệnh erase

  • Members
  • PipPipPip
  • 106 Bài viết
Điểm đánh giá: 46 (tàm tạm)

Đã gửi 02 January 2011 - 05:48 PM

Bạn app file VBA này thử xem
Trong AutoCAD, bạn nhấn Alt+F8 rồi tìm macro "ThongKeTextTrongPolylines" để chạy macro. Bạn chọn toàn bộ vùng vẽ có các pline (đã có bộ lọc pline, bạn không cần phải click vào từng pline). Nhớ là để từ pline chọn được text thì bạn phải zoom sao cho text nằm trong vùng nhìn thấy của màn hình.

Nếu muốn nhanh, bạn tạo một lisp sau trong Notepad:

(defun C:TKText (/)
(vl-vbarun "ThongKeTextTrongPolylines")
(princ)
);defun

save thành file Lisp (có đuôi .LSP), app vào AutoCAD, rồi gõ lệnh TKTText. Bạn có thể thay đổi tên lệnh tùy ý bạn.

Lập trình hơn 1 tiếng đồng hồ. Hy vọng bạn có hơn 500 thửa đất để xử lý. Nếu bạn có ít hơn thì có lẽ làm bằng tay nhanh hơn lập trình, hì
Dẫu sao đây chỉ là cách chữa cháy. Bạn nên tạo block với attributes để ghi sô liệu cho lần sau dễ thống kê hơn.
  • 1

#4 hoangtan_vn

hoangtan_vn

    biết zoom

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

Đã gửi 02 January 2011 - 06:07 PM

Bạn app file VBA này thử xem
Trong AutoCAD, bạn nhấn Alt+F8 rồi tìm macro "ThongKeTextTrongPolylines" để chạy
Nếu muốn nhanh, bạn tạo một lisp sau trong Notepad:

(defun C:TKText (/)
(vl-vbarun "ThongKeTextTrongPolylines")
(princ)
);defun

save thành file Lisp (có đuôi .LSP), app vào AutoCAD, rồi gõ lệnh TKTText. Bạn có thể thay đổi tên lệnh tùy ý bạn.

Lập trình hơn 1 tiếng đồng hồ. Hy vọng bạn có hơn 500 thửa đất để xử lý. Nếu bạn có ít hơn thì có lẽ làm bằng tay nhanh hơn lập trình, hì



Cảm ơn bác nhiều, nhưng sao em thực hiện giống bác nói nhưng chẳng lên gì cả, bác chỉ dùm em với, món này em không biết gì cả ?
  • 0

#5 linhoreka

linhoreka

    biết lệnh erase

  • Members
  • PipPipPip
  • 106 Bài viết
Điểm đánh giá: 46 (tàm tạm)

Đã gửi 02 January 2011 - 06:10 PM

Hì, vừa edit xong bài trả lời ở trên thì ... Bạn chọn toàn bộ vùng vẽ có các pline (đã có bộ lọc pline, bạn không cần phải click vào từng pline). Nhớ là để từ pline chọn được text thì bạn phải zoom sao cho text nằm trong vùng nhìn thấy của màn hình.
  • 1

#6 hoangtan_vn

hoangtan_vn

    biết zoom

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

Đã gửi 02 January 2011 - 06:35 PM

Hì, vừa edit xong bài trả lời ở trên thì ... Bạn chọn toàn bộ vùng vẽ có các pline (đã có bộ lọc pline, bạn không cần phải click vào từng pline). Nhớ là để từ pline chọn được text thì bạn phải zoom sao cho text nằm trong vùng nhìn thấy của màn hình.


Em làm được rồi nhưng chỉ thấy nó hiện lên bảng thống kê
Hình đã gửi

Vậy kết quả chuyển sang Excell em không thấy đâu vậy bác
  • 0

#7 linhoreka

linhoreka

    biết lệnh erase

  • Members
  • PipPipPip
  • 106 Bài viết
Điểm đánh giá: 46 (tàm tạm)

Đã gửi 02 January 2011 - 06:47 PM

:D bạn nhấn OK & Copy >>> Vào Excel paste lên !
Còn sắp xếp theo thứ tự 1, 2, 3 thì bạn sử dụng Excel xử lý nhé !
  • 1

#8 hoangtan_vn

hoangtan_vn

    biết zoom

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

Đã gửi 02 January 2011 - 06:54 PM

:D bạn nhấn OK & Copy >>> Vào Excel paste lên !



Rất cảm ơn bác nhiều !
Nhưng em thấy nó chạy hơi ngược lại từ DƯỚI lên TRÊN bác ạ
  • 0

#9 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 03 January 2011 - 11:05 AM

Thì thế mới phải xử lý trong Excell ^^ E thì vẫn cay cú nhất cái vụ select order trong VBA, chẳng hiểu sao quét kiểu j thì kiểu,nó cứ lộn thằng quét cuối cùng thành thằng quét đầu tiên :D(
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#10 hoangtan_vn

hoangtan_vn

    biết zoom

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

Đã gửi 06 January 2011 - 09:39 PM

Chào bác linhoreka,
Máy hôm trước bác co gửi cho em một chương trình lọc các đối tượng Text theo màu, em có Dowload về nhưng quên chưa lưu và trong ổ mà vẫn để ở ổ C,vừa dồi đứa em của em nó nghịch máy tính bị lỗi Wind nên em đã cài lại máy và bị mất cái chương trình của bác dồi,
Em có vào lại CADVIET để Dowload lại nhưng link đã đã khóa mất dồi
Rất mong bác có thể gửi lại cho em xin cái chương trình mà bác đã gửi cho em
Vì công việc của em hay phải làm công tác thống kê như vậy
Mong được bác giúp đỡ.
Em xin cảm ơn bác nhiều !
  • 0

#11 linhoreka

linhoreka

    biết lệnh erase

  • Members
  • PipPipPip
  • 106 Bài viết
Điểm đánh giá: 46 (tàm tạm)

Đã gửi 14 January 2011 - 03:28 PM

Ừ, cái VBA này của bạn nó không phổ thông lắm nên chắc chỉ bạn dùng được thôi người khác không dùng đến nên tớ xóa đi cho thoáng :)
Link mới đây: Command TPL
Bạn appload vào AutoCAD rồi gõ lệnh TPL
  • 2

#12 hoangtan_vn

hoangtan_vn

    biết zoom

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

Đã gửi 14 January 2011 - 10:25 PM

Ừ, cái VBA này của bạn nó không phổ thông lắm nên chắc chỉ bạn dùng được thôi người khác không dùng đến nên tớ xóa đi cho thoáng :)
Link mới đây: Command TPL
Bạn appload vào AutoCAD rồi gõ lệnh TPL


Cảm ơn anh rất nhiều !
Chúc anh sức khoẻ và thành công
  • 0

#13 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 17 January 2011 - 01:22 PM

Ừ, cái VBA này của bạn nó không phổ thông lắm nên chắc chỉ bạn dùng được thôi người khác không dùng đến nên tớ xóa đi cho thoáng :)
Link mới đây: Command TPL
Bạn appload vào AutoCAD rồi gõ lệnh TPL

Pass là gì đấy bạn cho view code cái???
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#14 linhoreka

linhoreka

    biết lệnh erase

  • Members
  • PipPipPip
  • 106 Bài viết
Điểm đánh giá: 46 (tàm tạm)

Đã gửi 17 January 2011 - 02:18 PM

Pass là gì quên mất rồi :) không mở lại được nữa
Nhưng tớ vẫn lưu 1 bản không pass và chỉnh lại rồi post bên VBA Source Code cDynamicSS ấy, trong đó có luôn cái này
  • 1

#15 hoangtan_vn

hoangtan_vn

    biết zoom

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

Đã gửi 17 January 2011 - 09:23 PM

Anh linhoreka thân !
anh ơi, sao khi em chuyển sang bản vẽ khác lại không lấy được đối tượng Text mà chỉ hiện lên


http://www.cadviet.c...iles/3/1_36.jpg

Em hỏi khí không phải có gì không phải anh bỏ qua nhé, hay là anh viết lọc Text theo Layer
  • 0

#16 linhoreka

linhoreka

    biết lệnh erase

  • Members
  • PipPipPip
  • 106 Bài viết
Điểm đánh giá: 46 (tàm tạm)

Đã gửi 17 January 2011 - 10:48 PM

Có thể mấy ô chọn bị zoom, pan đi ra ngoài màn hình. Nếu text nằm ngoài màn hình thì không chọn được
Chương trình không có bộ lọc layer gì hết. Chỉ có lọc TEXT rồi tìm màu của TEXT.

Vậy nên nếu TEXT nằm trong màn hình mà vẫn không chọn được thì:
1. MTEXT ? >>> Explode ra hoặc là chỉnh lại code chọn cả MTEXT ?
2. TEXT màu không đúng ra Red, Yellow ... gì đó mà là màu nào đó đo đỏ, vàng vàng ?
3. Bạn up bản vẽ lên tớ xem kiểm tra
  • 1

#17 hoangtan_vn

hoangtan_vn

    biết zoom

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

Đã gửi 18 January 2011 - 06:06 PM

Có thể mấy ô chọn bị zoom, pan đi ra ngoài màn hình. Nếu text nằm ngoài màn hình thì không chọn được
Chương trình không có bộ lọc layer gì hết. Chỉ có lọc TEXT rồi tìm màu của TEXT.

Vậy nên nếu TEXT nằm trong màn hình mà vẫn không chọn được thì:
1. MTEXT ? >>> Explode ra hoặc là chỉnh lại code chọn cả MTEXT ?
2. TEXT màu không đúng ra Red, Yellow ... gì đó mà là màu nào đó đo đỏ, vàng vàng ?
3. Bạn up bản vẽ lên tớ xem kiểm tra



Cảm ơn anh !
em làm được dồi, code thi em không biết gì mà can thiệp cả, mà anh đặt password mà
em đã tìm ra cái lỗi của em dồi,
Nếu có gì trục trặc em sẽ nhờ anh giúp đỡ
  • 0

#18 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 18 January 2011 - 09:07 PM

Có thể mấy ô chọn bị zoom, pan đi ra ngoài màn hình. Nếu text nằm ngoài màn hình thì không chọn được
.....

Nếu text nằm ngoài màn hình thì không chọn được
-> Bạn có thể tìm điểm A(Xminct, Yminct), B(Xmaxct, Ymaxct)của 1 tập chọn Polyline và zoom trong vùng cửa sổ tạo bởi hình chữ nhật với AB là đường chéo.
Cách làm như sau :
- Qua mỗi phần tử Pline vừa chọn -> lấy ra điểm Xmin, Ymin, Xmax, Ymax. (sử dụng Method Getboundingbox)
-> Ta sẽ có được 1 danh sách gồm các Xmin của toàn bộ Pline này -> Lấy min của danh sách này ta được Xminct
-> Lấy min của 1 danh sách gồm các Ymin của toàn bộ Pline ta được Yminct
-> Lấy max của 1 danh sách gồm các Xmax của toàn bộ Pline ta được Xmaxct
-> Lấy max của 1 danh sách gồm các Ymax của toàn bộ Pline ta được Ymaxct
ZoomWindow tạo bởi 2 điểm A(Xminct, Yminct), B(Xmaxct, Ymaxct) sẽ giải quyết vấn đề trên.

Với Lisp xây dựng code đơn giản hơn, có thể sử dụng
(ACET-GEOM-SS-EXTENTS-FAST (ssget '((0 . "*POLYLINE") (70 . 1))))
là xong

Nhắc nhở bạn hoangtan_vn 1 lần nữa : Bạn không được post 1 nội dung trong các chủ đề khác nhau. Vì đó là vi phạm nội quy của diễn đàn. Các bài viết trùng nhau sẽ bị xóa đấy bạn ạ. Bạn có thể post bài để hỏi lại trong cùng 1 topic đó, không được mở 1 topic mới
  • 1

#19 phongleks

phongleks

    Chưa sử dụng CAD

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

Đã gửi 19 January 2011 - 12:03 AM

Sang kỳ tới mình làm đồ án tốt nghiệp nghành xây dựng dân dụng và công nghiệp.Nhưng hiện giờ vẫn chưa tìm được đề tài(trên 7 tầng,>500m2sàn).Anh chị nào có đề tài cho mình xin.Xin cảm ơn nhiều.ĐỊa chỉ:phongleks@gmail.com
  • 0