Đến nội dung


Hình ảnh

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


  • Please log in to reply
57 replies to this topic

#41 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 09 August 2016 - 12:05 PM

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!


  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#42 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 09 August 2016 - 04:48 PM

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


  • 0

#43 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 313 (khá)

Đã gửi 09 August 2016 - 04:48 PM

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.c...36_ccledr_1.rar

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


  • 1

#44 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 09 August 2016 - 11:14 PM

 

test của bạn thì bị giống vầy:

83237_capture.jpg


  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#45 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 10 August 2016 - 04:52 AM

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 ???


  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#46 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 313 (khá)

Đã gửi 10 August 2016 - 07:33 AM

@Detailing: Theo bác với khoảng cách giữa các đường và bán kính arc như bài #44 của bác, nếu vẽ bằng tay thì vẽ như thế nào?


  • 0

#47 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 10 August 2016 - 07:48 AM

@Detailing: Theo bác với khoảng cách giữa các đường và bán kính arc như bài #44 của bác, nếu vẽ bằng tay thì vẽ như thế nào?

Đây cũng là 1 cách

83237_capture_1.jpg


  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#48 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 313 (khá)

Đã gửi 10 August 2016 - 07:59 AM

Thế thì bước nhập bán kính bỏ qua à?


  • 0

#49 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 10 August 2016 - 08:28 AM

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.


  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#50 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 313 (khá)

Đã gửi 10 August 2016 - 08:33 AM

http://www.cadviet.c..._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).


  • 2

#51 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 10 August 2016 - 09:31 AM

Thân gởi các Lisper đang tham gia chủ đề và các bạn khác!

Đây là một bài toán thực tế, nhằm ký hiệu để người đọc hiểu được đường nào nằm trên/dưới đường khác, và xác định tính liên tục khi chúng giao nhau để tránh hiểu nhầm đường này qua đường kia.

Vì chỉ là ký hiệu nên người vẽ có quyền vẽ theo các kiểu khác nhau. Đồng nghiệp của tôi cũng hay vẽ bài toán này, và cũng vẽ ngẫu hứng tùy người. Tôi kiến nghị một cách mà họ hay dùng (và dễ nhìn) là thế này:

- Thông thường, họ vẽ theo một bán kính xác định, nhìn vừa mắt, ta đặt tên là Rmax.

- Khi khoảng cách 2 giao điểm liền kề (gọi là D) nhỏ hơn 2*Rmax thì họ giảm dần bán kính đến giá trị nhỏ nhất (có thể nhìn rõ khi in ra), ta đặt tên là Rmin.

- Khi khoảng cách nhỏ hơn nữa (D<2*Rmin) thì họ vẽ các Arc theo Rmin liền nhau.

Nếu đi theo hướng này sẽ đỡ ngứa con mắt bên phải đỏ con mắt bên trái hơn.

67029_ve_duong_cap.png


  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#52 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 11 August 2016 - 11:28 AM

Lưu ý là không dùng để làm việc nhé vì các lý do sau:

  • cái này chỉ code ra để test thôi
  • dùng nhiều event và các hàm phức tạp nhưng ko bẫy lỗi -> có thể crash AutoCAD bất cứ lúc nào
  • Cái này viết bằng .NET, lisp chắc ko viết được do 1 số API ko support cho lisp. Bạn nào có hứng thú thì cùng thảo luận

83237_cv_1.gif

 

Here we go: http://www.mediafire...mad/CADViet.zip 
Viết code và test trên CAD 2015 (Cad14 và 16 có thể chạy được) - load vào CAD bằng lệnh NETLOAD - Lệnh là : DOIT


  • 3

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#53 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 11 August 2016 - 11:36 AM

Mới dòm Video thấy cái này có 1 tính năng rất hay là khi Move các đối tượng thì các Arc biến đổi theo. Bạn nên phát triển để sử dụng sẽ có rất nhiều người cần.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#54 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 11 August 2016 - 11:44 AM

Mới dòm Video thấy cái này có 1 tính năng rất hay là khi Move các đối tượng thì các Arc biến đổi theo. Bạn nên phát triển để sử dụng sẽ có rất nhiều người cần.

cái phần đó dùng 1 cái event (reactor) để update nhưng trong lúc update nó lại gọi lại chính nó 1 lần nữa -> có thể gây ra lỗi tiềm ẩn nhưng mình ko có time để tìm nguyên nhân nên khuyến cáo cho chắc.


  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#55 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 313 (khá)

Đã gửi 11 August 2016 - 04:20 PM

Bác .NET nhảy vào anh em LISP lui... :D


  • 1

#56 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 11 August 2016 - 10:40 PM

Bạn quocmanh04tt cứ tiếp tục đi, cái NET chỉ để test thôi, ko có xài dc với lại nó bị giới hạn thời gian test trong đó nữa -> cái này chắc một số reverser tò mò, trong đó có 1 cái trick nhỏ mới nghĩ ra :D


  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#57 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 11 August 2016 - 11:56 PM

Lưu ý là không dùng để làm việc nhé vì các lý do sau:

  • cái này chỉ code ra để test thôi
  • dùng nhiều event và các hàm phức tạp nhưng ko bẫy lỗi -> có thể crash AutoCAD bất cứ lúc nào
  • Cái này viết bằng .NET, lisp chắc ko viết được do 1 số API ko support cho lisp. Bạn nào có hứng thú thì cùng thảo luận

83237_cv_1.gif

 

Here we go: http://www.mediafire...mad/CADViet.zip 
Viết code và test trên CAD 2015 (Cad14 và 16 có thể chạy được) - load vào CAD bằng lệnh NETLOAD - Lệnh là : DOIT

Qúa dữ luôn. Từ khi detailing gợi ý addvertex, Thiệp đã theo hướng này, cộng thêm lisp remove vertex sưu tầm của Thaistreet, Thiệp đã ra được lisp giống của Quocmanh chỉ khác về cung tròn ARC và hướng khi setbulge - hoặc +. Rồi đọc commend của Doan Van Ha, Thiep xử lý tiếp trường hợp các bó *LINE có trước nằm sát nhau thì BÍ, chưa biết thuật toán nào để làm được. Nếu xử lý được thì có thể giống như clip trên.

@quocmanh

lisp của bạn khai báo biến chưa đầy đủ, hoặc bạn để toàn cục với tên biến đơn giản nên khi dùng lisp của Quocmạnh xong rồi dùng lisp cuả Thiep thì các đối tượng đã sử lý qua lisp của quocmanh lại tiếp tục "nhảy múa" tiếp, mặc dù Thiep không đụng đến. Chưa biết lỗi gì.


  • 1

#58 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 313 (khá)

Đã gửi 12 August 2016 - 07:57 AM

@thiep: Lisp của mình cũng add, remove Vertex. Ngoài ra, lisp của mình còn add thêm Xdata để dùng cho lệnh EDR, lệnh EDR này chỉ edit các ARC của lệnh CCL tạo ra, các ARC khác không quan tâm. Trong lisp chỉ để lại biến bán kính (#bankinh#).


  • 1