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

Tính toán tọa độ trên 2D để lên 3D

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

Công dụng : lisp này để khi pick vào điểm , nó sẽ cho ra toạ độ tuyệt đối của nó so với điểm gốc và tương đối của nó so với điểm liền kề trước nó . Tuy nhiên điểm gốc này được chọn và có toạ độ do người dùng nhập vào để tương ứng toạ độ trong soft PDMS . Xuất dữ liệu ra ngay trong cad cho đơn giản , dễ nhìn .

Vấn đề là nó chạy lung tung lắm , lúc đúng lúc sai . Em chạy nhiều lisp 1 lúc nên nghĩ rằng nó ghi trùng biến lên memory , nhưng em restart cad , tắt hết các lisp khác nhưng dùng được vài lần lại lỗi .

Trong này em có dùng đoạn code vẽ bảng với chú thích của bác ssg , mong bác ssg đừng giận nha (thanks bác nhiều)

 

;;;------------------------------------------------------

(defun Begin_tdo()

(setq

oldOs (getvar "osmode")

oldTrack (getvar "trackpath")

oldOrth (getvar "orthomode")

StyleBN (getvar "textstyle")

Th (cdr (assoc 40 (tblsearch "style" StyleBN)))

SNum (getreal "\nChieu cao cua chu - Height of text :")

p00 (getpoint "\nDiem chuan bang so lieu - Base point of info list [Top right] :")

x_PDbase (getreal "\nNhap toa do X cua basepoint trong PDMS - Enter X coordinate of base point in PDMS :")

y_PDbase (getreal "\nNhap toa do Y cua basepoint trong PDMS - Enter Y coordinate of base point in PDMS :")

CAD (getpoint "\nChon diem base point - Pick base point :")

x1_cad (car CAD)

x2_cad (cadr CAD)

p0 p00

p10 (polar p00 pi (* 60 SNum))

p20 (polar p00 pi (* 120 SNum))

p30 (polar p00 pi (* 180 SNum))

p40 (polar p00 pi (* 240 SNum))

p50 (polar p00 pi (* 260 SNum))

n 0

TT (getint "\nSo bat dau - Enter start number [2] :")

)

(if (not TT) (setq TT 2))

(if (= Th 0) (setq Ts (* 2 SNum)) (setq Ts Th))

(command "line" p00 p50 "")

)

;;;-------------------------------------------------------

(defun So_tdo()

(setvar "osmode" 1)

(setvar "trackpath" 0)

(setq

p2 (getpoint p1 "\nVi tri STT - Place the number: ")

p3 (polar p2 (* pi 1.5) (* 0.5 Ts))

g (angle p1 p2)

r1 (distance p1 p2)

r2 (* 1.37 Ts)

p4 (polar p1 g (- r1 r2))

x2_cad (car p1)

y2_cad (cadr p1)

deltaX (- x2_cad (car CAD))

deltaY (- y_cad (cadr CAD))

x_pd (+ x_PDbase deltaX)

y_pd (+ y_PDbase deltaY)

deltaX_dis (- x2_cad x1_cad)

deltaY_dis (- y3_cad y1_cad)

x1_cad x2_cad

y1_cad y2_cad

)

(setvar "osmode" 0)

(command "circle" p0 20)

(command "leader" p1 p4 "" "" "n")

(command "circle" p2 r2)

(if (= Th 0)

(command "text" "j" "c" p3 Ts 0 TT)

)

(setvar "osmode" 1)

(command "scale" (entlast) "" p3 1)

(setq n (1+ n))

)

;;;-------------------------------------------------------

(defun Txt_tdo (p0 TT x_pd y_pd deltaX_dis deltaY_dis )

(setq

pTT (list (- (car p0) (* 255 SNum)) (- (cadr p0) (* 3.5 SNum)))

pxPD (list (- (car p0) (* 235 SNum)) (cadr pTT))

pyPD (list (- (car p0) (* 175 SNum)) (cadr pTT))

pdeltaX (list (- (car p0) (* 115 SNum)) (cadr pTT))

pdeltaY (list (- (car p0) (* 55 SNum)) (cadr pTT))

)

(if (= Th 0)

(command

"text" "j" "MC" pTT "" "" TT "text" "j" "ML" pxPD "" "" x_pd "text" "j" "ML" pyPD "" "" y_pd

"text" "j" "ML" pdeltaX "" "" deltaX_dis "text" "j" "ML" pdeltaY "" "" deltaY_dis

)

(command

"text" "j" "MC" pTT 0 TT "text" "j" "ML" pxPD 0 x_pd "text" "j" "ML" pyPD 0 y_pd

"text" "j" "ML" pdeltaX 0 deltaX_dis "text" "j" "MC" pdeltaY 0 deltaY_dis

)

);end if

)

;;;-------------------------------------------------------

(defun End_tdo()

(setq

hb (* (* 7 SNum) n)

p1n (polar p10 (* (- 0.5) pi) hb)

p2n (polar p20 (* (- 0.5) pi) hb)

p3n (polar p30 (* (- 0.5) pi) hb)

p4n (polar p40 (* (- 0.5) pi) hb)

p5n (polar p50 (* (- 0.5) pi) hb)

)

(command "line" p00 p0 "" "line" p10 p1n "" "line" p20 p2n "" "line" p30 p3n "" "line" p40 p4n ""

"line" p50 p5n ""

)

)

;;;*************************************************

(Defun C:TD( / oldOs oldTrack OldOrth StyleBN Th p00 p0 p10 p20 p30 p40 p50 p60 p70 n SNum

TT Ts p2 p3 g r1 r2 p4 x1_cad y1_cad x2_cad y2_cad deltaX deltaY x_pd y_pd

pTT pxPD pyPD pdeltaX pdeltaY deltaX_dis deltaY_dis hb p1n p2n p3n p4n p5n p51)

(Begin_tdo)

(While (setq p1 (getpoint "\nChon diem tiep theo - Pick the next point <exit>:"))

(So_tdo)

(Txt_tdo p0 TT x_pd y_pd deltaX deltaY)

(setq

TT (1+ TT)

p0 (list (car p0) (- (cadr p0) (* 7 SNum)))

p51 (polar p0 pi (* 260 SNum))

)

(command "line" p0 p51 "")

)

(End_tdo)

(setvar "orthomode" oldOrth)

(setvar "osmode" oldOs)

(setvar "trackpath" oldTrack)

(princ)

)

;;;*************************************************

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

Chưa hiểu ý, bạn có thể giải thích rõ hơn không.

Mình thấy giữa tên topic, các dòng diễn giải về công dụng của lisp và code chương trình hình như không liên quan gì với nhau?

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ông dụng : lisp này để khi pick vào điểm , nó sẽ cho ra toạ độ tuyệt đối của nó so với điểm gốc và tương đối của nó so với điểm liền kề trước nó . Tuy nhiên điểm gốc này được chọn và có toạ độ do người dùng nhập vào để tương ứng toạ độ trong soft PDMS . Xuất dữ liệu ra ngay trong cad cho đơn giản , dễ nhìn .

Vấn đề là nó chạy lung tung lắm , lúc đúng lúc sai . Em chạy nhiều lisp 1 lúc nên nghĩ rằng nó ghi trùng biến lên memory , nhưng em restart cad , tắt hết các lisp khác nhưng dùng được vài lần lại lỗi .

Trong này em có dùng đoạn code vẽ bảng với chú thích của bác ssg , mong bác ssg đừng giận nha (thanks bác nhiều)

;;;------------------------------------------------------
(defun Begin_tdo()
(setq
oldOs (getvar "osmode")
oldTrack (getvar "trackpath")
oldOrth (getvar "orthomode")
StyleBN (getvar "textstyle")
Th (cdr (assoc 40 (tblsearch "style" StyleBN)))
SNum (getreal "\nChieu cao cua chu - Height of text :")
p00 (getpoint "\nDiem chuan bang so lieu - Base point of info list [Top right] :")
x_PDbase (getreal "\nNhap toa do X cua basepoint trong PDMS - Enter X coordinate of base point in PDMS :")
y_PDbase (getreal "\nNhap toa do Y cua basepoint trong PDMS - Enter Y coordinate of base point in PDMS :")
CAD (getpoint "\nChon diem base point - Pick base point :")
x1_cad (car CAD)
x2_cad (cadr CAD)
p0 p00
p10 (polar p00 pi (* 60 SNum))
p20 (polar p00 pi (* 120 SNum))
p30 (polar p00 pi (* 180 SNum))
p40 (polar p00 pi (* 240 SNum))
p50 (polar p00 pi (* 260 SNum))
n 0
TT (getint "\nSo bat dau - Enter start number [2] :")
)
(if (not TT) (setq TT 2))
(if (= Th 0) (setq Ts (* 2 SNum)) (setq Ts Th))
(command "line" p00 p50 "")
)
;;;-------------------------------------------------------
(defun So_tdo()
(setvar "osmode" 1)
(setvar "trackpath" 0)
(setq
p2 (getpoint p1 "\nVi tri STT - Place the number: ")
p3 (polar p2 (* pi 1.5) (* 0.5 Ts))
g (angle p1 p2)
r1 (distance p1 p2)
r2 (* 1.37 Ts)
p4 (polar p1 g (- r1 r2))
x2_cad (car p1)
y2_cad (cadr p1)
deltaX (- x2_cad (car CAD))
deltaY (- y_cad (cadr CAD))
x_pd (+ x_PDbase deltaX)
y_pd (+ y_PDbase deltaY)
deltaX_dis (- x2_cad x1_cad)
deltaY_dis (- y3_cad y1_cad)
x1_cad x2_cad
y1_cad y2_cad
)
(setvar "osmode" 0)
(command "circle" p0 20)
(command "leader" p1 p4 "" "" "n")
(command "circle" p2 r2)
(if (= Th 0)
(command "text" "j" "c" p3 Ts 0 TT)
)
(setvar "osmode" 1)
(command "scale" (entlast) "" p3 1)
(setq n (1+ n))
)
;;;-------------------------------------------------------
(defun Txt_tdo (p0 TT x_pd y_pd deltaX_dis deltaY_dis )
(setq
pTT (list (- (car p0) (* 255 SNum)) (- (cadr p0) (* 3.5 SNum)))
pxPD (list (- (car p0) (* 235 SNum)) (cadr pTT))
pyPD (list (- (car p0) (* 175 SNum)) (cadr pTT))
pdeltaX (list (- (car p0) (* 115 SNum)) (cadr pTT))
pdeltaY (list (- (car p0) (* 55 SNum)) (cadr pTT))
)
(if (= Th 0)
(command
	"text" "j" "MC" pTT "" "" TT		"text" "j" "ML" pxPD "" "" x_pd		 "text" "j" "ML" pyPD "" "" y_pd  
	"text" "j" "ML" pdeltaX "" "" deltaX_dis	"text" "j" "ML" pdeltaY "" "" deltaY_dis		 
)
(command
	"text" "j" "MC" pTT 0 TT	"text" "j" "ML" pxPD 0 x_pd	 "text" "j" "ML" pyPD 0 y_pd
	"text" "j" "ML" pdeltaX 0 deltaX_dis	"text" "j" "MC" pdeltaY 0 deltaY_dis	 
)
);end if
)
;;;-------------------------------------------------------
(defun End_tdo()
(setq
hb (* (* 7 SNum) n)
p1n (polar p10 (* (- 0.5) pi) hb)
p2n (polar p20 (* (- 0.5) pi) hb)
p3n (polar p30 (* (- 0.5) pi) hb)
p4n (polar p40 (* (- 0.5) pi) hb)
p5n (polar p50 (* (- 0.5) pi) hb)
)
(command "line" p00 p0 "" "line" p10 p1n "" "line" p20 p2n "" "line" p30 p3n "" "line" p40 p4n ""
 "line" p50 p5n "" 
)
)
;;;*************************************************
(Defun C:TD( / oldOs oldTrack OldOrth StyleBN Th p00 p0 p10 p20 p30 p40 p50 p60 p70 n SNum 
		TT Ts p2 p3 g r1 r2 p4 x1_cad y1_cad x2_cad y2_cad deltaX deltaY x_pd y_pd
		pTT pxPD pyPD pdeltaX pdeltaY deltaX_dis deltaY_dis hb p1n p2n p3n p4n p5n p51)
(Begin_tdo)
(While (setq p1 (getpoint "\nChon diem tiep theo - Pick the next point :"))
	(So_tdo)
	(Txt_tdo p0 TT x_pd y_pd deltaX deltaY)
	(setq
		TT (1+ TT)
		p0 (list (car p0) (- (cadr p0) (* 7 SNum)))
		p51 (polar p0 pi (* 260 SNum))
	)
	(command "line" p0 p51 "")
)
(End_tdo)
(setvar "orthomode" oldOrth)
(setvar "osmode" oldOs)
(setvar "trackpath" oldTrack)
(princ)
)

;;;*************************************************

 

 

Bạn nên trình bày rõ hơn để người khác hiểu bạn muốn gì.

Với đọan code này tôi cũng chưa rõ là bạn bi sai thuật tóan hay sai cấu trúc chương trình. Đối với những bài tóan mang tính chuyên ngành nên có sự giải thích thuật tóan rõ rà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

Mình đã sửa được rồi , nhưng có 1 vấn đề mình không hiểu nổi : khi mình chọn điểm mà mình zoom sát vô đối tượng để không còn thấy bảng số liệu thì sau khi làm xong , bảng số liệu ghi rất đúng , nhưng nếu mình vẫn thấy cùng lúc bảng số liệu mà máy đang vẽ và đối tượng cần tính thì bảng số liệu nó sẽ vẽ rất lung tung .

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
Mình đã sửa được rồi , nhưng có 1 vấn đề mình không hiểu nổi : khi mình chọn điểm mà mình zoom sát vô đối tượng để không còn thấy bảng số liệu thì sau khi làm xong , bảng số liệu ghi rất đúng , nhưng nếu mình vẫn thấy cùng lúc bảng số liệu mà máy đang vẽ và đối tượng cần tính thì bảng số liệu nó sẽ vẽ rất lung tung .

Các bác down thử về xem giúp mình cái .

code http://www.cadviet.com/upfiles/Toado2_TD.lsp

file cad http://www.cadviet.com/upfiles/Drawing1_2.dwg

 

(setvar "osmode" 0)

Theo tôi thì trong khi thực hiện lệnh kẻ bảng (cái nào mà bị vẽ sai) bạn tiếu dòng trên. Nên xảy ra tình trạng trê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

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

×