Đến nội dung


Hình ảnh
* * * * - 1 Bình chọn

Array đối tượng trong vùng


  • Please log in to reply
55 replies to this topic

#1 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 10 August 2010 - 01:01 PM

Các bác ơi! các bác có thể giúp em tạo hàm array 1 đối tượng bất kỳ (em dùng đối tượng là bock) trong một vùng kín được không?
Em đang rất rắc rồi khi gặp phải vấn đề này. Chả là em đang trải mảng cây lúa trong một hình diện tích tương đối phức tạp, em cứ phải delete các cây lúa nằm ngoài vùng rất mỏi tay. Các bác có thể nghiên cứu giúp em được không hả bác. Em nghĩ là vấn đề này cũng có rất nhiều người quan tâm. Ngoài ra em còn hỏi bác là em cũng có thể xoá đối tượng có cùng 1 thuộc tính trong một vùng kín được không vậy? (em đã dùng lệnh fiter để lọc ra thuộc tính, khi xoá chỉ cần nhấn nút "p"). Mong thư hồi âm
file sau khi array dạng: http://www.4shared.c...aXWk/array.html
Em đã tìm hiểu về hatch (lệnh surperhatch) nhưng không được. Kính mong thư hồi đáp của các bác quan tâm
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 10 August 2010 - 01:35 PM

Các bác ơi! các bác có thể giúp em tạo hàm array 1 đối tượng bất kỳ (em dùng đối tượng là bock) trong một vùng kín được không?
Em đang rất rắc rồi khi gặp phải vấn đề này. Chả là em đang trải mảng cây lúa trong một hình diện tích tương đối phức tạp, em cứ phải delete các cây lúa nằm ngoài vùng rất mỏi tay. Các bác có thể nghiên cứu giúp em được không hả bác. Em nghĩ là vấn đề này cũng có rất nhiều người quan tâm. Ngoài ra em còn hỏi bác là em cũng có thể xoá đối tượng có cùng 1 thuộc tính trong một vùng kín được không vậy? (em đã dùng lệnh fiter để lọc ra thuộc tính, khi xoá chỉ cần nhấn nút "p"). Mong thư hồi âm
file sau khi array dạng: http://www.4shared.c...aXWk/array.html
Em đã tìm hiểu về hatch (lệnh surperhatch) nhưng không được. Kính mong thư hồi đáp của các bác quan tâm

Chào thanhduan2407
Do bạn biết lập trình, tui chỉ cung cấp giải pháp cho bạn triển khai.

B1. Xác định tọa độ của các đỉnh hình chử nhật bao quanh "vùng kín"
- có thể dùng hàm getBoundingBox : http://s.cadviet.com/m
B2. array đối tượng trong phạm vi hình chử nhật này.
- quá dễ :(
B3. xóa các đối tượng phía ngòai "vùng kín"
- tham khảo Lisp xóa tất cả đối tượng nằm ngoài curve. : http://s.cadviet.com/n

Chú ý : làm việc với "vùng kín" lúc nào cũng rắc rối và phức tạp. Tuy nhiên nếu thành công thì có nhiều thú vị đang chờ bạn đấy.
Cố lên! :undecided:
  • 1

#3 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 10 August 2010 - 05:39 PM

Chào thanhduan2407
Do bạn biết lập trình, tui chỉ cung cấp giải pháp cho bạn triển khai.

B1. Xác định tọa độ của các đỉnh hình chử nhật bao quanh "vùng kín"
- có thể dùng hàm getBoundingBox : http://s.cadviet.com/m
B2. array đối tượng trong phạm vi hình chử nhật này.
- quá dễ :(
B3. xóa các đối tượng phía ngòai "vùng kín"
- tham khảo Lisp xóa tất cả đối tượng nằm ngoài curve. : http://s.cadviet.com/n

Chú ý : làm việc với "vùng kín" lúc nào cũng rắc rối và phức tạp. Tuy nhiên nếu thành công thì có nhiều thú vị đang chờ bạn đấy.
Cố lên! :undecided:

Cảm ơn bac gia_bach rất nhiều vì đã quan tâm.
Ý tưởng của em thì rất đơn giản nhưng việc thực hiện cũng tương đối khó khăn (vấn đề chủ yếu là cách thức của ngôn ngữ). Về thuật toán thì em cũng có một số nhưng ngày trước em chỉ chú ý về VB nên bây giờ mới chập chững vào "Lập trình Lisp"[/u] nên chưa hiểu cách thức. Thuật toán 1 điểm nằm trong hay ngoài polyline khép kín thì trong VB em đã có thuật toán. Em ví dụ: xác định 1 điểm max hoặc min trong polyline hoặc trong cả tập hợp điểm, điểm này cộng thêm 1 giá trị delta X hoặc Y nào đó để điểm đó nằm ngoài tập điểm. Nối điểm đó với điểm đang xét nằm trong hay ngoài polyline khép kín (đa giác). Xác định số giao điểm của đường thẳng đó với đa giác. Nếu số giao điểm là chẵn => nằm ngoài và ngược lại. Cách thức này em đã sử dụng OK trong VB khi tạo môi trường đồ họa riêng. Nhưng với Cad thì chắc nó đơn giản hơn rất nhiều. Em rất muốn sau này sẽ tự lập cho mình chương trình ứng dụng trong chuyên ngành với ngôn ngữ lisp (chuyên ngành của em là Trắc Địa). Ý tưởng em cũng có nhưng cách thực hiện thì em đang mò mẫm. Rất mong bác có thể giúp em hoàn thiện chương trình này. Cảm ơn bác gia_bach "admin của Cadviet".
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#4 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 11 August 2010 - 11:04 PM

Chào thanhduan2407
Do bạn biết lập trình, tui chỉ cung cấp giải pháp cho bạn triển khai.

B1. Xác định tọa độ của các đỉnh hình chử nhật bao quanh "vùng kín"
- có thể dùng hàm getBoundingBox : http://s.cadviet.com/m
B2. array đối tượng trong phạm vi hình chử nhật này.
- quá dễ :(
B3. xóa các đối tượng phía ngòai "vùng kín"
- tham khảo Lisp xóa tất cả đối tượng nằm ngoài curve. : http://s.cadviet.com/n

Chú ý : làm việc với "vùng kín" lúc nào cũng rắc rối và phức tạp. Tuy nhiên nếu thành công thì có nhiều thú vị đang chờ bạn đấy.
Cố lên! :undecided:

Bác Gia_Bach có thể giúp em được không hả bác. Ngày nào em cũng vào tham diễn đàn và mong mỏi sự phản hồi ý kiến. Em cảm ơn bác nhiều.
Em muốn array block, tất cả các block đó đều nằm trong vùng kín (polyline khép kín) sau mỗi lần array. Cách thức làm của em như sau:
B.1 :Nhập tên block hoặc chọn block cần trải mảng (Có khai báo "khoảng cách khi array")
B.2 : Chọn polyline khép kín
Em hiểu theo ý của bác đã hướng dẫn nhưng hiện tại em chưa thể nghĩ ra làm được mà công việc đang cần gấp. Kính mong bác giúp đỡ.
Bác chú ý hộ em là sau khi trải mảng, chỉ xoá các block nằm ngoài vừa được tạo ra từ việc array. Các block cũ tạo ra trước mà nằm ngoài không bị xoá (Nói chung là tất cả các đối tượng được tạo ra trước không bị xoá). Điểm chuẩn của block nằm trong và nằm giữa polyline khép kín không bị xoá.
Em đang rất cần, kính mong nhận sự giải đáp của bác.
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#5 thanhhoa.36

thanhhoa.36

    biết vẽ circle

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

Đã gửi 12 August 2010 - 02:48 PM

Bạn Duân rạo này làm ở đâu mà trông gầy và đen thế !
Ý tưởng mà bạn theo làm là rất hay đó, nó cũng sẽ giúp ích rất lớn cho những người làm Địa Chính.
Rất mong bạn sẽ hoàn thành,
Chúc bạn thành công.
  • 0

#6 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 12 August 2010 - 03:02 PM

Bạn Duân rạo này làm ở đâu mà trông gầy và đen thế !
Ý tưởng mà bạn theo làm là rất hay đó, nó cũng sẽ giúp ích rất lớn cho những người làm Địa Chính.
Rất mong bạn sẽ hoàn thành,
Chúc bạn thành công.

Ủa?? Ai vậy ta?
Hii. Cảm ơn bạn nhiều nha. Ý tưởng thì tớ có nhưng phải từng bước thực hiện thôi. Tớ học Địa chính nhưng chưa lần nào đi làm địa chính cả. Hic hic :(
Toàn làm địa hình là nhiều thôi. Nhưng tôi yêu cả 2 bạn à. Khi nào có được kết quả mình sẽ shared lên để mọi người dùng.
Hẹn gặp lại bạn
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#7 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 13 August 2010 - 09:06 AM

Các bác ơi! các bác có thể giúp em tạo hàm array 1 đối tượng bất kỳ (em dùng đối tượng là bock) trong một vùng kín được không?
Em đang rất rắc rồi khi gặp phải vấn đề này. Chả là em đang trải mảng cây lúa trong một hình diện tích tương đối phức tạp, em cứ phải delete các cây lúa nằm ngoài vùng rất mỏi tay. Các bác có thể nghiên cứu giúp em được không hả bác. Em nghĩ là vấn đề này cũng có rất nhiều người quan tâm. Ngoài ra em còn hỏi bác là em cũng có thể xoá đối tượng có cùng 1 thuộc tính trong một vùng kín được không vậy? (em đã dùng lệnh fiter để lọc ra thuộc tính, khi xoá chỉ cần nhấn nút "p"). Mong thư hồi âm
file sau khi array dạng: http://www.4shared.c...aXWk/array.html
Em đã tìm hiểu về hatch (lệnh surperhatch) nhưng không được. Kính mong thư hồi đáp của các bác quan tâm

Bạn sd lệnh hatch là đúng rồi. Tuy nhiên, muốn làm được bạn phải tạo một số "cấu trúc tô" trong file acad.pat theo tiêu chuẩn Việt Nam (vd như : Lúa, Màu, Nghĩa địa ... ) hoặc bạn có thể tìm các cấu trúc này trên một số phần mềm Việt như Cmap chẳng hạn. Sau đó bạn dùng Hatch và chọn cấu trúc tô tương ứng để tô vùng mà bạn cần.
Sau đây mình trích một đoạn cấu trúc tô trong file acad.pat cho bạn tham khảo :
*Luacan, LUA CAN
90, 0,0, 5,5, 2,-8
45, 0,0, 7.071067812,7.071067812, 1,-6.071067812
135,0,0, 7.071067812,7.071067812, 1,-6.071067812

*Luanuoc, LUA NUOC
90, 0,0, 5,5, 2.1,-7.9
45, 0,0.0, 7.071067812,7.071067812, 1,-6.071067812
135,0,0.0, 7.071067812,7.071067812, 1,-6.071067812
0, -.75,-0.3, 5,5, 1.4,-8.6
  • 0

#8 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 13 August 2010 - 02:00 PM

Bạn sd lệnh hatch là đúng rồi. Tuy nhiên, muốn làm được bạn phải tạo một số "cấu trúc tô" trong file acad.pat theo tiêu chuẩn Việt Nam (vd như : Lúa, Màu, Nghĩa địa ... ) hoặc bạn có thể tìm các cấu trúc này trên một số phần mềm Việt như Cmap chẳng hạn. Sau đó bạn dùng Hatch và chọn cấu trúc tô tương ứng để tô vùng mà bạn cần.
Sau đây mình trích một đoạn cấu trúc tô trong file acad.pat cho bạn tham khảo :
*Luacan, LUA CAN
90, 0,0, 5,5, 2,-8
45, 0,0, 7.071067812,7.071067812, 1,-6.071067812
135,0,0, 7.071067812,7.071067812, 1,-6.071067812

*Luanuoc, LUA NUOC
90, 0,0, 5,5, 2.1,-7.9
45, 0,0.0, 7.071067812,7.071067812, 1,-6.071067812
135,0,0.0, 7.071067812,7.071067812, 1,-6.071067812
0, -.75,-0.3, 5,5, 1.4,-8.6

Mình rất cảm ơn bạn đã reply cho mình. Mình đã thử cấu trúc của bạn và đã làm được. Bạn có thể shared phần mềm Cmap cho mình và mọi người dùng được không?
Tuy vẫn còn các hạn chế như:
Thứ nhất: Các cây lúa ở sát bên đường polyline đều bị xén mất một phần.
Thứ hai: Mình muốn các đối tượng trong vùng là các block để dễ quản lý và sử dụng khi có sự thay đổi về hình dạng.
Cảm ơn bạn rất nhiều. Mong rằng ý tưởng của mình đưa ra được mọi người quan tâm. Cảm ơn tất cả
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#9 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 13 August 2010 - 03:06 PM

Mình rất cảm ơn bạn đã reply cho mình. Mình đã thử cấu trúc của bạn và đã làm được. Bạn có thể shared phần mềm Cmap cho mình và mọi người dùng được không?
Tuy vẫn còn các hạn chế như:
Thứ nhất: Các cây lúa ở sát bên đường polyline đều bị xén mất một phần.
Thứ hai: Mình muốn các đối tượng trong vùng là các block để dễ quản lý và sử dụng khi có sự thay đổi về hình dạng.
Cảm ơn bạn rất nhiều. Mong rằng ý tưởng của mình đưa ra được mọi người quan tâm. Cảm ơn tất cả

Các cây lúa ở sát bên đường polyline đều bị xén mất một phần.
Vấn đề này khó khắc phục.
Vì nếu bạn dùng Block thì khả năng Block lấn ra phía ngoài polyline vẫn có thể xảy ra, mặc dù tâm Block ở trong PLine.
(hoặc nguợc lại : block hoặc quá xa polyline ).

Tui đang viết thử bằng .NET, nhưng chưa hoàn chỉnh.
Bạn chạy thử và cho ý kiến nhé.
Link down : Array Block
  • 0

#10 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 13 August 2010 - 03:45 PM

Các bác ơi! các bác có thể giúp em tạo hàm array 1 đối tượng bất kỳ (em dùng đối tượng là bock) trong một vùng kín được không?
Em đang rất rắc rồi khi gặp phải vấn đề này. Chả là em đang trải mảng cây lúa trong một hình diện tích tương đối phức tạp, em cứ phải delete các cây lúa nằm ngoài vùng rất mỏi tay. Các bác có thể nghiên cứu giúp em được không hả bác. Em nghĩ là vấn đề này cũng có rất nhiều người quan tâm. Ngoài ra em còn hỏi bác là em cũng có thể xoá đối tượng có cùng 1 thuộc tính trong một vùng kín được không vậy? (em đã dùng lệnh fiter để lọc ra thuộc tính, khi xoá chỉ cần nhấn nút "p"). Mong thư hồi âm
file sau khi array dạng: http://www.4shared.c...aXWk/array.html
Em đã tìm hiểu về hatch (lệnh surperhatch) nhưng không được. Kính mong thư hồi đáp của các bác quan tâm

Lệnh surperhatch bị vấn đề gì mà không được vậy bạn. Mình thấy ổn mà.

Muốn giản khoảng cách các block thì khi tới dòng Specify block [Extents] First corner magenta rectang): bạn vẽ lại hình chữ nhật định vị là được mà.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#11 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 13 August 2010 - 04:00 PM

Các cây lúa ở sát bên đường polyline đều bị xén mất một phần.
Vấn đề này khó khắc phục.
Vì nếu bạn dùng Block thì khả năng Block lấn ra phía ngoài polyline vẫn có thể xảy ra, mặc dù tâm Block ở trong PLine.
(hoặc nguợc lại : block hoặc quá xa polyline ).

Tui đang viết thử bằng .NET, nhưng chưa hoàn chỉnh.
Bạn chạy thử và cho ý kiến nhé.
Link down : Array Block

Dạ thưa bác Gia_bach
Nếu xét điểm chuẩn của block nằm ngoài hoặc nằm trên polyline thì block đó bị xoá.
Em lâu rồi không động đến VB nên không có bộ cài nó, vì em đang tập trung vào nghiên cứu lisp và VBA (chủ yếu là lisp).
Bác có thể ra tay giúp em với. Kính thư bác
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#12 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 14 August 2010 - 01:40 AM

Mình rất cảm ơn bạn đã reply cho mình. Mình đã thử cấu trúc của bạn và đã làm được. Bạn có thể shared phần mềm Cmap cho mình và mọi người dùng được không?
Tuy vẫn còn các hạn chế như:
Thứ nhất: Các cây lúa ở sát bên đường polyline đều bị xén mất một phần.
Thứ hai: Mình muốn các đối tượng trong vùng là các block để dễ quản lý và sử dụng khi có sự thay đổi về hình dạng.
Cảm ơn bạn rất nhiều. Mong rằng ý tưởng của mình đưa ra được mọi người quan tâm. Cảm ơn tất cả

Mình kg có và kg dùng Cmap. Mình chỉ kiếm đc file acad.pat do mấy người bạn cho. vđ một số cây lúa bị xén một phần là bình thường. Vì cấu trúc tô đc trải theo một qui luật nhất định nên chắc chắn phải có một phần bị xén khi vướng vào đg bao. Chỉ trừ bạn vẽ BĐ bằng tay hay cấu trúc của bạn là những nét dài vô hạn. Việc một số cấu trúc tô sát biên bị xén theo mình biết qui trình cũng cho phép. Nếu muốn thay đổi hay tạo thêm một số cấu trúc tô bạn đều có thể làm đc trong cad.
Kg rõ Cad có cho tạo cấu trúc tô là một block hay kg, một số phần mềm như MicroStation cho phép làm điều này. Đây là phần mềm nền của Famis phục vụ cho ngành Địa chính, nếu cần bạn nghiên cứu thêm.
Việc sd block cũng giống như bạn explode cấu trúc tô và xóa các phần tử sát biên bị xén

Nếu bạn thật sự muốn làm theo kiểu block mình gợi ý như vậy :
- Tìm đg bao
- Lập hảm xđ điểm ở trong hay ngoài đa giác (chính là đg bao)
- Tìm hình chữ nhật bao quanh đg bao
- Căn cứ vào HCN vừa tìm đc để xđ các điểm đặt cái block
- Kiểm tra vị trí nào nằm trong cái đa giác kia thì insert cái block vào
  • 1

#13 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 14 August 2010 - 07:21 AM

Mình kg có và kg dùng Cmap. Mình chỉ kiếm đc file acad.pat do mấy người bạn cho. vđ một số cây lúa bị xén một phần là bình thường. Vì cấu trúc tô đc trải theo một qui luật nhất định nên chắc chắn phải có một phần bị xén khi vướng vào đg bao. Chỉ trừ bạn vẽ BĐ bằng tay hay cấu trúc của bạn là những nét dài vô hạn. Việc một số cấu trúc tô sát biên bị xén theo mình biết qui trình cũng cho phép. Nếu muốn thay đổi hay tạo thêm một số cấu trúc tô bạn đều có thể làm đc trong cad.
Kg rõ Cad có cho tạo cấu trúc tô là một block hay kg, một số phần mềm như MicroStation cho phép làm điều này. Đây là phần mềm nền của Famis phục vụ cho ngành Địa chính, nếu cần bạn nghiên cứu thêm.
Việc sd block cũng giống như bạn explode cấu trúc tô và xóa các phần tử sát biên bị xén

Nếu bạn thật sự muốn làm theo kiểu block mình gợi ý như vậy :
- Tìm đg bao
- Lập hảm xđ điểm ở trong hay ngoài đa giác (chính là đg bao)
- Tìm hình chữ nhật bao quanh đg bao
- Căn cứ vào HCN vừa tìm đc để xđ các điểm đặt cái block
- Kiểm tra vị trí nào nằm trong cái đa giác kia thì insert cái block vào

Mình rất cảm ơn bạn đã cho ý tưởng hay. Mình là dân chuyên ngành địa chính (mặc dù chưa đi làm địa chính ở cty nào cả). Về ứng dụng của McroStation mình biết nhưng đó không phải những gì mình cần. Vì mình muốn nó thực hiện trên Cad, vì Lisp mình mới "mày mò" nên đang chuẩn bị chuyển sang VBA để làm. Nó tương tự như VB mà. Tạo cấu trúc tô rất mất thời gian mà không quản lý được, nếu mình thay đổi hình dạng thì phải delete đối tượng cũ đi (sau khi hatch lại phải explode nó ra vì cần đối tượng rời rạc). Nếu bạn có cấu trúc hatch dành cho chuyên ngành trắc địa thì bạn gửi cho mình nhé. Cảm ơn bạn rất nhiều.
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#14 DuongTrungHuy

DuongTrungHuy

    biết lệnh copy

  • Members
  • PipPipPip
  • 116 Bài viết
Điểm đánh giá: 41 (tàm tạm)

Đã gửi 14 August 2010 - 07:25 AM

Trong bài toán của Cháu thì quan trọng là xác định điểm trong miền kín (đường bao).Chú gợi ý Cháu như sau:
-Tạo ra 1 tập hợp điểm point bằng lệnh array hàng và cột theo khoảng cách yêu cầu, bao hết cả miền kín (Sau khi đã xác định được điểm max và min).
-Dùng lệnh SSget (dạng "cp") để chọn các điểm trong đường bao (chú ý định dạng Point về kiểu chấm "." để không dính các điểm ngoài đường bao.
-Trên cơ sở tập điểm được chọn chèn khối tại những điểm đó.
-Xóa tập hợp điểm đã chọn ban đầu.
Hy vọng Cháu thực hiện được!
  • 0

#15 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 14 August 2010 - 09:27 AM

Trong bài toán của Cháu thì quan trọng là xác định điểm trong miền kín (đường bao).Chú gợi ý Cháu như sau:
-Tạo ra 1 tập hợp điểm point bằng lệnh array hàng và cột theo khoảng cách yêu cầu, bao hết cả miền kín (Sau khi đã xác định được điểm max và min).
-Dùng lệnh SSget (dạng "cp") để chọn các điểm trong đường bao (chú ý định dạng Point về kiểu chấm "." để không dính các điểm ngoài đường bao.
-Trên cơ sở tập điểm được chọn chèn khối tại những điểm đó.
-Xóa tập hợp điểm đã chọn ban đầu.
Hy vọng Cháu thực hiện được!

Vâng
Cháu cảm ơn chú. Nếu chú thời gian chú cháu mình cùng thực hiện. Chắc cháu lại đi sâu vào Lisp thôi. Phải làm quen dần dần. Như bác ssg đã nói, dù đơn giản hay phức tạp nhưng niềm vui làm ra được luôn khác với nhờ người khác làm cho. Cảm ơn chú nhiều
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#16 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 14 August 2010 - 01:23 PM

Thấy bà con bàn rôm rả quá nhưng mình vẫn ko hiểu sao phải mất công nghiện cứu viết lisp trong khi lệnh supperhatchb đáp ứng ok việc này. Chưa kể array xong còn nhóm các block này vào 1 grup nửa rất tiện vậy.
Không tin bác nào đưa ra 1 mẫu đã rải mình dùng lệnh này thực hiện rồi up kết quả lên mọi người xem.

Không phải làm mất công viết lisp đâu bác duy782006 à.
Cái quan trọng là nó còn dùng nhiều trong các bài toán khác nữa. Trong cad 2004 trở xuống không hỗ trợ lệnh surperhatch bác à.
Mỗi ý tưởng một bài toán đều có nguyên nhân và từ đó mới sinh ra được sự sáng tạo và ứng dụng trong lập trình nói riêng. Trong lập trình lisp hay lập trình đồ họa, nếu thâu tóm và quản lý được các đối tượng đồ họa thì việc sử dụng chúng ra sao sẽ rất dễ dàng tuỳ theo mục đích mình tạo ra. Nếu bác cảm thấy nó có quá nhiều bản " rôm rả" thì đó đâu phải là một diễn đàn để mọi người cùng thảo luận và chia sẻ vấn đề cũng như kinh nghiệm. Rất cảm ơn bác đã đóng góp ý kiến
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#17 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 14 August 2010 - 01:49 PM

Không phải làm mất công viết lisp đâu bác duy782006 à.
Cái quan trọng là nó còn dùng nhiều trong các bài toán khác nữa. Trong cad 2004 trở xuống không hỗ trợ lệnh surperhatch bác à.
Mỗi ý tưởng một bài toán đều có nguyên nhân và từ đó mới sinh ra được sự sáng tạo và ứng dụng trong lập trình nói riêng. Trong lập trình lisp hay lập trình đồ họa, nếu thâu tóm và quản lý được các đối tượng đồ họa thì việc sử dụng chúng ra sao sẽ rất dễ dàng tuỳ theo mục đích mình tạo ra. Nếu bác cảm thấy nó có quá nhiều bản " rôm rả" thì đó đâu phải là một diễn đàn để mọi người cùng thảo luận và chia sẻ vấn đề cũng như kinh nghiệm. Rất cảm ơn bác đã đóng góp ý kiến

-Trước tiên xin lổi vì mình vừa pots bài thì đổi ý del ngay không ngờ bác lại quote ngay nên có lổi với bác vậy. Vì hôm trước chưa xem file của bác nên nghỉ bác không biết cách chỉnh khoảng cách giữa các block. Nhưng xem file cảu bác thì hiểu ý rồi. Thực chất thì vẫn làm bằng lệnh super hatch được nhưng phải tạo lại block khác.
-Mình nói rôm rả ko có ý gì cả vì hiểu lầm bên trên nên nghỉ việc này giải quyết đơn giản được mà lại phải viết lisp thì hơi lạ mà lại có nhiều người quan tâm. Tới đây lại xin lổi các bác phát nửa vậy.
-Superhatch từ cadR14 thì đã có rồi (nằm trong bonus).
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#18 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 14 August 2010 - 02:26 PM

-Khi đã là rải theo kiểu hàng trên và dưới lệch nhau như yêu cầu thì không thể dùng lệnh array trong lisp được vì như vậy sẽ cho ra kết quả là hàng trên và dưới như nhau kết quả các block sếp theo hình chử nhật chứ không phải hình thoi như yêu cầu.
-Mình xin đưa là sườn để viết lisp như sau:
-Xác định giới hạn của vùng muốn rải (cao và ngang lớn nhất). (cao rong)
-Hỏi khoảng cách giữa cột. (kcc)
-Hỏi khoảng cách giữa hàng. (kch)
-Lấy cao chia kch tính ra số lượng hàng. Tính ra bao nhiêu hàng chẵn, bao nhiêu hàng lẻ. (hàng chẳn và lẻ khác nhau điểm xuất phát bằng kcc/2 như vậy mới tạo thành hình thoi đc).
-Lấy rông chia kcc tính ra số điểm chèn trên mổi hàng.
-Tìm giao điểm của từng hàng với pline vùng chọn xác định được điểm nào nằm trong và ngoài vùng chọn từ đó chèn block vào cho thích hợp.

Hướng đi mình nghĩ như thế. Đang nghiên cứu lisp tìm giao điểm của 2 đối tượng của bác Hoành và lisp xóa đối tượng trong và ngoài vùng chọn của bác Thiệp nhưng hai bac này dùng hàm vlax nhiều quá đọc không hiểu mấy. Nếu 1 trong hai bác này viết thì bài toán này xong ngay.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#19 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 14 August 2010 - 03:34 PM

Cảm ơn bac gia_bach rất nhiều vì đã quan tâm.
Ý tưởng của em thì rất đơn giản nhưng việc thực hiện cũng tương đối khó khăn (vấn đề chủ yếu là cách thức của ngôn ngữ). Về thuật toán thì em cũng có một số nhưng ngày trước em chỉ chú ý về VB nên bây giờ mới chập chững vào "Lập trình Lisp"[/u] nên chưa hiểu cách thức. Thuật toán 1 điểm nằm trong hay ngoài polyline khép kín thì trong VB em đã có thuật toán. Em ví dụ: xác định 1 điểm max hoặc min trong polyline hoặc trong cả tập hợp điểm, điểm này cộng thêm 1 giá trị delta X hoặc Y nào đó để điểm đó nằm ngoài tập điểm. Nối điểm đó với điểm đang xét nằm trong hay ngoài polyline khép kín (đa giác). Xác định số giao điểm của đường thẳng đó với đa giác. Nếu số giao điểm là chẵn => nằm ngoài và ngược lại. Cách thức này em đã sử dụng OK trong VB khi tạo môi trường đồ họa riêng. Nhưng với Cad thì chắc nó đơn giản hơn rất nhiều. Em rất muốn sau này sẽ tự lập cho mình chương trình ứng dụng trong chuyên ngành với ngôn ngữ lisp (chuyên ngành của em là Trắc Địa). Ý tưởng em cũng có nhưng cách thực hiện thì em đang mò mẫm. Rất mong bác có thể giúp em hoàn thiện chương trình này. Cảm ơn bác gia_bach "admin của Cadviet".

Chào bạn thanhduan, anh Duy
Tue_NV viết 1 đoạn code trên thuật toán mà bạn thanhduan đưa ra :

(defun c:aic(/ ms pl minp maxp minpp name kc ssa ans line minp2)
(vl-load-com)
(command "undo" "be")
(setvar "attreq" 0)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ms (vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object))))
(setq pl (vlax-ename->vla-object (car(entsel "\n Chon Polyline kin :"))))
(vla-getboundingbox pl 'minp 'maxp)
(setq minp (safearray-value minp))
(setq maxp (safearray-value maxp))
(setq name (getstring "\n Nhap ten Block / enter de chon doi tuong : ") ssa '())
(if (= name "") (setq name (cdr(assoc 2 (entget (car(entsel "\n Chon Block :")))))))
(setq kc (getdist "\n Khoang cach hang :"))
(setq minpp (mapcar '- minp (list (distance maxp minp) (distance maxp minp) 0)))

(vl-cmdf "insert" name minp 1 1 0.0)
(setq dtd (vlax-ename->vla-object (entlast)))
(setq minp2 (mapcar '+ minp (list (/ kc 2) (/ kc 2) 0.0)))
(vl-cmdf "insert" name minp2 1 1 0.0)
(setq dts (vlax-ename->vla-object (entlast)))
(setq ssa
(append (list dtd)
(vlax-invoke dtd 'ArrayRectangular
(1+ (fix (/ (- (cadr maxp) (cadr minp)) kc)))
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
1 kc kc 0
)
(list dts)
(vlax-invoke dts 'ArrayRectangular
(1+ (fix (/ (- (cadr maxp) (cadr minp)) kc)))
(1+ (fix (/ (- (car maxp) (car minp)) kc)))
1 kc kc 0
)
)
);setq
:(
:undecided:
(initget "N T")
(setq ans (getkword "\n Ban muon xoa cac doi tuong ngoai hay trong Polyline < N / T > :"))
(foreach x ssa
(setq line (vla-addline ms (vlax-3d-point minpp)
(vla-get-insertionpoint x)
)
)
(if (= (strcase ans) "N")
(progn
(if (= (rem (length (vlax-invoke pl 'intersectwith line 0)) 2) 0)
(vla-erase x)
)
)
)
(if (= (strcase ans) "T")
(progn
(if (= (rem (length (vlax-invoke pl 'intersectwith line 0)) 2) 1)
(vla-erase x)
)
)
)

(vla-erase line)
)
(setvar "osmode" 0)
(command "undo" "end")
)

Bạn thanhduan, anhDuy thử nhé
Chúc các bác 1 ngày cuối tuần vui vẻ :cry:
  • 0

#20 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 14 August 2010 - 04:12 PM

-Khi đã là rải theo kiểu hàng trên và dưới lệch nhau như yêu cầu thì không thể dùng lệnh array trong lisp được vì như vậy sẽ cho ra kết quả là hàng trên và dưới như nhau kết quả các block sếp theo hình chử nhật chứ không phải hình thoi như yêu cầu.
-Mình xin đưa là sườn để viết lisp như sau:
-Xác định giới hạn của vùng muốn rải (cao và ngang lớn nhất). (cao rong)
-Hỏi khoảng cách giữa cột. (kcc)
-Hỏi khoảng cách giữa hàng. (kch)
-Lấy cao chia kch tính ra số lượng hàng. Tính ra bao nhiêu hàng chẵn, bao nhiêu hàng lẻ. (hàng chẳn và lẻ khác nhau điểm xuất phát bằng kcc/2 như vậy mới tạo thành hình thoi đc).
-Lấy rông chia kcc tính ra số điểm chèn trên mổi hàng.
-Tìm giao điểm của từng hàng với pline vùng chọn xác định được điểm nào nằm trong và ngoài vùng chọn từ đó chèn block vào cho thích hợp.

Hướng đi mình nghĩ như thế. Đang nghiên cứu lisp tìm giao điểm của 2 đối tượng của bác Hoành và lisp xóa đối tượng trong và ngoài vùng chọn của bác Thiệp nhưng hai bac này dùng hàm vlax nhiều quá đọc không hiểu mấy. Nếu 1 trong hai bác này viết thì bài toán này xong ngay.

Cảm ơn bác duy782006 rất nhiều vì đã có ý kiến và sáng kiến giải quyết bài toán. Thực ra, trên diễn đàn mọi người đều có những cách giải quyết bài toán khác nhau nhưng đều chung một mục đích là array được 1 đối tượng block trong một vùng kín. Thuật toán của bác nói em cũng biết cách diễn giải như vậy nhưng cái khó là mọi người đều vướng mắc về phương thức thể hiện bằng ngôn ngữ lập trình. Có rất nhiều bài toán hay đang chờ đợi chúng ta ở phía trước. Tất cả đều chung quy lại đầu tư cho mục đích áp dụng cho cuộc sống và công việc đang làm, có người thì lại say mê nghiên cứu và sẵn lòng giải đáp cho mọi người. Em cũng rất mong bác Hoành,bác Thiệp, bác Gia_Bach và các bác trong diễn đàn giúp em giải quyết vấn đề trên. Rất chân thành cảm ơn các bác đã tham gia đóng góp ý kiến.
Xin nói riêng với bác duy782006 : Em trải mảng không nhất thiết là dạng kiểu hình thoi như em đã post (vì trong ngành trắc địa bọn em thì cây lúa hay một số đối tượng địa vật khác đều phải trải theo kiểu như vậy), em array 2 lần đó bác. Cảm ơn bác nhiều
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn