Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 h2c

h2c

    biết vẽ ellipse

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

Đã gửi 27 October 2007 - 11:06 AM

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)
)
;;;*************************************************
  • 0

#2 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 27 October 2007 - 11:44 AM

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

#3 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 27 October 2007 - 02:23 PM

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

#4 lamtecco2

lamtecco2

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 715 Bài viết
Điểm đánh giá: 856 (rất tốt)

Đã gửi 27 October 2007 - 03:38 PM

Ý bạn là khi pick vào một điểm nào đó sẽ có 2 giá trị toạ độ sao???
  • 0

#5 h2c

h2c

    biết vẽ ellipse

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

Đã gửi 27 October 2007 - 07:09 PM

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

#6 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 29 October 2007 - 07:41 AM

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

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#7 h2c

h2c

    biết vẽ ellipse

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

Đã gửi 29 October 2007 - 10:08 AM

Thanks mọi người , em đã sửa được rồi .
  • 0