Chuyển đến nội dung
Diễn đàn CADViet
tuvanthietke.hcm

cắt đoạn thẳng tại chỗ giao nhau

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

Uh, đúng vậy! lsp trên chưa xử lý được vấn đề đó. Thanks!

*** Vấn đề là tại điểm như vậy thì nên vẽ thế nào? Cung tròn sẽ ra sao???

Vấn đề là lisp của bạn đã được mã hóa thành file *.fas nên không biết thuật toán của bạn bị lỗi như thế nào.

Bạn có thể gửi cho xem file nguồn LSP được không?

  • 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

Vấn đề là lisp của bạn đã được mã hóa thành file *.fas nên không biết thuật toán của bạn bị lỗi như thế nào.

Bạn có thể gửi cho xem file nguồn LSP được không?

 

- Không phải là thuật toán lỗi, mà là lsp trước mình chưa tính đến trường hợp đó.

- Mình đặt vấn đề ở trên là: khi vẽ ARC thì nên cho dây cung lật về phía góc < Pi hay > Pi, vị trí tâm của nó nữa.

-  Lisp của bạn:

*** Với đường ziczac

+ Có các nút đỉnh nằm trên đường giao, arc quay ngược quay xuôi nó loạn cả lên, trông không đẹp (bán kính cũng bị thay đổi).

+ Trường hợp không có có các nút đỉnh nằm trên đường giao thì nó chạy loạn cả lên.

  • Vote tăng 2

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

-  Lisp của bạn:

*** Với đường ziczac

+ Có các nút đỉnh nằm trên đường giao, arc quay ngược quay xuôi nó loạn cả lên, trông không đẹp (bán kính cũng bị thay đổi).

+ Trường hợp không có có các nút đỉnh nằm trên đường giao thì nó chạy loạn cả lên.

Hi quocmanh, đúng là được cái này nhưng chưa được cái nọ,

"Trường hợp không có có các nút đỉnh nằm trên đường giao thì nó chạy loạn cả lên" Thiep sẽ chỉnh lại lisp.

"Có các nút đỉnh nằm trên đường giao, arc quay ngược quay xuôi nó loạn cả lên, trông không đẹp" Thiep thấy nó quay về 1 phía mà, đâu có quay ngược quay xuôi đâu. Còn bán kính cũng bị thay đổi vì Thiep dùng hàm setbulge, trong trường hợp đỉnh Pline nằm trên đường giao thì sẽ không chính xác nữa. Công thức tính bulge lâu quá rồi Thiep không nhớ nên chỉ áp dụng đại trà cho bulge = -1. Thật ra phải tính cho từng số bulge cho từng trường hợp thì nó mới ra đúng bán kính ARC yêu cầu.

Cảm ơn Quocmanh góp ý

  • 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

Bạn Thiệp test thêm nhé, còn rất nhiều case bạn ko xét, hình dưới chỉ lá 2 case thôi.

 

untitled.gif

Cảm ơn Detailing góp ý.

Trường hợp 1, Thiệp sẽ chỉnh lại lisp.

Trường hợp 2, sau khi tạo được 1 vị trí bẻ cong (ARC), muốn tạo thêm 1 vị trí nữa thì ARC biến mất, vì đầu bài đưa ra là các curve bị bẻ cong ban đầu không có 1 ARC nào nên lisp hiểu là phải "diệt" những ARC có trước, để Thiep tìm cách khắc phục.

  • 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

Xin được mạn đàm tí!

Đây là một bài toán thực tế, như vẽ các đường điện/nước/cáp... giao nhau, khá là hay và khá là khó.

Khó nhất là phải tiên lượng hết các trường hợp giao nhau để vẽ arc, chẳng hạn khi 2 arc chồng lấn nhau thì không thấy chủ topic đề cập. v.v... và v.v...

Hy vọng các bạn lisper đã tham gia viết sẽ viết càng hoàn chỉnh càng tốt.

Đặt gạch!

  • Vote tăng 2

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

Dear tất cả các bạn,

Hôm nay mình lên mạng thấy có nhiều bạn tham gia vào chủ đề này mình mừng quá, mình là dân thiết kế MEP nhiều khi trên mặt trần có rất nhiều đường ống.., hay khi combine các hệ nên các đường dây điện nước này đụng nhau rất nhiều, mình cũng chưa tiên lượng được hết các trường hợp giao nhau của Arc, hi vọng có nhiều bạn góp ý thêm các trường hợp khác nữa nhé, mong các bạn sớm hoàn thành lisp này để anh em có sử dụng với nhé, cảm ơn mọi ngườ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

Dear các bạn,


- Mình thấy trên mạng có một cái lisp " My break object" có rất nhiều option để lựa chọn để Break các line giao nhau


http://thuvienxaydun...eak-object.html


- Nếu cái Lisp mà các bạn đang xây dựng (GIAO NHAU BẰNG CUNG ARC) cũng có các option lựa chọn như Lisp trên thì mình nghĩ chắc cũng gần đủ các trường hợp cần thiết của bài toán như bạn Doan Van Ha đề cập


- Mong sự giúp đỡ của các 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

Lisp đó thì biết lâu rồi, tuy còn nhiều trường hợp lỗi, tôi đã thêm phần tiếng Việt (bài #2), nó nằm ở link dưới. Nhưng???

http://www.cadviet.com/forum/topic/63766-yeu-cau-lisp-tach-polyline-hoac-cac-doi-tuong-dang-tuyen-tai-cac-diem-giao/?pid=198943&do=findComment&comment=198943

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

 

Dear các bạn,

- Mình thấy trên mạng có một cái lisp " My break object" có rất nhiều option để lựa chọn để Break các line giao nhau

http://thuvienxaydun...eak-object.html

- Nếu cái Lisp mà các bạn đang xây dựng (GIAO NHAU BẰNG CUNG ARC) cũng có các option lựa chọn như Lisp trên thì mình nghĩ chắc cũng gần đủ các trường hợp cần thiết của bài toán như bạn Doan Van Ha đề cập

- Mong sự giúp đỡ của các bạn,   :)   :)   :)   :)

 

Đúng là ngay từ đầu Thiep đã nghĩ đến lisp breakALL, nhưng vì các đối tượng bạn đặt ra trong đầu bài tương đối đơn giản, nên không cần đến breakALL, vì nếu với số lượng đối tượng lớn cần sử lý thì hàm này chạy chậm vì trong breakALL có lệnh Break. Thiep đang muốn dùng cách khác mà không cần đến lệnh break

Lisp này Thiep đã update lần 3 với các PLINE cần bẻ cong không có arc nào. Nếu có arc vẫn viết được lisp nhưng mất thời gian quá

Lisp này chưa có lệnh thay đổi bán kính ARC tại vị trí bẻ cong, hẹn update lần sau:

http://www.cadviet.com/upfiles/6/11110_becong_line.lsp

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

Xin được mạn đàm tí!

Đây là một bài toán thực tế, như vẽ các đường điện/nước/cáp... giao nhau, khá là hay và khá là khó.

Khó nhất là phải tiên lượng hết các trường hợp giao nhau để vẽ arc, chẳng hạn khi 2 arc chồng lấn nhau thì không thấy chủ topic đề cập. v.v... và v.v...

Hy vọng các bạn lisper đã tham gia viết sẽ viết càng hoàn chỉnh càng tốt.

Đặt gạch!

Lâu lâu Thiep vô cadviet cho đỡ nhớ, nhưng càng đi sâu vào topic này càng mất thời gian quá, còn dành thời gian cho công việc nữa

  • 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

Nên nhớ Lisp sẽ có thể không chính xác khi đối tượng bị bẻ cong thẳng đứng (// trục Y), khi đó bạn nên xoay bản vẽ 1 góc 90 độ, thực hiện lisp xong thì xoay lạ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

Nên nhớ Lisp sẽ có thể không chính xác khi đối tượng bị bẻ cong thẳng đứng (// trục Y), khi đó bạn nên xoay bản vẽ 1 góc 90 độ, thực hiện lisp xong thì xoay lại.

@tptnt, 

Lisp update lần 3 đã khắc phục lỗi này, khắc phục luôn đối tượng bị cong có kiểu ziczac bất kỳ không ARC, có đỉnh nằm hoặc không nằm trên các đường curve giao, bạn xem ở đây:

http://www.cadviet.com/forum/topic/28245-cat-doan-thang-tai-cho-giao-nhau/?p=405867

  • 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

Ko có ý làm phiền bạn Thiep nhưng mới test phát đầu đã bị vậy rồi.

http://www.cadviet.com/upfiles/6/83237_untitled1.zip

Hi DetaiLing,

- Lỗi do Thiep dùng hàm sort các point nút của đường bị bẻ cong, nên khi tái tạo đường này nó sẽ lấy nút chỗ này thay cho nút chỗ kia.

- Các đường giao có trước quá dày thì không thể nào tạo được nhiều ARC tại nơi bẻ cong được,

- Như đã nói trước, lisp sẽ không chấp nhận các đường bị bẻ cong có ARC trước, nên lisp trước thì các ARC có trước sẽ bị xóa, Lisp update kỳ này Thiep dùng hàm lấy điểm trên curve có khác nên nó muốn nhái lại cho giống ARC nhưng không như ý.

Cảm ơn DetaiLing góp ý. Thiep sẽ kiểm tra lại

  • 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

Hi thiep,

Mình thì ko có xài cái lisp này nhưng thấy mấy mod lisp box ko ngó tới (chắc thấy dễ quá :D) nên test thử dùm bạn mấy case thôi, mình test thử cái workflow này thấy cũng tạm chấp nhận được

tìm list intersection,  

sắp xếp theo khoảng cách tới start point của polyline

check khoảng cách giữa các điểm, loại bỏ mấy điểm nào gần nhau quá

insert polyline vertex

set bugle 

 

Tuy nhiên còn vài trường hợp ko vẽ dc do 2 cụm sát nhau quá thì thua, bắt user tự manual modify vậy :D

Good luck!

  • 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

Hi thiep,

Mình thì ko có xài cái lisp này nhưng thấy mấy mod lisp box ko ngó tới (chắc thấy dễ quá :D) nên test thử dùm bạn mấy case thôi, mình test thử cái workflow này thấy cũng tạm chấp nhận được

tìm list intersection,  

sắp xếp theo khoảng cách tới start point của polyline

check khoảng cách giữa các điểm, loại bỏ mấy điểm nào gần nhau quá

insert polyline vertex

set bugle 

 

Tuy nhiên còn vài trường hợp ko vẽ dc do 2 cụm sát nhau quá thì thua, bắt user tự manual modify vậy :D

Good luck!

Thank Detailing đã nhắc AddVertex, Thiệp sẽ chỉnh lisp theo hướng này. Việc sort theo khoảng cách tới startpoint không khả thi vì có trường hợp ngẫu nhiên điểm có sau có k/c này nhỏ hơn điểm có trước trong pline. Có thể, Thiêp sẽ sắp xếp theo paraAtpoint

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

Tuy nhiên còn vài trường hợp ko vẽ dc do 2 cụm sát nhau quá thì thua, bắt user tự manual modify vậy :D

Good luck!

Các đường sát nhau thì chọn 1 đường giao với đối tượng cần xử lý thôi...!

+ Lisp này xử lý vấn đề điểm giao trùng với đỉnh PLINE, các ARC (và các thuộc tính khác như Layer, Color, LineType, Width...) có trước của Pline giữ nguyên, không đụng chạm tới (LSP chỉ edit tại vị trí giao - Không Entmake lại như Lsp của Mr Thiep).

+ Lệnh CCL để "Bẻ cong", Lệnh EDR thay đổi bán kính Arc.

+ Trường hợp nhiều đường giao với đối tượng cần xử lý sát nhau, khoảng cách giữa chúng < bán kính ARC thì nên chọn 1 đường trong chúng.

http://www.cadviet.com/upfiles/6/141736_ccledr_1.rar

P/s: EDR chỉ phục vụ tốt cho đối tượng được xử lý bởi lệnh CCL.

  • 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

Thank Detailing đã nhắc AddVertex, Thiệp sẽ chỉnh lisp theo hướng này. Việc sort theo khoảng cách tới startpoint không khả thi vì có trường hợp ngẫu nhiên điểm có sau có k/c này nhỏ hơn điểm có trước trong pline. Có thể, Thiêp sẽ sắp xếp theo paraAtpoint

missed this,

Cẩn thận khi dùng (vlax-curve-getParam.....) nếu bạn ko chắc cái param trả về là gì. Tùy thuộc vào curve (line, lwpolyline, polyline, circle, elipse, etc) cái param trả về đó có thể khác nhau (??? hãy test thử point trên arc segment và line segment) mình gợi ý sử dụng (vlax-curve-getDistAtPoint). 

Điểm có sau nhỏ hơn điểm có trước khi user vẽ segment sau overlap lên segment có sẳ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

mục đích là vẽ các arc nhảy qua máy cái line //, nếu bán kính ko thỏa thì tăng hoặc giảm nó để có thể nhảy qua được, hoặc chỉ đơn giản quăng error rồi stop.

Bán kình nhập để reference để dùng khi no problem, cách nữa là thay vì 1 arc 180 degree, bạn vẽ 2 arc 90 degree nối lại bằng 1 line.

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

http://www.cadviet.com/upfiles/6/141736_ccledredrr.rar

Lisp Chỉnh sửa:

+ Lệnh CCL: Nếu đi qua vùng dày đặc đường giao (và khoảng cách giữa các đường < R) thì chỉ vẽ 1 ARC tại đó.

*** Thực hiện: Ban đầu vẽ với R theo chủ ý, chỗ nào chưa vượt qua thì dùng lệnh EDRR để xử lý.

+ Lệnh EDRR: Chỉnh sửa R từng ARC một, pick đến đâu sửa đến đấy - Có thể thay đổi R.

+ Lệnh EDR: Thay đổi hàng loạt, giống lisp trước (Nếu PLINE bị edit - Thêm bớt Vertex thì có thể không chính xác nữa).

  • Vote tăng 2

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


×