Truy xuất địa chỉ từ file cad (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

kieuhuy_bmt

Thành viên thường trực
Tham gia
18/10/07
Bài viết
288
Được thích
36
Nghề nghiệp
Đang thất nghiệp
Tôi gặp tình huống này!
Trong bản đồ đo địa chính đã có ranh giới thôn buôn. các thửa đất cần phải được tổng hợp theo tên đơn vị hành chính ấy. Vậy nhờ các cao thủ "võ lâm" thường hay dùng bản đồ giải bài toán này giúp.
Yêu cầu cụ thể xem File Excel.
Xem bản đồ trong File CAD.
http://www.mediafire.com/?ss2i1wlhi38zav5
 
Lần chỉnh sửa cuối:
Tôi nghĩ vấn đề này giải quyết được:
Sub TimDiaDanh()
Duyet tung dong trong file excel​
soThua = Tạo một text trong cad tai tọa độ của thửa đang xét (gán layer = sothua)​
tenDiaDanh = noiNaoChuaNo()​
ghi kết quả vào file excel​
cuối duyệt​
End sub

Hàm noiNaoChuaNo :
-Chuẩn bị file cad:
o Dùng lệnh bo tạo các polyline đóng vùng hành chính
o Tạo text tên vùng HC( địa danh) nằm trong vùng hoặc tạo xdata của polyline gán tên HC

Function noiNaoChuaNo() as string
Dim tenDiaDanh as string
Off các layer chỉ để lại những layer cần thiết
tapChonPoLy = chọn tất cả polyline (chuẩn bị ở trên)

duyệt (từng POLY )
tapSOTHUA = chọn các text trên layer sothua và nằm trong POLY
nếu( tapSOTHUA.count >0) thi
tenDiaDanh = chọn các text trên layer DiaDanh và nằm trong POLY (hoặc lấy từ xdata)
xoa tapSOTHUA​
thoát duyệt​
cuối nếu​
cuối duyệt
noiNaoChuaNo = tenDiaDanh​
End function
Khi nào có thời gian mình viết thử xem.
 
Lần chỉnh sửa cuối:
Một cách tiếp cận khác:
Từ O (tâm thửa) vẽ tia Ox song song với trục hoành, xem nó cắt những đa giác nào, với mỗi đa giác bị cắt đếm số giao điểm (nếu cắt tại đỉnh thì đếm 2 hoặc 0, điểm kép). Nếu số giao diểm là lẽ thì O nằm trong đa giác đó. Các bạn xem có thể làm được không.
 
Đa tạ bác HNP!
Tôi thấy công việc của cánh Đo đạc vất vả quá nên gửi các bác xem giúp. Thực tế thế đấy! vì khi đo xong ngoài ruộng mới biết được cái biên giới Thôn, Buôn. Vì vậy mới có cái công việc nội nghiệp như tôi trình bày ở trên. hiện nay anh em mò mẫm nhập bằng tay e rằng vừa kg chính xác vả lại biết bao giờ mới xong. Vấn đề các Bác đã nắm rõ, vậy mong các Bác giúp 1 tay. Kính chào và chờ kết quả của các Bác.
 
Không thấy các Cao thủ ra tay:
Cụ thể ở các File này:
 

File đính kèm

Tôi nghĩ không làm được vì không có mô hình chuẩn trong AutoCad, do đó việc xác định tọa độ thuộc mảnh nào sẽ khó vì không có thuật toán. Nếu từng khoảnh được bao kín trong polyline thì công việc này có khả năng thực hiện được.
 
Tôi nghĩ không làm được vì không có mô hình chuẩn trong AutoCad, do đó việc xác định tọa độ thuộc mảnh nào sẽ khó vì không có thuật toán.
Anh ơi! Em chưa hiểu ý này. Dựa vào tâm thửa có tọa độ X, Y sao để gán cái tên Thôn vào Excel thôi. Em nghĩ không liên quan gì đến "mảnh bản đồ".

Nếu từng khoảnh được bao kín trong polyline thì công việc này có khả năng thực hiện được.
Em gửi anh cái File tổng khu đo có hết tất cả các thửa đất, anh xem có thể xử lý theo hướng này đc kg. (Mở File bằng phần mềm MicroStation anh nhé)
http://www.mediafire.com/?t5o99zttts451mk
 
Lần chỉnh sửa cuối:
kieuhuy_bmt, chiều này rảnh viết thử vừa mới xong, thấy cũng được được hihi, gửi bạn file “tdd.exe”. bạn chạy thử xem sao, nếu có ai muốn tìm hiểu code thì tôi sẽ up sau.
File cad: tôi đã thêm 2 layer (polygon và TenDiaDanh)
File excel: tôi đã tạo một số thửa để chạy thử
Cách chạy :
1) Mở file cad – zoom Extents, rồi để đó (2007)
2) Mở file excel – chon vùng cần chạy (vùng 4 cột, n hàng, không chọn tiêu đề), rồi để đó
3) chạy file tdd.exe ( để cho dễ bạn tạo shortcut ở thanh taskbar, hay bất cứ bằng cách nào)
Quên: hãy chú ý tọa độ x,y có thể phải đảo ngược
 

File đính kèm

Lần chỉnh sửa cuối:
Chiều nay Bác Hướng báo tin ..., thấy tình hình chắc lâu lắm mới giải quyết đc. Kg ngờ tin vui đến sớm hơn mình tưởng. Cảm ơn các bác. Bác HNP cho mình xin cái VIDEO hướng dẫn chạy File luôn với, mình kg biết dùng CAD.
Cái Dữ liệu "ranh thôn" trong CAD có thể đem nguyên nó sang Excel đc kg hả bác, ý mình nói là ở dạng đồ thị hay dữ liệu gì đó... đã qua chế biến ..
 
Video [video=youtube;nlpTh7QrOEQ]http://www.youtube.com/watch?v=nlpTh7QrOEQ&feature=youtu.be[/video]
ranh thôn đem qua excel nếu để chỉ xem thì vào cad chọn copy rồi vào excel dán vào, còn để khai thác thì phải biết rỏ mục đích gì nữa.
 
Như vậy là có thể chế biến đc hả bác HNP. Thay vì phải mở nhiều File trong đó có File CAD, bác xem làm thế nào mà anh em chỉ cần mở mỗi File Excel để bấm tra mã danh thôn.
 
Như vậy là có thể chế biến đc hả bác HNP. Thay vì phải mở nhiều File trong đó có File CAD, bác xem làm thế nào mà anh em chỉ cần mở mỗi File Excel để bấm tra mã "thôn".
(Mình chỉ xem video, còn tải nó về thì chưa biết quê quá.. )
 
Mỗi phần mềm đều có thế mạnh riêng của nó, thật ra người ta cũng có thể viết những công cụ tính toán bảng biểu này nọ, nhưng quá cực khổ, trong khi đó Excel quá mạnh về chuyện này , thế nên mới có chuyện liên kết chúng, ý tưởng một phần mềm vừa quản lý dữ liệu không gian vừa quản lý dữ liệu thuộc tính đã có từ rất lâu, Autodesk cũng có phân hệ này, Arcgis của Esri rất mạnh về chuyện này, nhưng cái chuyện vẽ vời thì không thể sánh bằng Autocad, cái chuyện tính toán bảng biếu thống kê này nọ không thể sánh bằng Excel. Tóm lại nên sử dụng chúng một cách hợp lý, đừng nên gồng mình bắt Excel làm chuyện của Cad và ngược lại.
Các anh em đo đạc một ngày mà không mở Cad lên zoom zoom pan pan thì bị bệnh rồi hihihi. Chúc bạn vui vẽ với công việc.
 
Cảm ơn Bác! Tài nguyên là hữu hạn chứ có vô tận đâu,, tại em đòi hỏi thái quá!
ở vị trí "hàng, cột" trong cái bài ở mục 1 là em giả dụ. Trong cái File Excel bác đã làm, em thay đổi (cột, hàng, tên File, tên sheet ) thì có ảnh hưởng gì kg?
Bác xem và chỉnh giúp em để dán cái tên "thôn " như trong mẫu này với (Dữ liệu ở trang trên em đã gửi): http://www.giaiphapexcel.com/forum/attachment.php?attachmentid=86117&d=1342769691

Em dw đc VIDEO về rồi. Sau này em nhờ với "xã" khác Bác giúp em nhé (em gặp đúng sư phụ rồi) hehe.
 
Lần chỉnh sửa cuối:
Tên file, tên sheet không quan trọng, miễn là nó nằm trước mắt mình, file bạn gửi thì chọn E4:Hxx rồi chạy thôi.
 
Đồng hồ chỉ 0 g 48 rồi. kg biết Bác còn làm kg.
Em dùng win XP nên mở ra kg thấy gống cái hình trên Video. Xong nhấp chuột chả giống ai, một hồi sau thấy cũng có dãy chữ nó tự chậm chậm nhả ra (mừng quá), xong có 1 em kg có chữ nào (455038,24 ;1462868,39) nhờ bác bấm lại thử.
 
Tôi gặp tình huống này!
Trong bản đồ đo địa chính đã có ranh giới thôn buôn. các thửa đất cần phải được tổng hợp theo tên đơn vị hành chính ấy. Vậy nhờ các cao thủ "võ lâm" thường hay dùng bản đồ giải bài toán này giúp.
Yêu cầu cụ thể xem File Excel.
Xem bản đồ trong File CAD.
http://www.mediafire.com/?ss2i1wlhi38zav5

Tôi không là cao thủ trong AutoCAD, thấp thủ cũng chưa được. Vì thế tôi có 2 câu hỏi.
1. Biên giới mỗi thôn được tạo từ một loạt các Polyline? Nói cách khác nó được tạo từ đường gấp khúc khép kín qua một loạt điểm? Có thể đọc được tọa độ của những điểm đó? Chắc chắn phải đọc được.
2. Tọa độ của điểm thuộc mỗi thôn và các điểm ở phần 1 được tính trong cùng hệ tọa độ? Tức nếu trong các điểm ở phần 1 có điểm P với toạ độ (100, 200) và ta có điểm cần xét với tọa độ (100, 200) (không nhất thiết là điểm thuộc thôn) thì có nghĩa là ta đang xét điểm P? Nói cho cùng thì chúng có thể được tính trong 2 hệ tọa độ khác nhau nhưng ta biết được gốc tọa độ O' có tọa độ bao nhiêu trong hệ Oxy.
Nếu câu trả lời cho 2 câu hỏi trên là TRUE thì tôi nghĩ có thể dùng hàm API CreatePolygonRgn để tạo region rồi dùng hàm PtInRegion để xét xem điểm cho trước có thuộc region hay không.
 
Tôi không là cao thủ trong AutoCAD, thấp thủ cũng chưa được. Vì thế tôi có 2 câu hỏi.
1. Biên giới mỗi thôn được tạo từ một loạt các Polyline? Nói cách khác nó được tạo từ đường gấp khúc khép kín qua một loạt điểm? Có thể đọc được tọa độ của những điểm đó? Chắc chắn phải đọc được.
2. Tọa độ của điểm thuộc mỗi thôn và các điểm ở phần 1 được tính trong cùng hệ tọa độ? Tức nếu trong các điểm ở phần 1 có điểm P với toạ độ (100, 200) và ta có điểm cần xét với tọa độ (100, 200) (không nhất thiết là điểm thuộc thôn) thì có nghĩa là ta đang xét điểm P? Nói cho cùng thì chúng có thể được tính trong 2 hệ tọa độ khác nhau nhưng ta biết được gốc tọa độ O' có tọa độ bao nhiêu trong hệ Oxy.
Nếu câu trả lời cho 2 câu hỏi trên là TRUE thì tôi nghĩ có thể dùng hàm API CreatePolygonRgn để tạo regio n rồi dùng hàm PtInRegion để xét xem điểm cho trước có thuộc region hay không.

Tôi không làm được bản đồ vì khoái khẩu món Excel vả lại thấy anh em Đo đạc ở cơ quan làm vất vả. Hai hệ thống phần mềm có những chức năng, điểm mạnh riêng có thể hỗ trợ cho nhau, như Bác HNP đã nói rõ. Biết vậy, biết diễn đàn này có rất nhiều người thực sự làm được vì vậy tôi gửi lên nhờ các Bác ấy. Hai điều bác hỏi thực sự là tôi kg rõ lắm, vụ này phải nhờ Bác HNP.
 
Lần chỉnh sửa cuối:
Tên file, tên sheet không quan trọng, miễn là nó nằm trước mắt mình, file bạn gửi thì chọn E4:Hxx rồi chạy thôi.
Cảm ơn!
Em gửi cái File tổng thể (nhưng chưa chuyển qua CAD). Trong này toàn bộ thửa đất đo đã nằm trong khu đo toàn xã. Nhờ bác nghiên cứu có thể trút từ CAD ra cái Excel có cả địa danh "Địa chỉ tọa lạc của thửa đất" đc kg đỡ đc một công đoạn.
http://www.mediafire.com/myfiles.php#
 
Đồng hồ chỉ 0 g 48 rồi. kg biết Bác còn làm kg.
Em dùng win XP nên mở ra kg thấy gống cái hình trên Video, xong có 1 em kg có chữ nào (455038,24 ;1462868,39) nhờ bác bấm lại thử.
Bạn tải lại file tdd.exe nhe, tôi lo tập trung vào vấn đề quên giải phóng bộ nhớ, máy không bị đơ là hên rồi hihi, thửa đất đó tôi chạy ra kết quả bình thường.
Không nhất thiết phải chạy như tôi, tại trong video tôi phải chuột để cho bạn thấy thôi, cad excel cái nào trước cũng được, sau cùng là "tdd.exe" (tọa độ "." không phải ",")
 
tôi có 2 câu hỏi.
1. Biên giới mỗi thôn được tạo từ một loạt các Polyline? Nói cách khác nó được tạo từ đường gấp khúc khép kín qua một loạt điểm? Có thể đọc được tọa độ của những điểm đó? Chắc chắn phải đọc được.
2. Tọa độ của điểm thuộc mỗi thôn và các điểm ở phần 1 được tính trong cùng hệ tọa độ? Tức nếu trong các điểm ở phần 1 có điểm P với toạ độ (100, 200) và ta có điểm cần xét với tọa độ (100, 200) (không nhất thiết là điểm thuộc thôn) thì có nghĩa là ta đang xét điểm P? Nói cho cùng thì chúng có thể được tính trong 2 hệ tọa độ khác nhau nhưng ta biết được gốc tọa độ O' có tọa độ bao nhiêu trong hệ Oxy.
Nếu câu trả lời cho 2 câu hỏi trên là TRUE thì tôi nghĩ có thể dùng hàm API CreatePolygonRgn để tạo region rồi dùng hàm PtInRegion để xét xem điểm cho trước có thuộc region hay không.
Trước hết rất vui khi bạn tham gia và khẳng định làm được, về lý thuyết câu trả lời cho 2 câu hỏi trên là đúng, thực tế bản đồ địa chính không ngon lành như vậy, có khi không khép kín, các line chồng đè nhau, hơn nữa không thể phân biệt được line nào thuộc về ranh giới vùng (thôn) nào, để cung cấp các tham số cho hàm CreatePolygonRgn gặp nhiều khó khăn, nếu giải quyết từng thôn một thì OK. Cho nên ta phải lợi dụng công cụ của autocad tút lại dữ liệu đầu vào một chút, sau đó giải quyết bài "điểm có nằm trong đa giac?" bằng cách sử dụng GDI cũng rất OK.
Chúc bạn có ngày cuối tuần vui vẽ!
 
Cảm ơn!
Em gửi cái File tổng thể (nhưng chưa chuyển qua CAD). Trong này toàn bộ thửa đất đo đã nằm trong khu đo toàn xã. Nhờ bác nghiên cứu có thể trút từ CAD ra cái Excel có cả địa danh "Địa chỉ tọa lạc của thửa đất" đc kg đỡ đc một công đoạn.
http://www.mediafire.com/myfiles.php#
Tôi thật sự không có nhiều thời gian, nhưng tôi sẽ làm khi có thể, bạn thấy đó tôi vào diễn đàn từ rất lâu, nhưng chỉ mới tham gia có 2 chủ đề, tôi thường vào xem lúc rỗi, hầu hết các chủ đề đều có nhiều người tham gia học hỏi, truyền đạt, góp ý... Còn vấn đề của bạn sao mà ít người quan tâm thế, cho nên tôi mới mạo muội viết vài dòng.
Chúc bạn cuối tuần vui vẽ!
 
Lần chỉnh sửa cuối:
Còn vấn đề của bạn sao mà ít người quan tâm thế, cho nên tôi mới mạo muội viết vài dòng.
Chúc bạn cuối tuần vui vẽ!
Em tham gia diễn đàn này lâu, nhưng toàn nhận chứ chưa cho ai thứ gì. Vì kg có kiến thức thì có gì mà cho hả bác, lắm lúc cũng thấy áy náy, và có lần góp ý với diễn đàn làm cách nào đó để khi những người như em hay ai đó có nhu cầu về tài nguyên trên diễn đàn ủng hộ bằng cách "Nhắn tin" để diễn đàn có kinh phí hoạt động vả lại tạo sự công bằng giữa "cho" và "nhận", nhưng chưa được diễn đàn cho phép.
Tôi thật sự không có nhiều thời gian, nhưng tôi sẽ làm khi có thể, ..
Thi thoảng bác vào góp tý tài nguyên cho bọn em xài ké nhé.
Sợ Bác bận nên em hơi tham lam vụ này: Bác sửa cho em cái "tên Thôn" đúng với tài liệu ban đầu trong File Cad. Nếu có thể bác tặng em cái Code và chỉ cho cách làm luôn với. (Bác gửi cho em vào đây với E-Mail là : olan.bmt@gmail.com).
 
Lần chỉnh sửa cuối:
Trước hết rất vui khi bạn tham gia và khẳng định làm được

Tôi chỉ dám nghĩ là nếu 2 câu trả lời đều đúng thì có thể dùng ... Tôi chưa dám khẳng định chắc chắn.

về lý thuyết câu trả lời cho 2 câu hỏi trên là đúng

Theo như những gì bạn viết ở dưới thì câu trả lời cho câu 1 là không đúng.

thực tế bản đồ địa chính không ngon lành như vậy, có khi không khép kín, các line chồng đè nhau, hơn nữa không thể phân biệt được line nào thuộc về ranh giới vùng (thôn) nào

Câu hỏi 1: "Nói cách khác nó được tạo từ đường gấp khúc khép kín qua một loạt điểm?"
Tôi hiểu là "bản đồ địa chính không ngon lành như vậy, có khi không khép kín", như vậy câu trả lời cho câu hỏi 1 là KHÔNG ĐÚNG chứ.
Tôi chỉ nghĩ rằng khi 2 câu trả lời đều đúng thì mới dùng CreatePolygonRgn và PtInRegion. Ý tưởng thế thôi còn đúng là dùng được hay không thì phải nghiên cứu cụ thể.

Cho nên ta phải lợi dụng công cụ của autocad tút lại dữ liệu đầu vào một chút

... và sau khi tút rồi thì mỗi thôn được "gói" gọn trong 1 polyline khép kín. Lúc này thì câu trả lời cho câu 1 là đúng. Vậy có thể dùng CreatePolygonRgn và PtInRegion. Việc đọc các Coordinate thì dễ rồi. Tôi đã thử đọc các điểm của 1 polyline (từ hình vẽ đã tút của bạn) rồi vẽ nó ra (hàm API Polygon) thì thấy rất đẹp. Vấn đề còn lại là cái "tút" kia. Tôi nhìn hình vẽ bạn đã tút lại thì thấy hết các polyline.
Bạn đã tút như thế nào? Chả lẽ tút "tay", tức chọn một số polyline "rời" rồi gộp chúng thành 1 polyline khép kín? Tôi hỏi vì tôi cũng không rành mấy thao tác này.
Tôi nghĩ bạn đã đưa lên diễn đàn thì nên đưa code. Bạn đưa EXE thì chỉ giải quyết bài cho người hỏi, người khác không học được gì. Bạn đưa con cá cho người hỏi thì cũng tốt nhưng nếu bạn dậy cách câu thì nhiều người sẽ học hỏi được ở bạn, công lao của bạn có ích hơn. Tóm lại, bạn nên đưa code. (kể cả cái tút kia)

Chúc bạn cuối tuần vui vẽ!

Tôi cũng chúc bạn mỗi ngày một niềm vui. Và nhiều thời gian rỗi cho mình và cho những người thân của mình.
 
Lần chỉnh sửa cuối:
Em cũng chúc các bác Sức khỏe dồi dào, thường vào đây thăm nom tụi em.
 
Lần chỉnh sửa cuối:
Theo như những gì bạn viết ở dưới thì câu trả lời cho câu 1 là không đúng.
Tôi đã nói "theo lý thuyết..." tức là quy định trong địa chính là thế, vì vậy có những bản đồ phường xã rất tốt, cho nên nhiều người nghĩ nó là đúng, với những người thường thao tác trên BĐĐC mới thấy nó rối rắm như thế nào, nếu sủ dụng từng tờ, xã phường thì cũng chưa thấy gì, nhưng nếu ghép cả thành phố thì ...có khi "gian nan bắt đầu nản".
Tôi chuẩn bị BĐ và viết code đúng như những gì đã nói ở trang 1, kể cả việc đưa code tối nay(máy đang sd không có chứa code). Thật ra việc "tút" này nhằm giải quyết vấn đề thôi chứ nó sai quy định của BDDC(chồng đè polyline).
Tôi hiểu siwtom đang nói đến "Win32 GDI API", các bạn khác đừng nhằm với " AutoCAD API"

 
Lần chỉnh sửa cuối:
Tôi đã nói "theo lý thuyết..." tức là quy định trong địa chính là thế, vì vậy có những bản đồ phường xã rất tốt, cho nên nhiều người nghĩ nó là đúng, với những người thường thao tác trên BĐĐC mới thấy nó rối rắm như thế nào, nếu sủ dụng từng tờ, xã phường thì cũng chưa thấy gì, nhưng nếu ghép cả thành phố thì ...có khi "gian nan bắt đầu nản".
Tôi chuẩn bị BĐ và viết code đúng như những gì đã nói ở trang 1, kể cả việc đưa code tối nay(máy đang sd không có chứa code). Thật ra việc "tút" này nhằm giải quyết vấn đề thôi chứ nó sai quy định của BDDC(chồng đè polyline).

Tôi hiểu siwtom đang nói đến "Win32 GDI API", các bạn khác đừng nhằm với " AutoCAD API"


Ý tôi hỏi về bài cụ thể này mà.
Tất nhiên mọi thao tác, thêm thắt để giải quyết vấn đề là làm trên bản sao thôi.
Chính xác, ý tôi nói API là Windows API - WinAPI, vì còn nhiều cái có API lắm.
 
Cảm ơn các bác!
Em nhờ các bác chế biến (dữ liệu được mang sang) để cho Excel truy xuất ngay trong WB.
 
Cảm ơn các bác!
Em nhờ các bác chế biến (dữ liệu được mang sang) để cho Excel truy xuất ngay trong WB.
Với ý sử dụng WinAPI của siwtom thì giải quyết ngon vân đề nay đấy, đầu tiên trich tọa độ ranh thôn sang excel lưu trữ, sau đó tìm địa danh bằng cách chạy pointInPolygon (sd WinAPI) mà không cần autocad nữa.
 
Đây là 2 hàm chính, các bạn có thể download prj chế biến tùy ý.
Mã:
Public Sub Main()  
   On Error Resume Next
   Set oAutocad = New clsAutocad
   Set AutoCAD = oAutocad.ACADApp
   Set Thisdrawing = oAutocad.Document
   Dim lngCol As Long, lngRow As Long
   Dim txt As AcadText
   Dim pt(2) As Double
   Dim s As String
   Dim soThua As String
   Dim oLayer As AcadLayer
   On Error Resume Next
   Set oLayer = Thisdrawing.Layers.Add("SoThua")
   GetExcel
   pt(2) = 0
   For lngRow = 1 To exRang.Rows.Count
      soThua = exRang(lngRow, 1)
      pt(0) = Val(exRang(lngRow, 2))
      pt(1) = Val(exRang(lngRow, 3))
      Set txt = Thisdrawing.ModelSpace.AddText(soThua, pt, 1)
      txt.Layer = "SoThua"
       'Thisdrawing.Regen acActiveViewport
      exRang(lngRow, 4) = timDiaDanh
      txt.Delete
   Next lngRow
   
thoat:
Set txt = Nothing
Set oLayer = Nothing
freeApp
End Sub


Private Function timDiaDanh() As String
   Dim tenDiaDanh As String
   Dim ssPoly As AcadSelectionSet
   Dim ssSoThua As AcadSelectionSet
   Dim ssTenDiaDanh As AcadSelectionSet
   Dim fType(2) As Integer, fData(2)
   Dim fT(2) As Integer, fD(2)
   
   tenDiaDanh = ""
   On Error Resume Next
   Set ssPoly = Thisdrawing.SelectionSets("ssPoly")
   If Err Then Set ssPoly = Thisdrawing.SelectionSets.Add("ssPoly")
   ssPoly.Clear
   fType(0) = 0: fData(0) = "POLYLINE,LWPolyline" '"TEXT"
   fType(1) = 8: fData(1) = "polygon"
   fType(2) = 67: fData(2) = 0
   ssPoly.Select acSelectionSetAll, , , fType, fData
   
   fType(0) = 0: fData(0) = "TEXT"
   fType(1) = 8: fData(1) = "TenDiaDanh"
   
   fT(0) = 0: fD(0) = "TEXT"
   fT(1) = 8: fD(1) = "SoThua"
   fT(2) = 67: fD(2) = 0
   
   On Error Resume Next
   Set ssTenDiaDanh = Thisdrawing.SelectionSets("ssTenDiaDanh")
   If Err Then Set ssTenDiaDanh = Thisdrawing.SelectionSets.Add("ssTenDiaDanh")
   ssTenDiaDanh.Clear
   
   On Error Resume Next
   Set ssSoThua = Thisdrawing.SelectionSets("ssSoThua")
   If Err Then Set ssSoThua = Thisdrawing.SelectionSets.Add("ssSoThua")
   ssSoThua.Clear
   Dim ent As AcadText
   Dim poly As AcadEntity
   Dim dblCurCords() As Double
   Dim dblNewCords() As Double
   Dim iMaxCurArr, iMaxNewArr As Integer
   Dim iCurArrIdx, iNewArrIdx, iCnt As Integer
   
   For Each poly In ssPoly
      If poly.ObjectName = "AcDbPolyline" Then
         dblCurCords = poly.Coordinates
         iMaxCurArr = UBound(dblCurCords)
         iMaxNewArr = ((iMaxCurArr + 1) * 1.5) - 1
         ReDim dblNewCords(iMaxNewArr) As Double
         iCurArrIdx = 0: iCnt = 1
         For iNewArrIdx = 0 To iMaxNewArr
            If iCnt = 3 Then
               dblNewCords(iNewArrIdx) = 0
               iCnt = 1
            Else
               dblNewCords(iNewArrIdx) = dblCurCords(iCurArrIdx)
               iCurArrIdx = iCurArrIdx + 1
               iCnt = iCnt + 1
            End If
         Next
         ssSoThua.Clear
         ssSoThua.SelectByPolygon acSelectionSetWindowPolygon, dblNewCords, fT, fD
         If ssSoThua.Count > 0 Then
            ssTenDiaDanh.Clear
            ssTenDiaDanh.SelectByPolygon acSelectionSetWindowPolygon, dblNewCords, fType, fData
            Set ent = ssTenDiaDanh(0)
            tenDiaDanh = ent.TextString
            ssSoThua.Delete
            Exit For
         End If
      End If
   Next poly
   Set ssPoly = Nothing
   Set ssSoThua = Nothing
   Set ssTenDiaDanh = Nothing
   Set ent = Nothing
   Set poly = Nothing
   
   timDiaDanh = tenDiaDanh
   
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
Bác sửa cho em cái "tên Thôn" đúng với tài liệu ban đầu trong File Cad. Nếu có thể bác tặng em cái Code và chỉ cho cách làm luôn với. (Bác gửi cho em vào đây với E-Mail là : olan.bmt@gmail.com).
- Sửa tên thôn rất dễ, chỉ việc doubleclick vào text rồi đánh lại thôi (tôi sd bảng mã VNI bởi vì nhằm cad2007 chỉ support unicode cho mtext, thật sự tôi không thích viết cho mọi cad mặc dù có thể)
- sủ dụng lệnh BOUNDARY trong cad để tạo polyline đóng kín (chú ý zoom cái thôn lên cho vừa màn hình, đừng vượt khổi màn hình, lấy màn hình lớn lớn tý ít bị lỗi hơn)
2 việc trên là rất đơn giản với các anh em đo đạc
Tôi nghĩ bạn làm được
Chúc sức khỏe!
 
Lần chỉnh sửa cuối:
Xin lỗi các bạn, tôi nhằm, cad 2007 đã support unicode tốt (nhằm với 2004). cho nên ta có thể đánh tên thôn với bảng mã unicode cũng ok .
 
Với ý sử dụng WinAPI của siwtom thì giải quyết ngon vân đề nay đấy, đầu tiên trich tọa độ ranh thôn sang excel lưu trữ, sau đó tìm địa danh bằng cách chạy pointInPolygon (sd WinAPI) mà không cần autocad nữa.
Vụ này bác siwtom giúp tay với!

Sửa tên thôn rất dễ, chỉ việc doubleclick vào text rồi đánh lại thôi ...
Anh em làm được rồi bác à!
Còn mấy vụ kia các bác bày giúp.
 
Lần chỉnh sửa cuối:

Bài viết mới nhất

Back
Top Bottom