Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
28 replies to this topic

#21 thonghoang1

thonghoang1

    biết vẽ polygon

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

Đã gửi 14 September 2011 - 04:17 PM

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,)
  • 0

#22 npham

npham

    biết lệnh rotate

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

Đã gửi 14 September 2011 - 04:43 PM

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.
  • 0

#23 thonghoang1

thonghoang1

    biết vẽ polygon

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

Đã gửi 14 September 2011 - 05:27 PM

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,
  • 0

#24 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 14 September 2011 - 05:29 PM

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é.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#25 thichhoabinh

thichhoabinh

    biết vẽ circle

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

Đã gửi 14 September 2011 - 05:47 PM

Ớ, em tưởng sắp từ trái qua phải thì sắp xếp theo x (car point) chứ bác nhỉ :) Mà cái dòng đấy bác comment out nó rồi hay sao ý ạ
  • 0

#26 thonghoang1

thonghoang1

    biết vẽ polygon

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

Đã gửi 15 September 2011 - 08:41 AM

thank anh bình,lisp đã đúng theo ý em,nếu anh em nào ra tay thêm chổ link đường đỏ thiết kế và với các point tao ra thi ok,(thay đổi đường đỏ thì point thay đổi theo)
  • 0

#27 npham

npham

    biết lệnh rotate

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

Đã gửi 15 September 2011 - 11:26 AM

thank anh bình,lisp đã đúng theo ý em,nếu anh em nào ra tay thêm chổ link đường đỏ thiết kế và với các point tao ra thi ok,(thay đổi đường đỏ thì point thay đổi theo)


Bạn có cái file gốc do phần mềm tạo ra không cho mình xin 1 bản nghiên cứu với. Thanks.
  • 0

#28 thonghoang1

thonghoang1

    biết vẽ polygon

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

Đã gửi 15 September 2011 - 04:24 PM

bạn đưa địa chỉ mail minh gởi cho
  • 0

#29 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 15 September 2011 - 04:50 PM

Ớ, em tưởng sắp từ trái qua phải thì sắp xếp theo x (car point) chứ bác nhỉ :) Mà cái dòng đấy bác comment out nó rồi hay sao ý ạ

Hề hề hề,
Bạn chú ý rằng :
(assoc 10 (entget x)) trả về list (10 (list point))
Vậy nên muốn có list point bạn phải lấy (cdr (assoc 10 (entget x)))
và muốn có tọa độ x của đối tượng x bạn phải dùng (car (cdr (assoc 10 (entget x)))) hay (cadr (assoc 10 (entget x))).
Hề hề hề,
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.