Chuyển đến nội dung
Diễn đàn CADViet
noinb01

(Nhờ Viết Lisp) Vẽ Polyline Qua Các Điểm Khi Biết Tọa Độ Tương Đối Với Điểm Gốc

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

Hiện tại em đang phải vẽ lại mặt cắt ngang của tuyến dựa trên số liệu đo đạc thực tế, tuy nhiên số liệu đo đạc lại được ghi lại theo tọa độ tương đối với tim đường, tức là mỗi điểm đo đều có các tọa độ gồm : khoảng cách (ngang) tới tim, và chênh cao so với cao độ tim tuyến. Em muốn nhờ các bác viết giùm em lisp với nội dung như sau ạ:

- Chọn điểm gốc (chính là vị trí tim tuyến tại mặt cắt ngang)

- Chọn text cao độ điểm gốc

- Nhập khoảng cách (ngang) điểm 1 tới điểm gốc (Nhập Delta X1)

- Nhập chênh cao điểm 1 với điểm gốc (Nhập Delta Y1)

- Tiếp tục nhập Delta X và Delta Y của các điểm tiếp theo đến khi Enter để kết thúc lệnh, khi đó Lisp sẽ vẽ ra một đương polyline bắt đầu từ điểm gốc được chọn rồi lần lượt đi qua các điểm vừa nhập tọa đô, nhập xong tọa độ điểm nào thì vẽ luôn PL đến điểm đấy.

Đây là file mẫu ạ : http://www.cadviet.com/upfiles/6/148247_up.dwg

Lần đầu viết bài có gì sai sót mong mọi người chỉ bảo thê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

Hiện tại em đang phải vẽ lại mặt cắt ngang của tuyến dựa trên số liệu đo đạc thực tế, tuy nhiên số liệu đo đạc lại được ghi lại theo tọa độ tương đối với tim đường, tức là mỗi điểm đo đều có các tọa độ gồm : khoảng cách (ngang) tới tim, và chênh cao so với cao độ tim tuyến. Em muốn nhờ các bác viết giùm em lisp với nội dung như sau ạ:

- Chọn điểm gốc (chính là vị trí tim tuyến tại mặt cắt ngang)

- Chọn text cao độ điểm gốc

- Nhập khoảng cách (ngang) điểm 1 tới điểm gốc (Nhập Delta X1)

- Nhập chênh cao điểm 1 với điểm gốc (Nhập Delta Y1)

- Tiếp tục nhập Delta X và Delta Y của các điểm tiếp theo đến khi Enter để kết thúc lệnh, khi đó Lisp sẽ vẽ ra một đương polyline bắt đầu từ điểm gốc được chọn rồi lần lượt đi qua các điểm vừa nhập tọa đô, nhập xong tọa độ điểm nào thì vẽ luôn PL đến điểm đấy.

Đây là file mẫu ạ : http://www.cadviet.com/upfiles/6/148247_up.dwg

Lần đầu viết bài có gì sai sót mong mọi người chỉ bảo thêm  ạ!

Hề hề hề,

Chưa hiểu cái việc chọn text cao độ điểm gốc của bạn phục vụ mục tiêu gì ????

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

Hề hề hề,

Chưa hiểu cái việc chọn text cao độ điểm gốc của bạn phục vụ mục tiêu gì ????

bác nói đúng, thừa rồi ạ ^^ Bác Bình giúp em với đượ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

bác nói đúng, thừa rồi ạ ^^ Bác Bình giúp em với được không ạ!

Hề hề hề,

Bạn thử cái này coi đúng ý chưa nhé. Lưu ý khi nhập DeltaX và DeltaY có thể nhập số âm thoe đúng giá trị tương đối với điểm gốc.

 

http://www.cadviet.com/upfiles/6/5194_veduongtimthucte.lsp

 

(Defun c:vpl (/ p0 x0 y0 p1 x y p2)
(setq p0 (getpoint "\n Chon diem tim tuyen")
         x0 (car p0)
         y0 (cadr p0) 
         p1 (list (+ x0 (getreal "\n Nhap ly do diem dau: ")) (+ y0 (getreal "\n Nhap chenh cao diem dau: "))) )
(while (and (setq x (getreal "\n Nhap ly do diem tiep theo: ")) (setq y (getreal "\n Nhap chenh cao diem tiep theo : ")))
        (setq p2 (list (+ x0 x) (+ y0 y)))
        (command "pline" p1 p2 "")
        (setq p1 p2)
)
)

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

 

Hề hề hề,

Bạn thử cái này coi đúng ý chưa nhé. Lưu ý khi nhập DeltaX và DeltaY có thể nhập số âm thoe đúng giá trị tương đối với điểm gốc.

 

http://www.cadviet.com/upfiles/6/5194_veduongtimthucte.lsp

(Defun c:vpl (/ p0 x0 y0 p1 x y p2)
(setq p0 (getpoint "\n Chon diem tim tuyen")
         x0 (car p0)
         y0 (cadr p0) 
         p1 (list (+ x0 (getreal "\n Nhap ly do diem dau: ")) (+ y0 (getreal "\n Nhap chenh cao diem dau: "))) )
(while (and (setq x (getreal "\n Nhap ly do diem tiep theo: ")) (setq y (getreal "\n Nhap chenh cao diem tiep theo : ")))
        (setq p2 (list (+ x0 x) (+ y0 y)))
        (command "pline" p1 p2 "")
        (setq p1 p2)
)
)

vâng em vẽ được rồi nhưng bác có thể sửa lại để các đường vẽ ra join lại với nhau được không ạ? Em dùng lisp xong enter để kết thúc lệnh thì kết quả nhận được là các đoạn thẳng độc lập, mà em thì muốn nối lại thành 1 đường thô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
(Defun c:vpl (/ p0 x0 y0 p1 x y p2)
  (setq	p0 (getpoint "\n Chon diem tim tuyen")
	x0 (car p0)
	y0 (cadr p0)
	p1 (list (list (+ x0 (getreal "\n Nhap ly do diem dau: "))
		       (+ y0 (getreal "\n Nhap chenh cao diem dau: "))
		 )
	   )
  )
  (while (and (setq x (getreal "\n Nhap ly do diem tiep theo: "))
	      (setq y (getreal "\n Nhap chenh cao diem tiep theo : "))
	 )
    (setq p1 (cons (list (+ x0 x) (+ y0 y)) p1))
;;;        (command "pline" p1 p2 "")
;;;        (setq p1 p2)
  )
  
  (if (< 1 (Length p1))
    (COMMAND "_.PLINE"
	     (repeat (Length p1)
	       (COMMAND
		 (CAR p1)
	       )
	       (SETQ p1 (CDR p1))
	     )

    )
  )
  (princ)
)

Bạn thử cái này

  • Vote tăng 2

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
(Defun c:vpl (/ p0 x0 y0 p1 x y p2)
  (setq	p0 (getpoint "\n Chon diem tim tuyen")
	x0 (car p0)
	y0 (cadr p0)
	p1 (list (list (+ x0 (getreal "\n Nhap ly do diem dau: "))
		       (+ y0 (getreal "\n Nhap chenh cao diem dau: "))
		 )
	   )
  )
  (while (and (setq x (getreal "\n Nhap ly do diem tiep theo: "))
	      (setq y (getreal "\n Nhap chenh cao diem tiep theo : "))
	 )
    (setq p1 (cons (list (+ x0 x) (+ y0 y)) p1))
;;;        (command "pline" p1 p2 "")
;;;        (setq p1 p2)
  )
  
  (if (< 1 (Length p1))
    (COMMAND "_.PLINE"
	     (repeat (Length p1)
	       (COMMAND
		 (CAR p1)
	       )
	       (SETQ p1 (CDR p1))
	     )

    )
  )
  (princ)
)

Bạn thử cái này

 

Cám ơn bác ạ, đúng ý em rồ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

Cám ơn bác ạ, đúng ý em rồi!

Hề hề hề,

Bạn có thể dùng cái này. Nó khác với cái của bạn tien2005 ở chỗ nó vẽ lần lượt từng đoạn khi bạn nhập số liệu rồi mới jonit, còn của bạn tien2005 thì nhập hết số liệu và nó vẽ một lần. Tùy bạn chọn lựa nhé.

 

http://www.cadviet.com/upfiles/6/5194_veduongtimthucte_1.lsp

 

 

(Defun c:vpl (/ p0 x0 y0 p1 x y p2 lst)
(setq p0 (getpoint "\n Chon diem tim tuyen")
         x0 (car p0)
         y0 (cadr p0) 
         p1 (list (+ x0 (getreal "\n Nhap ly do diem dau: ")) (+ y0 (getreal "\n Nhap chenh cao diem dau: "))) )
(while (and (setq x (getreal "\n Nhap ly do diem tiep theo: ")) (setq y (getreal "\n Nhap chenh cao diem tiep theo : ")))
        (setq p2 (list (+ x0 x) (+ y0 y)))
        (command "pline" p1 p2 "")
        (setq lst (cons (entlast) lst))
        (setq p1 p2)
)
(command "pedit" (entlast) "j" (acet-list-to-ss lst) "" "")
)
  • 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

 

Hề hề hề,

Bạn có thể dùng cái này. Nó khác với cái của bạn tien2005 ở chỗ nó vẽ lần lượt từng đoạn khi bạn nhập số liệu rồi mới jonit, còn của bạn tien2005 thì nhập hết số liệu và nó vẽ một lần. Tùy bạn chọn lựa nhé.

 

http://www.cadviet.com/upfiles/6/5194_veduongtimthucte_1.lsp

(Defun c:vpl (/ p0 x0 y0 p1 x y p2 lst)
(setq p0 (getpoint "\n Chon diem tim tuyen")
         x0 (car p0)
         y0 (cadr p0) 
         p1 (list (+ x0 (getreal "\n Nhap ly do diem dau: ")) (+ y0 (getreal "\n Nhap chenh cao diem dau: "))) )
(while (and (setq x (getreal "\n Nhap ly do diem tiep theo: ")) (setq y (getreal "\n Nhap chenh cao diem tiep theo : ")))
        (setq p2 (list (+ x0 x) (+ y0 y)))
        (command "pline" p1 p2 "")
        (setq lst (cons (entlast) lst))
        (setq p1 p2)
)
(command "pedit" (entlast) "j" (acet-list-to-ss lst) "" "")
)

vâng cảm ơn bác Bì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

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

×