Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
Trang72

[ Yêu Cầu] viết lisp tính chiều dài đường ống nước

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

Trang72    2

Nhờ các anh chị em viết giùm em 1 lisp.

Đề bài như sau: Em có đường ống dẫn nước và số hộ sử dụng nước được thể hiện trên bản vẽ mặt bằng tỷ lệ 1/1. Giúp em viết lisp khi Pich vào đường ống dẫn nước thì hiện lên tổng chiều dài từng tuyến cấp nước và tổng số hộ được cấp nước.

Ví dụ + Pick vào điểm A ra toàn bộ chiều dài của toàn bộ đường ống và toàn bộ số hộ.

+ Pick vào điểm B ra toàn bộ chiều dài và số hộ của nhánh 1 và nhánh 2.

+ Pick vào nhánh 1 ra tổng chiều dài và số hộ nhánh 1

+ Pick vào nhánh 2 ra tổng chiều dài và số hộ nhánh 2

http://www.cadviet.com/upfiles/3/77310_vidu2_1.dwg

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
Tue_NV    3.841

Nhờ các anh chị em viết giùm em 1 lisp.

Đề bài như sau: Em có đường ống dẫn nước và số hộ sử dụng nước được thể hiện trên bản vẽ mặt bằng tỷ lệ 1/1. Giúp em viết lisp khi Pich vào đường ống dẫn nước thì hiện lên tổng chiều dài từng tuyến cấp nước và tổng số hộ được cấp nước.

Ví dụ + Pick vào điểm A ra toàn bộ chiều dài của toàn bộ đường ống và toàn bộ số hộ.

+ Pick vào điểm B ra toàn bộ chiều dài và số hộ của nhánh 1 và nhánh 2.

+ Pick vào nhánh 1 ra tổng chiều dài và số hộ nhánh 1

+ Pick vào nhánh 2 ra tổng chiều dài và số hộ nhánh 2

http://www.cadviet.c...310_vidu2_1.dwg

 

Đã xem qua file của bạn nhưng không hiểu lắm.

Ví dụ Nhánh AB chổ điểm B toàn hộ "THÀNH" ????? Không hiểu??????

Bạn trình bày rõ hơn trong file dwg nhé. Dữ liệu Input và kết quả Output?

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
Trang72    2

Cám ơn Bác đã xem file của em. File VD của em lần lượt em Pick vào điểm A thì nó sẽ quét toàn bộ chiều dài và số hộ của toàn tuyến (AB, nhánh 1, Nhánh 2). Còn khi Pick vào điểm B ( Ngã ba) thì nó sẽ quét chiều dài và số hộ của nhánh 1 và nhánh 2... Cũng tương như vậy nếu có(ngã tư), ngã 5 thì nó sẽ quét nhánh 1, nhánh 2, nhánh 3...

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
phamthanhbinh    3.123

Cám ơn Bác đã xem file của em. File VD của em lần lượt em Pick vào điểm A thì nó sẽ quét toàn bộ chiều dài và số hộ của toàn tuyến (AB, nhánh 1, Nhánh 2). Còn khi Pick vào điểm B ( Ngã ba) thì nó sẽ quét chiều dài và số hộ của nhánh 1 và nhánh 2... Cũng tương như vậy nếu có(ngã tư), ngã 5 thì nó sẽ quét nhánh 1, nhánh 2, nhánh 3...

Hề hề hề,

Thực trình thì bạn ra cái đề hơi oái ăm. Bởi chưng chả phải ai cũng làm cái nghề của bạn và cũng chả phải ai cũng đủ tài năng biết hết mọi vấn đề,

Cách tốt nhất là hãy post cái bản vẽ thể hiện kết quả bạn cần lên chứ cái đầu vào như vầy còn cái đầu ra không biết thì cũng chả thể làm cái gì.

Tỷ như tiêu chí gì để chọn các hộ thuộc nhánh 1 hay nhánh 2 vì chả có ai cấm cái hộ ở gần nhánh 1 lại không được lấy nước từ nhánh 2 cả, Nhất là khi nhánh 1 lại đả quá thiếu lưu lượng rồi.

Hề hề hề,...

Nếu như nó là quá bí mật và chỉ có bạn có quyền được biết thì hỡi ôi bạn chỉ có thể tự mình giải quyết mà thôi, mong chi có người giúp được bạn.

Hề hề hề...

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
Trang72    2

Cám ơn Bác Bình. Từ bản đồ mặt bằng thực tế số hộ trên mặt bằng được cấp nước ta có thể vạch ra được phương án cấp nước một cách tương đối. Số hộ gần nhánh 1 có thể lấy tại nhánh 2 tùy theo địa hình và cao độ. Nhưng ta có thể tính toán và lấy 1 cách tương đối số hộ nào gần đường ống nhánh nào thì lấy đường ống nhánh đó Bác ạ. Em gửi File KQ kèm theo Bác giúp em nhé. http://www.cadviet.com/upfiles/3/77310_77310_vidu2_1.dwg

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
ketxu    2.652

Gần thì bao nhiêu là gần ? Nhánh chỉ đi từ trái sang phải hay sao ? Hộ được tính bằng Text?Vậy Text có gì đặc biệt so với các Text khác trong bản vẽ.Nhánh được tính bằng *line ? Làm thế nào để biết Line nào biểu thị cho đường nước, bản vẽ có Line khác thì lọc thế nào? Nói chung là còn mơ hồ về thông số lọc.

Đề nghị bạn Trang đọc lại các yêu cầu tối thiểu về hình minh họa - đầu vào (nhập cái j), đầu ra (xuất cái j, ra đâu) dưới chữ ký của mình ^^

Lưu ý là đề bài của bạn phục vụ cho công việc đặc thù của bạn, tức không tái sử dụng, vì vậy để mọi người bỏ thời gian viết lisp, bạn nên cố gắng suy nghĩ thêm về cách mà lisp cũng có thể làm việc cũng như cách nó giao tiếp với bạn. Phần còn lại các lispers sẽ hỏi thêm ^^ CHúc bạn thành công

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
Hai_YenLang    150

Còn một cái mơ hồ mơ hồ chưa rõ ràng nữa là đường ống tổng chính, tổng phụ, và các nhánh chia về các hộ gia đình phải có tiết diện to nhỏ khác nhau. Tính gộp cả tổng chiều dài hổ lốn các đoạn ống có tiết diện khác nhau như thế, chả hiểu có ý nghĩa gì về mặt thống kê?

- Có thể chia từng nhánh thành các layer khác nhau để tính tổng cho từng loại

- Khóa layer các đường ống, chỉ để lại layer text , sử dụng lệnh Li có thể biết được tổng số hộ.

- Bạn thử tham khảo các lisp sau:

 

Lisp tính tổng chiều dài của mọi đối tượng có thuộc tính chiều dài (line, pline, spline, arc, circle, ellipse). Lệnh TL:

 

;;;--------------------------------------------------------------------(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)));;;--------------------------------------------------------------------(defun C:TL( / ss L e)(setq    ss (ssget  (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))    L 0.0)(vl-load-com)(while (setq e (ssname ss 0))    (setq L (+ L (length1 e)))    (ssdel e ss))(alert (strcat "Total length = " (rtos L))));;;--------------------------------------------------------------------

 

Mặc dù bài viết này đã lâu rồi nhưng mình vẫn trả lời (biết đâu có người cần dùng).

Lisp Lencal sau đây có thể tính tổng chiều dài các loại đường trong một bản vẽ theo cùng layer, cùng loại nét hay cùng màu sắc.

http://www.cadviet.c.../lencal_v17.lsp

(lệnh: lencal)

Tác giả: Lee Mac. Nguồn: CadTutor

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
Trang72    2

Chào Bác Ketxu : Các hộ sử dụng nước là các text hoặc Mtext bính thường ( Trừ các ký hiệu A, B, Nhánh 1, nhánh 2 ... có thể cho sang 1 lớp khác bác ạ.) đừờng ống dẫn nước là line hoặc pline . Kết quả đầu ra xuất tại bảng cad tại chính file chứa dữ liệu đầu vào.

Cám ơn Bác nhiều !.

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
ketxu    2.652

Chào Bác Ketxu : Các hộ sử dụng nước là các text hoặc Mtext bính thường ( Trừ các ký hiệu A, B, Nhánh 1, nhánh 2 ... có thể cho sang 1 lớp khác bác ạ.) đừờng ống dẫn nước là line hoặc pline . Kết quả đầu ra xuất tại bảng cad tại chính file chứa dữ liệu đầu vào.

Cám ơn Bác nhiều !.

Bạn vui lòng đọc kỹ lại mấy câu mình hỏi 1 lần nữa, còn thiếu rất nhiều thứ cho lisp của bạn xuất xưởng. ^^

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
Trang72    2

. 1.Khi quét số hộ có thể sang sánh nhánh 1 và nhánh 2 nhánh nào gần hơn sẽ được tính vào nhánh đó.

2. Nhánh và trục đi từ trái qua phải và cũng có thể đi phải qua trái (2 trường hợp).

3.Line (Pline) có màu vàng được thể điện cho đường trục các line (Pline) có màu đỏ được tính là đường nhánh.

4.Nếu có nhiều đường line (Pline) khác thì ẩn các đường line khác chỉ để lại đường line nước lại.

http://www.cadviet.com/upfiles/3/77310_77310_77310_vidu2_1.dwg

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
ketxu    2.652

1. Đề vào của bạn lúc đầu chỉ có pick điểm, có thấy chỗ nào nói quét số hộ ? Vậy thực chất có cần quét ?

2. Thế làm cách nào mà bạn pick vào nút ngã 3, nó biết bạn cần tính bên nào ? Pick A tính bên nào ? B tính bên nào ?

3. Cái này mới có trong bản vẽ bạn vừa post hay là quy tắc chung từ trước đến giờ ?

4. Bạn làm hay lisp làm ??

:)

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
Tue_NV    3.841

Chắc là Bác Ketxu chưa hiểu hết ý em diễn đạt . Ý em là lisp sẽ cho ra kết quả cuối cùng Bác ạ.

Thì đúng là Lisp chạy ra kết quả cuối cùng rồi. Và kết quả cuối cùng đó như thế nào đó mới là vấn đề

Không chỉ riêng Ketxu, bác Bình mà chính mình cũng không hiểu ý bạn diễn đạt luôn

Bạn càng diễn đạt rõ ràng thì mọi người mới có thể hiểu và giúp bạn được

Không hiểu ý bạn nói gì thì chịu thôi, có muốn giúp cũng không giúp được bạn đâu.

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
ketxu    2.652

Nhìn hình thì ai cũng biết là bạn muốn làm cái j trong công việc của bạn, nhưng để đi đến cái cuối cùng thì còn thiếu nhiều dữ liệu mà - lispers chưa thể tự quyết định (vì nếu k hợp ý bạn thì viết lại còn vất vả hơn).

Các ý còn thiếu, còn khúc mắc mọi người đều đã nêu ra rồi, có cả gạch đầu dòng và đánh số, bạn không đi vào trả lời thắc mắc mà cứ lo người khác k hiểu ý mình thì topic sẽ không đi đến đâu.

Chúc bạn thành công !

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
Trang72    2

Khó diễn tả nhỉ.

Vấn đề là ở chỗ thế này Bác ketxu ạ :

Ý của em là tại nút A là 1 cái trạm bơm sẽ cấp cho toàn bộ số hộ trên mặt bằng.Để tính được công suất bơm tại nút A ta cần tổng số hộ cần cấp nước.

- Chiều dài đoạn AB sẽ cấp nước cho số hộ trên toàn tuyến AB + thêm số hộ trên nhánh 1+ thêm số họ trên nhánh 2.

- Chiều dài đoạn nhánh 1 cấp nước cho số hộ thuộc nhánh 1.

- Chiều dài đoạn nhánh 2 cấp nước cho nhánh 2.

Cũng tương tự như vậy

- Chiều dài đoạn AC sẽ cấp nước cho số hộ trên toàn tuyến AC + thêm số hộ trên nhánh 3+ thêm số họ trên nhánh 4.

- Chiều dài đoạn nhánh 3 cấp nước cho số hộ thuộc nhánh 3.

- Chiều dài đoạn nhánh 4 cấp nước cho nhánh 4.

Như vậy đoạn AB và đoạn AC đường ống sẽ lớn hơn nhánh 1,2,3,4. nói như vậy để Bác dễ hình dung.

Trả ời Bác Ketxu :

1.Pick điểm nằm trên đường line (pline) Bác À

2.Ngã 3 (4) thì pick điểm trên 2 (3) đường nhánh

3.Cái bản vẽ mới em sửa lại cho rõ ý của bác hỏi :”Nhánh chỉ đi từ trái sang phải hay sao ?” là có thể có thêm nhánh đi từ phải qua trái

4.Lisp sẽ làm các công việc đó

Cám ơn Bác !

 

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
ketxu    2.652

Có lẽ bạn không phải suy tính đến thuật toán viết Lisp nên không hiểu những điều ketxu đã hỏi. Mình cũng diễn đạt lại lý do từng câu mình đã hỏi (cũng có thể trùng với câu mà những người muốn viết giúp bạn hỏi). Bạn đọc kỹ nhé :

Nguyên tắc chung là bạn mới chỉ gửi 1 2 bản vẽ nên chưa thể có quy tắc chuẩn, vì vậy tất cả các dữ kiện bạn phải cung cấp cho người viết, tránh việc đoán mò.

 

1 - Về nhánh, tuyến : theo bạn nói nó có thể là Line, cũng có thể là Pline, thôi thì cứ gọi chung là *LINE nhé. Trong cùng 1 bản vẽ không thể chỉ có những *LINE thể hiện nhánh tuyến, nó còn vô số *LINE ở các thứ khác. Bạn nói lisp sẽ làm việc ẩn các Line khác đi, chỉ để lại cái Nhánh cái tuyến => Bạn phải cung cấp điều kiện lọc, hay nôm na là điều kiện nhận dạng cho Lisp biết là cần giữ lại cái nào, bỏ cái nào, cái nào được tính, phải không ??

 

=> Đầu vào cho nhận dạng *LINE nhánh tuyến cần tối thiểu các điều kiện sau :

- Thuộc tính đặc thù của *LINE (layer, linetype, color, width... hay bất cứ cái gì bạn nghĩ là đặc thù chỉ cái nhánh cái tuyến mới có)

- Quét chọn vùng cần tính để lấy các *Line hay tự động dò trong toàn bộ bản vẽ, hay lấy tất cả các *LINE nối đuôi tính từ điểm Pick (khó khăn khi bạn pick vào các đoạn giao nha) từ điều kiện đặc thù nêu trên ?

 

2. Text thể hiện tên hộ : tương tự, cũng cần điều kiện lọc như 1

- Thuộc tính đặc thù của Text tên hộ

- Thu hẹp khu vực dò tìm tên hộ hay tìm trong toàn bản vẽ

 

3. Pick vào 1 điểm ở giữa nhánh, lisp làm cách nào để biết bạn muốn tính bên nào ?

4. Pick vào 1 điểm giao nhánh, lisp làm sao biết bạn cần tính khu vực bên phải hay bên trái ? Lisp làm sao biết như thế nào gọi là bên phải, bên trái ? Giả sử có 1 chữ T, pick vào ngã 3 đấy thì thân chữ T tính là trái hay phải ?

5. Cái kết quả xuất ra trông nó thế nào đây ?

....

Ngoài ra có thể còn các vấn đề khác mà chỉ người viết mới biết là cần hỏi gì trong lúc viết. Trông như vậy nhưng có nhiều trường hợp phải xét lắm đấy bạn

Dài dòng đôi lời, mong bạn kiên nhẫ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
Detailing    278

Mình hiểu ý bạn chủ topic rồi. Tuy nhiên nó ko chỉ vài dòng Code là xong dc. Mình gợi ý cái solution như sau:

  1. Các đường ống phải vẽ bằng LWPolyline (xác định bởi người viết c/trình ) => các (điểm đầu là trạm bơm)
  2. các hộ là Text/MText (xác định bởi người viết c/trình )
  3. phải có khoảng cách tối đa / tối thiểu của hộ dân đến đường ống -> hộ đó thuộc nhánh nào

 

về thao tác

  1. pick vào điểm đầu lwpolyline -> tính từ điểm đó đến hết (theo nhánh cây)
  2. chọn polyline -> chỉ tính cho polyline đó.

 

 

Cần có lệnh để kiểm tra 1 hộ thuộc nhánh nào để tránh trường hợp hộ đó thuộc 2-n

 

v.v...

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
phamthanhbinh    3.123
Khó diễn tả nhỉ. Vấn đề là ở chỗ thế này Bác ketxu ạ : Ý của em là tại nút A là 1 cái trạm bơm sẽ cấp cho toàn bộ số hộ trên mặt bằng.Để tính được công suất bơm tại nút A ta cần tổng số hộ cần cấp nước. - Chiều dài đoạn AB sẽ cấp nước cho số hộ trên toàn tuyến AB + thêm số hộ trên nhánh 1+ thêm số họ trên nhánh 2. - Chiều dài đoạn nhánh 1 cấp nước cho số hộ thuộc nhánh 1. - Chiều dài đoạn nhánh 2 cấp nước cho nhánh 2. Cũng tương tự như vậy - Chiều dài đoạn AC sẽ cấp nước cho số hộ trên toàn tuyến AC + thêm số hộ trên nhánh 3+ thêm số họ trên nhánh 4. - Chiều dài đoạn nhánh 3 cấp nước cho số hộ thuộc nhánh 3. - Chiều dài đoạn nhánh 4 cấp nước cho nhánh 4. Như vậy đoạn AB và đoạn AC đường ống sẽ lớn hơn nhánh 1,2,3,4. nói như vậy để Bác dễ hình dung. Trả ời Bác Ketxu : 1.Pick điểm nằm trên đường line (pline) Bác À 2.Ngã 3 (4) thì pick điểm trên 2 (3) đường nhánh 3.Cái bản vẽ mới em sửa lại cho rõ ý của bác hỏi :”Nhánh chỉ đi từ trái sang phải hay sao ?” là có thể có thêm nhánh đi từ phải qua trái 4.Lisp sẽ làm các công việc đó Cám ơn Bác !

Hề hề hề,

Sau khi ngó qua cái bản vẽ bạn gửi mình nghĩ rằng yêu cầu của bạn không phải là quá khó khăn , song bạn trình bày khiến cho người đọc thấy quá rắc rối. Cái tư duy của bạn quá ư là ...... "con gái", chả giống với một cán bộ kỹ thuật tí nào....

Để giảm thiểu sự vụ mà lisp phải xử lý ( và cũng để cho người viết lisp dễ làm) bạn có thể gửi bản vẽ với các yêu cầu như sau:

1/- Các line tuyến ống hãy vẽ băng lwpolyline và mỗi tuyến cần tính toán chỉ là một lwpolyline duy nhất. Tỷ như cái đoạn ống từ A tới hết nhánh 1 và 2 sẽ gồm 3 lwpolyline : 1 lwpolyline tuyến AC và 2 lwpolyline nhánh 1 nhánh 2. Tương tự với tuyến AC sẽ gồm 3 lwpolyline là 1 lwpolyline AC và 2 lwpolyline nhánh 3 nhánh 4. Tất cả các lwpolyline này có thể nẳm trên cùng một layer hoặc trên 2 layer khác biệt như TOchinh và TOphu chẳng hạn thì càng tốt.

2/- Có thể sử dụng màu sắc để phân biệt tuyến chính và tuyến phụ. Các tuyến phụ bắt buộc phải bắt đầu từ một điểm nằm trên tuyến chính, không cho phép vẽ các tuyến phụ cẩu thả thậm chí chả thèm giao cắt với tuyến chính nữa..

3/- Các hộ dân bám quanh các tuyến ồng này được thiết lập trên một layer riêng biệt . Tỷ như layer "Hodan" chẳng hạn. Và trên layer này tuyệt nhiên không có bất cứ text nào khác ngoài các text hộ dân.

 

Nếu bạn có thể tạo được bản vẽ như vầy thì công việc mà bạn yêu cầu lisp có thể dễ dàng làm được. Nếu bạn không thể tạo được bản vẽ như vầy nhưng bạn đồng ý với hướng giải quyết như vầy thì mình cũng có thể cải tạo cái bản vẽ của bạn gửi theo hương đó và viết lisp được. Còn nếu bạn không nhất trí với hướng làm như vầy thì có nhẽ phải chờ cao thủ khác xử lý chứ mình không thể xử lý giúp bạn được.

 

Hề hề hề,...

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
Trang72    2

Cám ơn bác Phan Thanh Bình đã diễn tả giúp em. Thực sự em không biết nhiều về lisp và thuật toán của lisp lên diễn tả để giải quyết công việc

làm cho các bác trong diễn đàn thấy rắc rối. Các Bác thông cảm với em nhé. Em đồng ý với hướng giải quyết của Bác Bình Cải tạo lại bản vẽ và giải quyết lisp theo hướng đó. Bác giúp em nhé Cám ơn Bác và toàn thể diễn đà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
phamthanhbinh    3.123
Bản vẽ cải tạo lại theo hướng của Bác phanthanhbình.

http://www.cadviet.c...0_vidu2_1_1.dwg

Hề hề hề.

Do máy của minh đang bị trục trặc nên chưa thể giúp bạn ngay. Để tối nay mình sẽ làm thử bạn nhé. Hy vọng sẽ có bác khác giải quyết giúp bạn sớm hơn.

 

Hề hề hề,

Bạn thử dùng cái này xem đã đúng ý bạn chưa nhé. Nếu cần thay đổi gì thì hãy post lên:


(defun c:tton (/ ent els h l1 n1 ss1 ss0 l0 n0 i)
(vl-load-com)
(command "undo" "be")
(setq ent (car (entsel "\n Chon tuyen ong can thong ke"))
         els (entget ent)
         h (getreal "\n Nhap khoang cach lon nhat toi ho dan : ") 
)          
(if (and (= (cdr (assoc 0 els)) "LWPOLYLINE") (= (cdr (assoc 8 els)) "Tuyennuoc") )
 (progn
    (if (= (cdr (assoc 62 els)) 2)
        (progn
              (tko ent h)
              (setq  l1 (car tkl) n1 (cadr tkl)  ss1 (caddr tkl) l0 0 i 1
                         sst (acet-ss-to-list (ssget "f" (acet-geom-vertex-list ent) (list (cons 0 "lwpolyline") (cons 62 1)))) )
              (alert (strcat "\n Nhanh chinh dai " (rtos l1 2 0) " gom co " (rtos n1 2 0) " ho tieu thu nuoc"))
              (foreach lt sst
                       (redraw lt 3)
                       (tko lt h)
                       (setq  l0  (car tkl) 
                                  ss0 (caddr tkl) )
                       (foreach e ss0
                              (if (= (member e ss1) nil)
                                  (setq ss1 (append ss1 (list e)))
                                  (setq ss0 (vl-remove e ss0))
                              )                               
                       ) 
                       (setq n0 (length ss0))
                       (alert (strcat "\n Nhanh phu thu " (rtos i 2 0) " dai " (rtos l0 2 0) " gom co " (rtos n0 2 0) " ho tieu thu nuoc"))
                       (setq i (1+ i))
                       (redraw lt 4)
              )
        )        
     ) 
     (if (= (cdr (assoc 62 els)) 1)
             (progn
                   (tko ent h)
                   (setq  l1 (car tkl) n1 (cadr tkl)  )
                   (alert (strcat "\n Nhanh phu dai " (rtos l1 2 0) " gom co " (rtos n1 2 0) " ho tieu thu nuoc"))
             )
      )
  )
)
(command "undo" "e")
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun tko (en h / l n ent1 ent2 ptls obj  ang plst) 
(vl-load-com)
(setq el (entget en)
         obj (vlax-ename->vla-object en)
         ptls (acet-geom-vertex-list en)
         ang (angle (car ptls) (cadr ptls))
         tkl (list) )
(command "offset" h en (polar (car ptls) (+ ang (/ pi 2)) h) "")
(setq ent1 (entlast))
(command "offset" h en (polar (car ptls) (- ang (/ pi 2)) h) "")
(setq ent2 (entlast))
(setq l (vlax-curve-getdistatpoint obj (vlax-curve-getendpoint obj)))
(setq plst (acet-geom-vertex-list ent1)
         plst (append plst (reverse (acet-geom-vertex-list ent2))))
(command "erase" ent1 ent2 "")
(setq n (length (setq ss (acet-ss-to-list (ssget "cp" plst (list (cons 0 "text") (cons 8 "Hodan"))))))
         tkl (append tkl (list l n ss)) )
tkl
)

Chúc bạn vui.

Chỉnh sửa theo phamthanhbinh
Bổ sung lisp theo yeu cầu.
  • 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
Trang72    2

Em Cám ơn Bác Bình

  1. Số hộ ở gần 2 nhánh hoặc ở gần 2 đường trục được tính 2 lần .
  2. Khi zoom bản vẽ màn hình che số hộ thì không ra được kết quả.
  3. Nếu có nhiều nhánh thì dễ bị nhầm giữa nhánh này với nhánh khác.

ta có thể đánh lại số hiệu từng đoạn cho đỡ nhầm VD : Đoạn A-B là đường trục, B - B1;B-B2 là đường nhánh.Cũng tương tự như vậy A-C là đường trục; C-C1 là đường Nhánh;C-C2 là đường nhánh .

4. Bác có thể xuất kết quả ra Bảng cad thì quả là tuyệt. Như ví dụ em up lên.

http://www.cadviet.com/upfiles/3/77310_77310_77310_77310_vidu2_1_1.dwg

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
ketxu    2.652

Vấn đề PICK ĐIỂM và tuyến có thể tính từ TRÁI QUA PHẢI và từ PHẢI QUA TRÁI của bạn nó nằm ở đâu bạn Trang72 ơ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
phamthanhbinh    3.123

Em Cám ơn Bác Bình

  1. Số hộ ở gần 2 nhánh hoặc ở gần 2 đường trục được tính 2 lần .
  2. Khi zoom bản vẽ màn hình che số hộ thì không ra được kết quả.
  3. Nếu có nhiều nhánh thì dễ bị nhầm giữa nhánh này với nhánh khác.ta có thể đánh lại số hiệu từng đoạn cho đỡ nhầm VD : Đoạn A-B là đường trục, B - B1;B-B2 là đường nhánh.Cũng tương tự như vậy A-C là đường trục; C-C1 là đường Nhánh;C-C2 là đường nhánh .

4. Bác có thể xuất kết quả ra Bảng cad thì quả là tuyệt. Như ví dụ em up lên.

http://www.cadviet.c...0_vidu2_1_1.dwg

Hề hề hề.

1/- Điều đó chỉ xảy ra với các nhánh chính vì mình chỉ viết cho từng nhánh chính một chứ không phả cho toàn bộ bản vẽ,

2/- Điều đó là tất yếu vì hàm ssget chỉ nhận các đối tượng có trên màn hình. Do vậy để tính nhánh nào thì bạn phải zoom bản vẽ để thấy toàn bộ nhánh đó.

3/- Sẽ không có chuyện nhầm vì mỗi lần chạy lisp bạn chỉ chọn được một nhánh chính hoặc một nhánh phụ. Chả nhẽ bạn chọn nhánh nào mà còn không biết thì???

4/- Việc xuất ra bảng Excel không khó nhưng do không có yêu cầu nên chưa tính tới.

 

Nhìn chung các yêu cầu kể trên không phải là không thể khắc phục.

Tuy nhiên cái chính là bạn cần nói rõ yêu cầu, tỷ như với các hộ dân mà ở các khu vực giao nhau giữa các nhánh chính thì cách chọn ra sao??? Lisp mình viết là dựa vào khoảng cách offset của mỗi nhánh. do vậy với các hộ ở gần giao điểm của các nhánh chính sẽ bị trùng lắp, còn giữa các nhánh chình và nhánh phụ thì chúng đã được loại trừ chứ không có chuyện trùng đâu. Việc loại trừ các hộ trùng ở các nhánh chính sẽ được ưu tiên ra sao??? Vì giữa các nhánh phụ và nhánh chính thì mình ưu tiên cho nhánh chính trước, còn giữa các nhánh phụ với nhau thì thứ tự ưu tiên lại là thứ tự của các nhánh khi lập bộ chọn. Cái này thì hoàn toàn là do CAD nó quyết, mình chả biết thằng nào trước thằng nào sau đâu. Vì thế khi chạy lisp đến nhánh nào bạn sẽ thấy nhánh đó nháy mà thôi.

Việc đánh dấu như bạn nói cần phải theo một quy ước thống nhất và quy ước đó là gì, bạn cũng cần nói rõ mới làm lisp được.

Vì mình mới chỉ quan tâm cho từng nhánh chính nên không xét tới việc trùng này.

Việc zoom màn hình về để thấy hết thực ra chỉ cần dùng zoom extend là xong.

Đã có list thì việc xuất sang Excel không khó nhưng mình cần phải biết xuất cái gì sang đó mới làm chớ.

Vì vậy bạn hãy gửi bản vẽ hoàn chỉnh các yêu cầu như trên mình sẽ hoàn thiện lisp vì mình không muốn làm đi làm lại bạn ạ.....

Chúc bạn vui.

  • 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
Doan Van Ha    2.676

@Trang72 và các bác đã quan tâm tới topic này!

Tôi đề nghị nên kết thúc topic này ở đây, dù đề nghị này có làm cho chủ topic hoặc các bác phật lòng.

Nhưng không thể chấp nhận: chỉ 1 đề bài mà tới 24 bài viết vẫn chưa ra vấn đề!

Trong lúc mọi người đang chắt chiu từng câu chữ, từng ý tưởng để chờ 4rum giúp đỡ, thậm chí có người khi hỏi còn sợ làm phiền người trả lời, thì chủ topic cứ nói mãi nói hoài cũng không ra vấn đề.

Tôi theo dõi từ đầu đến cuối nhưng thất vọng quá!

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  

×