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

Tìm đoạn thẳng gần điểm nhất

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

Bạn hãy thử tốc độ của lisp dưới đây.

 

Hàm TIMB tìm LINE nằm trên boundary chứa điểm bạn nhập vào. LINE này không phải là line gần nhất nhưng chắc chắn là line nằm trên boundary.

Cú pháp: (TimB p)

P là điểm bạn cần tìm boundary.

Hàm TimB trả về ename của đối tượng Line thoả mãn.

Vi du:

(timB (list 590124.2 1181241.3 0.00))

Ket qua: Entity name: 7ef664a0>

 

Hãy sử dụng lệnh TIM dưới đây để thử nghiệm hàm TIMB. Bạn nen unlock các layer boundary để lệnh TIM có thể highlight đối tượng được tìm thấy cho bạn dễ nhìn.

(defun timb(p)
 (command ".zoom" "e")
 (setq p3    (list (- (car (getvar "VIEWCTR")) (* 1.0 (getvar "VIEWSIZE")))
	    (cadr p)

      )
p4    (list (+ (car (getvar "VIEWCTR")) (* 1.0 (getvar "VIEWSIZE")))
	    (cadr p)

      )
ss    (ssget "f" (list p3 p4))
sl    (if ss
	(sslength ss)
	0
      )
index 0
xmin (car p4)
p4 (append p4 (list 0.0))
p (list (car p) (cadr p) 0.0)
 )
 (while (    (setq ent	(ssname ss index)
  tt	(entget ent)
  index	(1+ index)
   )
   (if	(= "LINE" (cdr (assoc 0 tt)))
     (progn
(setq p1    (cdr (assoc 10 tt))
      p2    (cdr (assoc 11 tt))
      pgiao (inters p1 p2 p p4)
)
(if (and pgiao (> xmin (car pgiao)))
  (setq
    xmin (car pgiao)
    entmin ent
  )
)
     )
   )
 )
 (command ".zoom" "p")
 entmin
)

(defun c:tim ()
 (setq	p (getpoint "\nVao diem: "))
 (setq entlinecantim (timb p))  
 (sssetfirst (ssadd entlinecantim) (ssadd entlinecantim))
 (princ)
)

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 hãy thử tốc ðộ của lisp dýới ðây.

Cám õn bạn. Hàm của bạn rất hay. Tốc ðộ nhanh. Lisp bạn vẫn dùng (zoom "e") và (zoom "p") nên không biết khi ðýa vào chýõng trình của tôi nó chạy nhý thế nào. ðể tôi ghép vào rồi sẽ thử xem.

Tuy nhiên, do bạn dùng (ssget "f") nên nếu line là nét ðứt và nếu point nằm giữa khoảng ðứt ðó thì hàm (ssget "f") trả về nil (bạn xem file kèm theo).

http://www.cadviet.com/upfiles/mau2.dwg

Tôi vừa mới chợt nghĩ ra ðây thôi.

Nhờ cái cách tìm line của bạn mà tôi ðã nghĩ ra cách tìm line cần thiết mà không dùng ðến ssget rồi. Cám õn bạn. Diễn ðàn thật là hữu ích.

Sẽ còn nhiều chủ ðề khác phải nhờ ðến sự hỗ trợ của bạ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
Cám õn bạn. Hàm của bạn rất hay. Tốc ðộ nhanh. Lisp bạn vẫn dùng (zoom "e") và (zoom "p") nên không biết khi ðýa vào chýõng trình của tôi nó chạy nhý thế nào. ðể tôi ghép vào rồi sẽ thử xem.

Tuy nhiên, do bạn dùng (ssget "f") nên nếu line là nét ðứt và nếu point nằm giữa khoảng ðứt ðó thì hàm (ssget "f") trả về nil (bạn xem file kèm theo).

http://www.cadviet.com/upfiles/mau2.dwg

Tôi vừa mới chợt nghĩ ra ðây thôi.

Nhờ cái cách tìm line của bạn mà tôi ðã nghĩ ra cách tìm line cần thiết mà không dùng ðến ssget rồi. Cám õn bạn. Diễn ðàn thật là hữu ích.

Sẽ còn nhiều chủ ðề khác phải nhờ ðến sự hỗ trợ của bạn.

Trường hợp cá biệt này bạn xử lý được.

 

Ví dụ tôi đưa lên chỉ để minh họa rằng có nhiều cách để giải quyết một vấn đề. Và chừng nào vấn đề còn chưa được giải quyết thấu đáo thì chúng ta không nên áp đặt bất cứ một phương pháp tiếp cận cụ thể nào. Ví dụ trong bài toán của bạn, chỉ vì bạn áp đặt rằng phải line gần nhất thì mới là line xuất phát để tìm boundary, dẫn đến bạn húc phải một hòn đá tảng.

 

Chắc chắn bạn sẽ tìm được các phương pháp hay hơn nhiều để xử lý vấn đề của bạn vì bạn rất tâm huyết với 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

Nếu như bằng phương pháp tự động tìm thửa của bạn mà hoàn thành thì có thể gọi đó là một lệnh Bpoly_pro mới cho cad đấy, sẽ là rất tiện dụng cho người vẽ bản đồ. Bản thân tôi cũng biết dùng tính năng topo của cadmap là khó khăn đối với user ko phân lớp tốt khi vẽ hoặc kỹ năng dùng cad của họ ko tốt hay như file nó quá rối. Thực ra với các file có vài nghìn thửa gặp ko nhiều...tôi cũng như bạn ghép tất cả các tờ bản đồ vào (vd bđ của cả 1 phường) để chạy thử là chính và kiểm tra tốc độ hay tính chính xác. Trong bđ địa chính người ta đã phải cắt tờ rồi nên việc tạo hskt cho từng tờ 1 cũng không phải là quá lâu.

 

Khi in HSKT, các thửa liền kề (cả giao thông và thủy hệ) ðã bị hình vuông cắt ði thành cái ða giác bất kỳ, xác ðịnh ðýợc cái ða giác này ðôi khi cũng rất khó. Nếu xác ðịnh ðýợc nó rồi thì có thể tìm vị trí trống nhất ðể ðặt cái nhóm số thửa, loại ðất, diện tích, hay tên ðýờng, tên sông vào....

Chính vì cái khó khăn đó mà tôi chọn giải pháp đóng thửa trước (tạo Closed_polyline) để chính nhờ các Closed_polyline này mà có thể xác định được xem nên đặt các yếu tố liền kề vào vị trí nào cho hợp lý.

 

À, tôi không rõ bằng cái cách gì mà bạn có thể tung 1000 thửa vào một file nhỉ. Bạn chèn vào sau khi chúng ðã thành file (mỗi file một thửa) ? Nếu ngay trong thời ðiểm ðang xuất HSKT mà bạn có thể ném chúng vào một file thì tôi chýa nghĩ ra.

Tôi chèn tất cả các thửa vào 1 file trong quá trình tool chạy chứ không tạo mỗi thửa 1 file rồi sau đó ghép vào sau. Tôi ko viết bằng lisp nên việc tạo 1000 thửa vào 1 file ko gặp khó khăn lắm. Cmap hay famis (nếu ghi ra file) đều chạy ra mỗi thửa 1 file... làm cách này khi in hay khi cần chỉnh sửa cho các thửa trước khi in khá bất tiện vì fải mở từng file một...lâu lắm.

  • 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  

×