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  
thonghoang1

[Yêu cầu]lisp tạo ra các điểm point lấy gt từ trắc dọc

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

cd2k44    121

Bạn dùng các phần mềm thiết kế đường là có thể làm được việc này mà bạn.Mình nhớ trên diển đàn cũng có 1 anh viết 1 chương trình thiết kế đường bằng lisp chạy trên cad mà không biết là nó ở đâu nên không gửi cho bạn được.Bạn có thể dùng nova,land,civil,...

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
thonghoang1    9

Bạn dùng các phần mềm thiết kế đường là có thể làm được việc này mà bạn.Mình nhớ trên diển đàn cũng có 1 anh viết 1 chương trình thiết kế đường bằng lisp chạy trên cad mà không biết là nó ở đâu nên không gửi cho bạn được.Bạn có thể dùng nova,land,civil,...

,minh không nói các phần mềm đấy,các phần mềm đấy mình cũng dùng,nhưng muốn một lisp thực hiện việc mà mình hay cần đến thôi,mong mọi người giúp

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.649

Bài viết sai quy định bạn ạ. Mọi người lại phải down file của bạn về mới biết ý tưởng sao ?

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

mong anh ketxu giup

Hề hề hề,

Chưa hiểu ý bạn muốn thế nào????

Cái bản vẽ chưa thể hiện được cái bạn muốn.Cái point bạn muốn tạo ra sao??? Ghi vào đâu???

Trên trắc ngang thì cái point ấy thể hiện ra sao????

 

Bạn hãy giải thích kỹ hơn viò không phải ai cũng rành cái chuyên môn của 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
thonghoang1    9

mình muốn tạo 1 điểm point tại vị trí cọc trên cắt ngang.(tại tim của cắt ngang,),giống như là lấy giá trị cao độ mặt đường thiết kế gán vào vị trí cắt ngang tại từng vị trí cọc tương ứng vậy,( cắt dọc, và cắt ngang có thể không cùng ty lệ hoặc cùng tl)

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
npham    75

Đây là một trong bước cơ bản của việc xây dựng phần mềm thiết kế đường.

Để làm được tốt công việc này, khi tạo ra trắc dọc và trắc ngang, người ta phải gán ID cho nó trước (mỗi đường gióng trên trắc dọc tương ứng với ID của cắt ngang) nếu không sẽ rất phức tạp.

Ban đầu người ta xác định điểm giao của đường đỏ với đường gióng trên TD, so sánh với đỉnh đường gióng này để lấy chênh cao, rồi đi tìm cái cái cắt ngang có ID tương ứng để gán vào. Mà để gán vào ở cao độ chính xác, cần phải xác định cao độ chuẩn của cắt ngang (hoặc xác định được điểm giao của đường tự nhiên cắt ngang với trục tim cắt ngang) v.v....

 

Xem ra đề bài bạn đưa ra quả là 1 đồ án lớn. Không biết có ai hứng thú hoặc đủ thời gian để giúp bác khô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
thonghoang1    9

Đây là một trong bước cơ bản của việc xây dựng phần mềm thiết kế đường.

Để làm được tốt công việc này, khi tạo ra trắc dọc và trắc ngang, người ta phải gán ID cho nó trước (mỗi đường gióng trên trắc dọc tương ứng với ID của cắt ngang) nếu không sẽ rất phức tạp.

Ban đầu người ta xác định điểm giao của đường đỏ với đường gióng trên TD, so sánh với đỉnh đường gióng này để lấy chênh cao, rồi đi tìm cái cái cắt ngang có ID tương ứng để gán vào. Mà để gán vào ở cao độ chính xác, cần phải xác định cao độ chuẩn của cắt ngang (hoặc xác định được điểm giao của đường tự nhiên cắt ngang với trục tim cắt ngang) v.v....

 

Xem ra đề bài bạn đưa ra quả là 1 đồ án lớn. Không biết có ai hứng thú hoặc đủ thời gian để giúp bác không?

đúng ý mình rồi,bình thường mình cũng hay làm thủ công bằng cách (1 là mình copy cái đường đỏ trên cắt dọc đấy chọn điểm bắt là điểm nằm trên đường mặt đất tự nhiên tại vị trí cọc đó rồi dán vào điểm mdtn trên cắt ngang cùng vị trí lúc đó cũng sẽ có được điểm giao đấy với đường tim,( là điểm cdtk trên đường đỏ),nhưng thủ công quá. nếu anh nào quan tâm giúp nhé,và nếu thêm lệnh khi mà ta dịch cái đường đỏ đấy lên hoặc xuống thì các điểm piont kia dịch theo thì ok,

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

đúng ý mình rồi,bình thường mình cũng hay làm thủ công bằng cách (1 là mình copy cái đường đỏ trên cắt dọc đấy chọn điểm bắt là điểm nằm trên đường mặt đất tự nhiên tại vị trí cọc đó rồi dán vào điểm mdtn trên cắt ngang cùng vị trí lúc đó cũng sẽ có được điểm giao đấy với đường tim,( là điểm cdtk trên đường đỏ),nhưng thủ công quá. nếu anh nào quan tâm giúp nhé,và nếu thêm lệnh khi mà ta dịch cái đường đỏ đấy lên hoặc xuống thì các điểm piont kia dịch theo thì ok,

Hề hề hề,

Thực ra cái yêu cầu của bạn không quá phức tạp, nhưng việc bạn trình bày để người khác có thể hiểu được là quá kém. Ngoại trừ những người có cùng chuyên môn với bạn thì những người ngoại ngạch như mình thật chả biết đường nào mà mò cả. Có muốn giúp bạn cũng bó tay bó chân luôn.

Sau bài trao đổi trên của bác npham có nhẽ mình vỡ được tí chút. Tuy nhiên vẫn còn những điều chưa hiểu rõ như sau:

1/- so sánh với đỉnh đường gióng này để lấy chênh cao : Vậy cái đỉnh này được xác định ra sao ở cái trắc dọc của bạn??? Phải chăng đó là cái giao điểm của các đường tim c1 c2 c3 c4 với cái đường màu trắng phía trên đường đỏ của bạn???

2/- cần phải xác định cao độ chuẩn của cắt ngang Cái cao độ chuẩn này bạn xác định ra sao trên trắc ngang??? Phải chăng đó là cái đường nằm ngang trên cùng của cái khung chữ nhật mà bạn vẽ cái trắc ngang lên đó.

 

Tương tự như vậy với bài post trả lời của bạn

chọn điểm bắt là điểm nằm trên đường mặt đất tự nhiên tại vị trí cọc đó rồi dán vào điểm mdtn trên cắt ngang cùng vị trí lúc đó cũng sẽ có được điểm giao đấy với đường tim

thì cái đường mặt đất tự nhiên này là đường nào trên bản vẽ bạn gửi mẫu????

 

Nếu bạn có thể trả lời rõ ràng các vấn đề trên thì mình hy vọng có thể giúp được bạn phần nào. cái việc trắc dọc và trắc ngang khác tỷ lệ không phải là quá khó để giải quyết đâu mà vấn đề chính là cái cách để có được cái điểm mà bạn mong muốn cơ.

Theo mình nghĩ thì để dựng được trắc ngang, chắc chắn bạn sẽ phải có khá nhiều các trắc dọc chứ không thể chỉ có một cái trắc dọc tại tim đường như bạn gửi.

Tuy nhiên nếu giải quyết được với trắc dọc này thì với các trắc dọc khác cũng sẽ không quá khó nữa bạn ạ.

Rất mong bạn giải thích rõ hơn cái công việc mà bạn đang cần làm....

 

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
npham    75

Chào bác Bình !

 

Nếu bác nghiên cứu qua cách quản lý đối tượng của nova, vnroad .... thì bác sẽ hiểu ý của npham nói. Với đề bài của topic này thì Có 2 cách:

 

1. Quản lý theo cao độ:

Tất cả các điểm trên trắc dọc hoặc trên 1 cắt ngang đều có thể lấy được cao độ thông qua thông tin được lưu trữ ở 1 nơi nào đó trên trắc dọc hoặc cắt ngang. Thoong thuong là được lưu trữ ở đường line ngang tại vị trí MPSS.

Ví dụ trên trắc dọc: đường line ngang này có MPSS là +10m. Thì 1 điêm P bất kỳ nào đó sẽ có cao độ = 10 + (Yp - Yline) / ty le.

Khi có cao độ của điểm P này rồi thì ta gán nó lên cắt ngang. Tất nhiên vị trí gán cũng phải căng cứ vào MPSS đã lưu trên cắt ngang.

 

2. Trong trường hợp thông tin không được lưu trữ khi tạo TD, TN như trong trường hợp này:

- Tìm điểm giao của đường đỏ so với đường gióng. Chênh cao sẽ là khỏang cách từ điểm giao này đến đỉnh đường gióng (Có nghĩa là khỏang cách từ đường đỏ đến đường đen).

- Trên trắc ngang: Tìm điểm giao của "đường trắng" với cọc tim. Gán 1 điểm cách điểm giao này 1 khỏang = chênh cao đã tìm được trên trắc dọc.

(tất cả các đối tượng: đường giao, đường đỏ, đường đen td, đường đen cn, cọc tim... phải để trên layer riêng biệt để quản lý)

 

Cái khó ở đây là làm sao tìm được cắt ngang tương ứng của mỗi cọc trên TD nếu cắt ngang k được lưu trữ thông tin hoặc không được sắp sếp theo thứ tự hoặc số lượng cn không bằng số lượng cọc trên td v.v...

  • 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

Chào bác Bình !

 

Nếu bác nghiên cứu qua cách quản lý đối tượng của nova, vnroad .... thì bác sẽ hiểu ý của npham nói. Với đề bài của topic này thì Có 2 cách:

 

1. Quản lý theo cao độ:

Tất cả các điểm trên trắc dọc hoặc trên 1 cắt ngang đều có thể lấy được cao độ thông qua thông tin được lưu trữ ở 1 nơi nào đó trên trắc dọc hoặc cắt ngang. Thoong thuong là được lưu trữ ở đường line ngang tại vị trí MPSS.

Ví dụ trên trắc dọc: đường line ngang này có MPSS là +10m. Thì 1 điêm P bất kỳ nào đó sẽ có cao độ = 10 + (Yp - Yline) / ty le.

Khi có cao độ của điểm P này rồi thì ta gán nó lên cắt ngang. Tất nhiên vị trí gán cũng phải căng cứ vào MPSS đã lưu trên cắt ngang.

 

2. Trong trường hợp thông tin không được lưu trữ khi tạo TD, TN như trong trường hợp này:

- Tìm điểm giao của đường đỏ so với đường gióng. Chênh cao sẽ là khỏang cách từ điểm giao này đến đỉnh đường gióng (Có nghĩa là khỏang cách từ đường đỏ đến đường đen).

- Trên trắc ngang: Tìm điểm giao của "đường trắng" với cọc tim. Gán 1 điểm cách điểm giao này 1 khỏang = chênh cao đã tìm được trên trắc dọc.

(tất cả các đối tượng: đường giao, đường đỏ, đường đen td, đường đen cn, cọc tim... phải để trên layer riêng biệt để quản lý)

 

Cái khó ở đây là làm sao tìm được cắt ngang tương ứng của mỗi cọc trên TD nếu cắt ngang k được lưu trữ thông tin hoặc không được sắp sếp theo thứ tự hoặc số lượng cn không bằng số lượng cọc trên td v.v...

Chào bác Npham,

Thực tình mình là dân "me cha ni cô" nên hoàn toàn không sử dụng gì tới các phần mềm Nova hay vnroad hay HS chi đó mà các bác bên giao thông và trắc địa hay dùng.

Vì thế có nhiều cái "thắc mắc" hơi làm các bác không vui.

Qua diễn đàn mình mới biết có các phần mềm như vầy, và cũng qua diễn đàn này mình mới hiểu thêm tí chút về công việc của các bác bên giao thjông và trắc địa. Mình cũng đã thử tham gia vài chủ đề của các bác, nhưng do hiểu biết còn hạn hẹp nên có nhiều điều vẫn chưa nắm được thực chất các yêu cầu mà các bác đưa ra. Mọi thứ cứ phải suy mò đoán bậy nên đôi khi chưa trúng mong các bác thông cảm.

Vấn đề của bạn thonghoang1 đúng như bác nói là phải xác định được các chuẩn tương ứng giữa TD và TN, từ đó mới có thể làm lisp được. Bản vẽ của bạn ấy gửi lên quá it thông tin để mình có thể suy đoán nên mới phải hỏi lại để bạn ấy nói rõ hơn chứ không phải có ý gì khác.

Việc giải đáp của bác làm mình rõ hơn nhiều nhưng để có thể làm được như bạn thonghoang1 yêu cầu, mình vẫn cần hiểu rõ ý của bạn ấy bác ạ.

Chúc bác luôn mạnh khỏe và vui.....

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
thonghoang1    9

cáo lổi vì khâu trình bày hơi khó hiểu nhé bác b: em gởi lại file có ghi chú dể h hơn http://www.cadviet.com/upfiles/3/vidu_6.dwg

vì nhiều lúc các mốc chuẩn tương ứng của tn và tn không cùng,thậm chí các TN cũng không cùng mốc chuẩn, vì cắt ngang có cái thì quá dốc, có cái thì quá bằng phẳng nên mốc chuẩn cũng không giống nhau. nên khi làm em toàn đưa TN và CD về cùng 1 tỷ lệ để copy cái đường đỏ của cắt dọc xuống cắt ngang, giống trong bản vẽ em làm này

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áo lổi vì khâu trình bày hơi khó hiểu nhé bác b: em gởi lại file có ghi chú dể h hơn http://www.cadviet.c...es/3/vidu_6.dwg

vì nhiều lúc các mốc chuẩn tương ứng của tn và tn không cùng,thậm chí các TN cũng không cùng mốc chuẩn, vì cắt ngang có cái thì quá dốc, có cái thì quá bằng phẳng nên mốc chuẩn cũng không giống nhau. nên khi làm em toàn đưa TN và CD về cùng 1 tỷ lệ để copy cái đường đỏ của cắt dọc xuống cắt ngang, giống trong bản vẽ em làm này

Hề hề hề,

Giờ thì mọi việc có vẻ sẽ thuận lợi hơn.

Dựa theo bản vẽ bổ sung của bạn mình viết thử cái lisp này để bạn dùng xem có cần bổ sung hay sửa chữa gì thêm không nhé.


(defun c:gcdtn (/ pl1 pl2 ssc p1 p2 p3 h goc k)
(vl-load-com)
(command "undo" "be")
(setq pl1 (car (entsel "\n Chon pline mat dat tu nhien tren trac doc"))
       pl2 (car (entsel "\n Chon pline mat duong thiet ke tren trac doc"))
)
(alert "\n Chon tap hop cac duong tim coc tren trac doc")
(setq ssc (acet-ss-to-list (ssget (list (cons 0 "LINE") (cons 8 "0")))))
(setq ssc (vl-sort ssc '(lambda (x y) (< (cadr (assoc 10 (entget x))) (cadr (assoc 10 (entget y)))))))
(setvar "pdmode" 34)
(foreach x ssc
      (setq p1 (car (acet-geom-intersectwith x pl1 2))
              p2 (car (acet-geom-intersectwith x pl2 2))
              goc (angle p1 p2)
              h (distance p1 p2)
              p3 (getpoint "\n Chon diem tim mat dat tu nhien tren trac ngang ")
              k (getreal "\n Nhap ty le giua trac doc va trac ngang hien hanh: " )
      )       
      (command "point" (polar p3 goc (* k h)))
)
(command "undo" "e")
(princ)
)

Chúc bạn vui.

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
thonghoang1    9

cảm ơn anh bình: em có vài ý của em như sau.

- trong trường hợp đường thiết tk(dường đỏ ) cao hơn mặt đất tự nhiên nên các đường gióng ( a bình quy định là đường tim đấy) không giao với đường đỏ đấy thì lênh không tiếp tục thực hiện được.muốn thực hiện được thì phải kéo cái đường tim đó lên giao với đường đỏ kia.

- các cắt ngang lúc nào cũng cùng ty lệ, nên theo em có thể bỏ qua bước cứ mổi mc ngang anh lại làm vòng lặp hỏi ty của nó. chỉ hỏi một lần.

- lần trước em có yêu cầu thêm đấy là nếu khi em thực hiện lênh (gcdtn) của anh rồi mà giờ em dịch cái đường đỏ tk kia lên,xuống thì các điểm point kia dịch theo.như vậy là ok,

thank anh bình đã quan tâ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
thonghoang1    9

hiện tại em chưa có ý gì thêm,lisp anh coi như đã gần ok với em rồi, để em dùng xem có vướng gì không em sẽ nhờ anh chỉnh nhé. à còn chổ này nửa: anh cho em dùng đến chử (e) thôi à, tới (e)*n chứ anh,thank anh

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

hiện tại em chưa có ý gì thêm,lisp anh coi như đã gần ok với em rồi, để em dùng xem có vướng gì không em sẽ nhờ anh chỉnh nhé. à còn chổ này nửa: anh cho em dùng đến chử (e) thôi à, tới (e)*n chứ anh,thank anh

Hề hề hề,

1/- Bạn hãy sửa (setq p1 (car (acet-geom-intersectwith x pl1 2)) p2 (car (acet-geom-intersectwith x pl2 2))

thành (setq p1 (car (acet-geom-intersectwith x pl1 1)) p2 (car (acet-geom-intersectwith x pl2 1))

hoặc (setq p1 (car (acet-geom-intersectwith x pl1 3)) p2 (car (acet-geom-intersectwith x pl2 3))

 

2/- Bạn hãy đưa dòng code: k (getreal "\n Nhap ty le giua trac doc va trac ngang hien hanh: " ) ra trước vòng lặp foreach

 

3/- Mình chưa có khả năng để link cái kết quả của lisp với sự thay đổi đường cao độ thiết kế của bạn.

 

4/- Chưa hiểu ý của bạn nói, dùng đến chữ (e) là sao và dùng đến chữ (e)*n là sao nhỉ???? Mình không hề có hạn chế nào khi dùng lisp này cả !!!!!

 

Mong bạn giải thích rõ hơn nhé.

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
npham    75

Mình đã nghiên cứu bản vẽ bạn tải lên. Thực ra ta có thể vạch 1 đường đỏ và hoàn toàn có thể cho nó tự động cập nhật trên cắt ngang.

Và bạn cũng có thể cập nhật lại nếu thay đổi đường đỏ. Bởi các thông tin về tỷ lệ cắt ngang, tỷ lệ cắt dọc, cao đột tim, vị trí tim v.v... đã được lưu trữ ở các đối tượng.

 

Rất tiếc là bản vẽ của bạn hình như đã tự sửa quá nhiều so với bản vẽ mới tạo ra bằng phần mềm, nên k có cở sở chính xác để n/c quy luật sắp xếp của tác giả. Chẳng hạn tỷ lệ cắt dọc mình đọc được là 200,200 nhưng thực tế bản vẽ là 100:100, cao độ cọc C1ở mặt cắt C31 là 387.093 nhưng thực tế đã sửa lại là: 386.75 v.v...

 

Bạn kiểm tra xem có phải như thế khô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
thonghoang1    9

về mặt tỷ lệ thì mình không nói. vì mình có thể scale cài cắt dọc, hoặc cái cắt ngang của phần mềm chạy ra mà, còn các giá trị cao độ khi là đúng chú không sai đâu anh,theo em cái đấy không quan trọng lắm, vì nhiều lúc bản vẽ cắt doc,ngang em vẽ bằng thủ công luôn thì sao,thi nó có các thông số gì đâu anh,thậm trí cả layer cũng khác nhau code a bình viết lại mặc định layer tim trên cắt dọc la ( 0) không tiện cho lắm.em dùng lisp của anh bính có lúc nó chạy đúng có lúc nó chạy lại sai,

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

về mặt tỷ lệ thì mình không nói. vì mình có thể scale cài cắt dọc, hoặc cái cắt ngang của phần mềm chạy ra mà, còn các giá trị cao độ khi là đúng chú không sai đâu anh,theo em cái đấy không quan trọng lắm, vì nhiều lúc bản vẽ cắt doc,ngang em vẽ bằng thủ công luôn thì sao,thi nó có các thông số gì đâu anh,thậm trí cả layer cũng khác nhau code a bình viết lại mặc định layer tim trên cắt dọc la ( 0) không tiện cho lắm.em dùng lisp của anh bính có lúc nó chạy đúng có lúc nó chạy lại sai,

Hề hề hề,

1/- Việc mình chọn các đường tim cọc theo lớp 0 vì trên bản vẽ bạn gửi nó là vậy, Việc này nhằm để hạn chế bớt các đối tượng trong vùng chọn không phải là tim cọc. Nếu bạn thấy không btiện thì có thể bỏ điều kiện lọc đó đi mà.

2/- Hãy gửi cái bản vẽ mà trường hợp nó chạy sai lên để mình kiểm tra nhé.

Chúc bạn vui.

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
thonghoang1    9

http://www.cadviet.com/upfiles/3/vd2.dwg

anh xem th­ử, còn chổ chọn lớp 0 thôi không sao,chổ bản vẽ sai mình chắc chắn là không chọn nhầm điểm trên cn đâu,anh bỏ cái vòng lặp hỏi tỷ lệ dùm em nhé,(hỏi 1 lần thôi,em chỉnh theo anh hd mà không đượ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
npham    75

về mặt tỷ lệ thì mình không nói. vì mình có thể scale cài cắt dọc, hoặc cái cắt ngang của phần mềm chạy ra mà, còn các giá trị cao độ khi là đúng chú không sai đâu anh,theo em cái đấy không quan trọng lắm, vì nhiều lúc bản vẽ cắt doc,ngang em vẽ bằng thủ công luôn thì sao,thi nó có các thông số gì đâu anh,thậm trí cả layer cũng khác nhau code a bình viết lại mặc định layer tim trên cắt dọc la ( 0) không tiện cho lắm.em dùng lisp của anh bính có lúc nó chạy đúng có lúc nó chạy lại sai,

 

Ý của mình là nếu có 1 file "nguyên dạng", bạn có thể làm được công việc bạn muốn hoàn toàn tự động mà không nhất thiết phải nhập thêm thông số nào. như : Tỷ lệ nó tự đọc, cao độ nó tự đọc v.v... Còn là thủ công thì tất nhiên là bạn phải làm nhiều thao tác hơn rồi.

Vậy bạn nghiên cứu lisp của bác Bình đi nhé. Bạn và bác Bình nên phân loại các loại đường theo layer để cho tiện hơn.

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
thonghoang1    9

cảm ơn anh,nêu anh biết thì ra tay giúp em luôn nhé,anh chắc cũng biết ý tưởng của em,nên anh cứ binh lisp của anh theo ý của anh xem sao,

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

http://www.cadviet.c...files/3/vd2.dwg

anh xem th­ử, còn chổ chọn lớp 0 thôi không sao,chổ bản vẽ sai mình chắc chắn là không chọn nhầm điểm trên cn đâu,anh bỏ cái vòng lặp hỏi tỷ lệ dùm em nhé,(hỏi 1 lần thôi,em chỉnh theo anh hd mà không được,)

Hề hề hề,

1/- Bỏ việc chọn tỷ lệ trong mỗi bước lặp:


(defun c:gcdtn (/ pl1 pl2 ssc p1 p2 p3 h goc k)
(vl-load-com)
(command "undo" "be")
(setq pl1 (car (entsel "\n Chon pline mat dat tu nhien tren trac doc"))
       pl2 (car (entsel "\n Chon pline mat duong thiet ke tren trac doc"))
)
(alert "\n Chon tap hop cac duong tim coc tren trac doc")
(setq ssc (acet-ss-to-list (ssget (list (cons 0 "LINE") (cons 8 "0")))))
(setq ssc (vl-sort ssc '(lambda (x y) (< (cadr (assoc 10 (entget x))) (cadr (assoc 10 (entget y)))))))
(setq  k (getreal "\n Nhap ty le giua trac doc va trac ngang hien hanh: " ))
(setvar "pdmode" 34)
(foreach x ssc
  	(setq p1 (car (acet-geom-intersectwith x pl1 1))
      		p2 (car (acet-geom-intersectwith x pl2 1))
      		goc (angle p1 p2)
      		h (distance p1 p2)
      		p3 (getpoint "\n Chon diem tim mat dat tu nhien tren trac ngang ")

  	)      
  	(command "point" (polar p3 goc (* k h)))
)
(command "undo" "e")
(princ)
)

2/- Có nhẽ bạn chưa thực sự hiểu cái lisp của mình hay ngược lại mình chưa thực sự hiểu ý bạn chăng.

Vẫn cái hình bạn post mình test thử thì thấy nó OK 100% luôn.

 

Mình xin giải thích cái lisp của mình như sau:

Khi bạn gõ lệnh gcdtn, lisp sẽ yêu cầu bạn chọn đường biểu diễn cao độ của mặt đất tự nhiên (đường màu vàng)

Tiếp theo lisp yêu cầu bạn chọn đường biểu diễn cao độ của mặt đường theo thiết kế. (đường màu đỏ)

Tiếp theo lisp sẽ yêu cầu bạn chọn tập hợp các đường biểu diễn vị trí của các cọc mà bạn cần xác định cao độ tim trên trắc ngang.(các đường đứng màu trắng)

Từ đó lisp sẽ tính ra độ chênh cao từ mặt đất tự nhiên tới mặt đường theo thiết kế tại vị trí tim mỗi cọc mà bạn đã chọn.

Các cọc này được lisp sắp xếp lại theo trình tự từ trái qua phải để tiện cho việc bạn chọn các mặt cắt ngang ở bước kế tiếp. Tránh tình trạng râu ông nọ cắm cằm bà kia.

Đến đây lisp sẽ hỏi bạn nhập tỷ lệ giửa trắc ngang và trắc dọc chứ không phải tỷ lệ của trắc ngang. Nghĩa là nếu tỷ lệ của trắc dọc là 1/50 và tỷ lệ của trắc ngang là 1/100 thì bạn sẽ phải nhập cái tỷ lệ này là (1/100) / (1/50) = 1/2 = 0,5.

Sau khi nhập tỷ lệ bạn phải chọn các giao điểm của cọc tim (đường màu trắng) trên các trắc ngang (phù hợp với trật tự từ trái sang phải của các vị trí cọc đã chọn trên trắc dọc) với đường biể diễn cao độ mặt đất tự nhiên trên trắc ngang đó (đường màu vàng). Từ đó lisp sẽ vẽ một point tại vị trí tương ứng trên trắc ngang.

 

Đây là nói về cái mình đã sửa để chỉ phải nhập tỷ lệ một lần nhé.

 

Hy vọng rằng bạn sẽ sử dụng được cái lisp này với những điều mình đã nói ở trên. Nếu có gì chưa đúng ý bạn hãy post lên nhé.

Do mình không phải dân trong ngành nên bắt bạn nói hoài cũng mệt. rất mong bạn thông cảm.

 

Do hộp code của diễn đàn bị lỗi nên nó hiển thị sai nội dung lisp, bạn hãy download nó chứ đừng copy nhé.

  • 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

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  

×