Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] lisp điền cao độ cho lớp đánh cấp


  • Please log in to reply
17 replies to this topic

#1 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 05 November 2013 - 02:00 PM

Mình đang làm 1 công việc thấy quá thủ công là phải điền cao độ cho từng trắc ngang. Đang muốn tự động 1 tí cho đỡ phải mất công và đang mày mò viết lisp để làm công việc này. thuật toán là zoom đến từng trắc ngang sau đó lấy dữ liệu để xử lý.Quá trình làm thì bị  vướng mắc.(từ 1 điểm đã xác định làm sao tìm đường thẳng đi qua nó) mục đích để là chọn đường thẳng đó

Với lại không biết thuật toán của mình có làm được hay không?

mong mọi người giúp đỡ

đây là file yêu cầu.

http://www.cadviet.c...updte_new_1.dwg


  • 0

#2 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 05 November 2013 - 03:04 PM

Theo mình vấn đề của bạn không khó

Mình thấy bạn dùng VBA được nên mình nghĩ bạn nên xử lý bằng VBA ?

1.Tạo 1 Block thuộc tính có 2 Tag có tên là: Chieudai va Caodo

2. Nhập vào cao độ gốc (nên lấy cao độ gốc tại tim đường)

3.Dùng bộ lọc Selectionset chọn các polyline đánh cấp có layer riêng

4.Tính khoảng cách theo phương đứng và ngang so với điểm tim

5. Update Khoảng cách này vào Block thuộc tính

6.Kết thúc


  • 0

#3 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 05 November 2013 - 05:23 PM

Theo mình vấn đề của bạn không khó

Mình thấy bạn dùng VBA được nên mình nghĩ bạn nên xử lý bằng VBA ?

1.Tạo 1 Block thuộc tính có 2 Tag có tên là: Chieudai va Caodo

2. Nhập vào cao độ gốc (nên lấy cao độ gốc tại tim đường) 

3.Dùng bộ lọc Selectionset chọn các polyline đánh cấp có layer riêng

4.Tính khoảng cách theo phương đứng và ngang so với điểm tim

5. Update Khoảng cách này vào Block thuộc tính

6.Kết thúc

Cám ơn bạn quan tâm cái nay mình nghĩ lisp cũng được VBA cũng được vấn đề là xử lý text làm sao cho đúng bởi đây là 1 rừng các text cao độ (mình đang bí ở chỗ làm sao để xử lý lấy được cao độ đó) ở đây mình đang làm thuật toán là Zoom (có thể là khuân vùng ) từng trắc ngang để xử lý và cũng đang bí 

chứ các bước ở trên thì mình đã nghỉ đến rồi và cái này mình đã làm được với cos đánh cao độ nhưng chỉ thủ công pick từng điểm

cũng hỏi thêm bạn 1 tí đối với bước 2. làm sao để lấy cao độ tại tim (cao độ tự nhiên) Không phải nhập vào mà lấy ngay trên trắc ngang


  • 0

#4 doanduyhung

doanduyhung

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 05 November 2013 - 05:50 PM

sau khi tìm được max min vùng 1 tn, ta lọc text cdtn, lấy giá trị text có góc xoay 90d có và có xmin là cao độ tn trái tương ứng với toạ độ đầu x y của polyline tntn, từ đó ta sẽ tính được cao độ bất kỳ điểm nào trên 1 trắc ngang theo toạ độ điểm đó(lưu ý vì tn nova là tỉ lệ 1000 nên ko xét tới tỉ lệ)
repeat cho nhiều tn của cả tuyến là xong
  • 0

#5 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 05 November 2013 - 08:02 PM

sau khi tìm được max min vùng 1 tn, ta lọc text cdtn, lấy giá trị text có góc xoay 90d có và có xmin là cao độ tn trái tương ứng với toạ độ đầu x y của polyline tntn, từ đó ta sẽ tính được cao độ bất kỳ điểm nào trên 1 trắc ngang theo toạ độ điểm đó(lưu ý vì tn nova là tỉ lệ 1000 nên ko xét tới tỉ lệ)
repeat cho nhiều tn của cả tuyến là xong

Đúng như bạn nói mình đang dùng lisp của bạn nên mới ngộ ra điều đó và đang đi tìm vùng max min của 1 trắc ngang. Tọa độ max thì mình xác định được rồi đó là tọa độ cọc + thêm 1 khoảng cách mấy lần chiều cao chữ là ok, còn tọa độ min thì đang vướng mình biết bạn lấy tọa độ của khung trắc ngang - thêm 1 khoảng. Bạn sử dụng Hàm gì để xác định đường thẳng đi qua điểm đã cho vậy?????


  • 0

#6 doanduyhung

doanduyhung

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 06 November 2013 - 10:45 AM

mình zoom rồi chọn lập cho tới khi tìm ra max min của tập chọn thì dừng, chứ ko như của bạn
chỉ có hàm polar từ điểm đó thôi
  • 0

#7 doanduyhung

doanduyhung

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 06 November 2013 - 10:48 AM

hoặc có thể chon theo layer linetructn rồi cộng thêm phạm vi khung ghi chú trác ngang, hình như tác giả nova cũng dựa vô cái này (dùng cách này thì ko cần zoom rồi chọn nhưng có ai đó xoá linetructn đi thì bó tay)
  • 0

#8 doanduyhung

doanduyhung

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 06 November 2013 - 10:50 AM

còn cái điền cao độ tui sẽ up thêm vô phần hỗ trợ tkd, mở rộng chọn theo đối tượng layer để ghi nên ko nhất thiết là đường đánh cấp
  • 1

#9 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 06 November 2013 - 01:26 PM

Mình đang làm 1 công việc thấy quá thủ công là phải điền cao độ cho từng trắc ngang. Đang muốn tự động 1 tí cho đỡ phải mất công và đang mày mò viết lisp để làm công việc này. thuật toán là zoom đến từng trắc ngang sau đó lấy dữ liệu để xử lý.Quá trình làm thì bị  vướng mắc.(từ 1 điểm đã xác định làm sao tìm đường thẳng đi qua nó) mục đích để là chọn đường thẳng đó

Với lại không biết thuật toán của mình có làm được hay không?

mong mọi người giúp đỡ

đây là file yêu cầu.

http://www.cadviet.c...updte_new_1.dwg

Chọn đường thẳng qua điểm pt

(ssget "C"  (polar pt -1 1 ) (polar pt 1 1 ) '((0 . "LINE")(8 . "ENTTNTUNHIEN")))

Bạn làm được gì thì post lên để mọi người bổ sung


  • 0

#10 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 06 November 2013 - 02:09 PM

còn cái điền cao độ tui sẽ up thêm vô phần hỗ trợ tkd, mở rộng chọn theo đối tượng layer để ghi nên ko nhất thiết là đường đánh cấp

Đươc như vậy thi hay lắm tui khỏi phải suy nghĩ nữa rồi 

cám ơn bạn


  • 0

#11 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 06 November 2013 - 02:13 PM

Chọn đường thẳng qua điểm pt

(ssget "C"  (polar pt -1 1 ) (polar pt 1 1 ) '((0 . "LINE")(8 . "ENTTNTUNHIEN")))

Bạn làm được gì thì post lên để mọi người bổ sung

Ok để tui làm thử xem


  • 0

#12 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 06 November 2013 - 03:26 PM

Thuật toán của bạn có thế làm được như sau (Dùng VBA)

1.Tạo bộ lọc chứa các Polyline tự nhiên

2.Tạo bộ lọc chứa các Text cao độ tự nhiên (chỉ lấy các text có góc =90 độ)

3.Tạo bộ lọc chứa các Polyline cần ghi cao độ

Để lấy được các text cao độ tự nhiên bên trái của mỗi trắc ngang:

1.Duyệt qua từng PL trong tập chọn và lấy ra tọa độ điểm thứ 2 và điểm cuối của mỗi PL này

2.Duyệt qua tập text cao độ tự nhiên => So sánh để tìm ra text cao độ tự nhiên gần nhất

3.Có được tập hợp các text cao độ mỗi trắc ngang

Để ghi cao độ của PL

1.Duyệt lại qua các tọa độ PL tự nhiên trên => So sánh tọa độ của PL này so với tọa độ điểm 2 và điểm cuối của Polyline tự nhiên

2.Xong.


  • 0

#13 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 07 November 2013 - 08:20 AM

Cám ơn mọi người nhờ những gợi ý mà tôi đã làm được cái vướng mắc Zoom đến từng trắc ngang. Bây giờ việc xử lý số liệu trên đó chắc không khó khắn lắm, đúng lisp quả là rất lợi hại

hahahaahhaha


  • 0

#14 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 14 December 2013 - 08:29 AM

Bạn Huunhantvxdts đã xong lisp điền cao độ cho lớp đánh cấp chưa? post lên a e tham khảo với!


  • 0

#15 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 16 December 2013 - 08:04 PM

Mình đã viết xong rồi những chỉ chạy trên file nova thôi.

 

 


  • 0

#16 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 16 December 2013 - 08:49 PM

Đây là đồ dùng copy vào ổ C:

tên lệnh là: CDBS

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


  • 0

#17 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 01 January 2014 - 01:52 PM

Bạn có thể hướng dẫn thêm về copy vào ổ C k? copy vào cad hay để trong ổ c là được?


  • 0

#18 huunhantvxdts

huunhantvxdts

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 366 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 01 January 2014 - 03:21 PM

Giải nén xong Copy nguyên thư mục TLKT vào ổ đỉa C:

mở cad rồi load lisp vào như bình thường

lệnh là: CDBS


  • 0