Đến nội dung


Hình ảnh
- - - - -

(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


  • Please log in to reply
8 replies to this topic

#1 noinb01

noinb01

    biết zoom

  • Members
  • Pip
  • 14 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 28 August 2016 - 06:35 PM

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.c...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  ạ!


  • 0

#2 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 29 August 2016 - 10:35 AM

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.c...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ì ????


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 noinb01

noinb01

    biết zoom

  • Members
  • Pip
  • 14 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 29 August 2016 - 11:15 AM

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 ạ!


  • 0

#4 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 29 August 2016 - 11:56 AM

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.c...ngtimthucte.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)
)
)

  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 noinb01

noinb01

    biết zoom

  • Members
  • Pip
  • 14 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 29 August 2016 - 01:51 PM

 

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.c...ngtimthucte.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 ạ


  • 0

#6 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 29 August 2016 - 09:36 PM

(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


  • 2

#7 noinb01

noinb01

    biết zoom

  • Members
  • Pip
  • 14 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 29 August 2016 - 11:46 PM

(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!


  • 0

#8 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 30 August 2016 - 11:04 AM

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.c...timthucte_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) "" "")
)

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#9 noinb01

noinb01

    biết zoom

  • Members
  • Pip
  • 14 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 30 August 2016 - 06:05 PM

 

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.c...timthucte_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 ạ!


  • 0