Đến nội dung


Hình ảnh
- - - - -

Autolisp 3D


  • Please log in to reply
9 replies to this topic

#1 tn20159

tn20159

    biết vẽ circle

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

Đã gửi 03 April 2009 - 11:07 PM

Nhờ các Bác, anh em cadviet giúp mình viết lisp sử dụng đường spline theo các tọa độ cho trước x,y,z. Cảm ơn
  • 0

#2 tuannguyen314169

tuannguyen314169

    biết lệnh ddedit

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

Đã gửi 05 April 2009 - 10:26 PM

Nhờ các Bác, anh em cadviet giúp mình viết lisp sử dụng đường spline theo các tọa độ cho trước x,y,z. Cảm ơn

Mình không biết là có thể viết lisp 3D được không, nhưng trên diễn đàn thường sử dụng lisp 2D, tốt nhất là chúng ta cùng nghiên cứu lisp để có thể phục vụ cho mục đích 3D.
  • 0

#3 tdvn

tdvn

    biết lệnh rotate

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

Đã gửi 05 April 2009 - 11:26 PM

Mình không biết là có thể viết lisp 3D ðýợc không, nhýng trên diễn ðàn thýờng sử dụng lisp 2D, tốt nhất là chúng ta cùng nghiên cứu lisp ðể có thể phục vụ cho mục ðích 3D.

Mình không hiểu "lisp 3D" mà các bạn nói nghĩa là gì. Mình thấy có phân biệt lisp 2D hay 3D gì ðâu. Chỉ có loại ðối týợng cad tạo ra có nhận dữ liệu 3D hay không. Mình thấy các ðối týợng POINT, LINE, SPLINE ... ðều nhận dữ liệu 3D, chỉ có pline chỉ nhận dữ liệu 2D. Mình nghĩ, loại ðối týợng nhận ðýợc dữ liệu 3D thì mình cũng sẽ viết ðýợc lisp cho nó nhận dữ liệu 3D chứ, cái này bình thýờng mà. Tuy nhiên, các phép toán về hình học trên 3D thì phức tạp hõn

Nhờ các Bác, anh em cadviet giúp mình viết lisp sử dụng ðýờng spline theo các tọa ðộ cho trýớc x,y,z. Cảm õn

Mình nghĩ yêu cầu của bạn không khó ðối với nhiều bác trên diễn ðàn này. Nhýng hình nhý bạn chýa hình dung công việc mà bạn muốn thì phải. Mỗi ðýờng spline phải có ít nhất 2 toa ðộ, và có lẽ bạn không chỉ muốn viết một cái lisp chỉ ðể vẽ một ðýờng spline. Vậy cái dữ liệu cho trýớc của bạn nó nhý thế nào, ðịnh dạng ra sao, và với dữ liệu ðó, bạn muốn vẽ 1 hay mấy ðýờng spline, bắt ðầu ở ðâu, kết thúc ở ðâu? Thýờng thì ngýời ta dủng file text ðể chứa dữ liệu tọa ðộ (x,y,z) và dùng 1 dòng trống ðể kết thúc 1 ðýờng spline. Còn bạn thì sao ?

Có ðiều, bạn tìm xem trên diễn ðàn này ðã có líp ðó chýa
  • 0

#4 tn20159

tn20159

    biết vẽ circle

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

Đã gửi 08 April 2009 - 10:20 AM

Mình không hiểu "lisp 3D" mà các bạn nói nghĩa là gì. Mình thấy có phân biệt lisp 2D hay 3D gì ðâu. Chỉ có loại ðối týợng cad tạo ra có nhận dữ liệu 3D hay không. Mình thấy các ðối týợng POINT, LINE, SPLINE ... ðều nhận dữ liệu 3D, chỉ có pline chỉ nhận dữ liệu 2D. Mình nghĩ, loại ðối týợng nhận ðýợc dữ liệu 3D thì mình cũng sẽ viết ðýợc lisp cho nó nhận dữ liệu 3D chứ, cái này bình thýờng mà. Tuy nhiên, các phép toán về hình học trên 3D thì phức tạp hõn
Mình nghĩ yêu cầu của bạn không khó ðối với nhiều bác trên diễn ðàn này. Nhýng hình nhý bạn chýa hình dung công việc mà bạn muốn thì phải. Mỗi ðýờng spline phải có ít nhất 2 toa ðộ, và có lẽ bạn không chỉ muốn viết một cái lisp chỉ ðể vẽ một ðýờng spline. Vậy cái dữ liệu cho trýớc của bạn nó nhý thế nào, ðịnh dạng ra sao, và với dữ liệu ðó, bạn muốn vẽ 1 hay mấy ðýờng spline, bắt ðầu ở ðâu, kết thúc ở ðâu? Thýờng thì ngýời ta dủng file text ðể chứa dữ liệu tọa ðộ (x,y,z) và dùng 1 dòng trống ðể kết thúc 1 ðýờng spline. Còn bạn thì sao ?

Có ðiều, bạn tìm xem trên diễn ðàn này ðã có líp ðó chýa

Mình đã tìm trên diễn đàn rồi nhưng không thấy. Công việc của mình rất đơn giản nhưng thường xuyên lặp lại. Mặc khác mình cũng muốn học lisp nhưng không làm gì được cả. Mong các bác chỉ giáo.
Cụ thể :
Từ tọa độ file exel chuyển sang cad bằng cách sử dụng lisp như sau:
Command spline: x=1,6, y=1,38, z=0
x=1,6, y=1,735, z=0,4
x=1,6, y=1,83, z= 0,8
x=1,6, y=1,89, z= 1,2
x=1,6, y=1,935, z=1,6
x=1,6, y=1,98, z=2
x=1,6, y=2,015, z=2,4
x=1,6, y=2,035, z=2,6
Kết thúc đường Spline ( Enter 3 lần ). Sau đó thay đổi toạ độ khác... Nghĩa là đường spline kết thúc ở nhóm tọa độ này sau đó sang nhóm tọa độ khác...
  • 0

#5 haanh

haanh

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2875 Bài viết
Điểm đánh giá: 1554 (rất tốt)

Đã gửi 08 April 2009 - 10:59 AM

Nhờ các Bác, anh em cadviet giúp mình viết lisp sử dụng đường spline theo các tọa độ cho trước x,y,z. Cảm ơn

Bác xem thêm ở đây:

LISP xuất-nhập toạ độ

http://www.cadviet.c...?showtopic=9019
  • 0

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#6 tn20159

tn20159

    biết vẽ circle

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

Đã gửi 08 April 2009 - 03:15 PM

Bác xem thêm ở đây:

LISP xuất-nhập toạ độ

http://www.cadviet.c...?showtopic=9019

Bác đã giúp mình thì giúp cho trót, chứ mình rất lơ tơ mơ về khoảng này. Cảm ơn
  • 0

#7 tdvn

tdvn

    biết lệnh rotate

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

Đã gửi 09 April 2009 - 12:31 AM

Mình ðã tìm trên diễn ðàn rồi nhýng không thấy. Công việc của mình rất ðõn giản nhýng thýờng xuyên lặp lại. Mặc khác mình cũng muốn học lisp nhýng không làm gì ðýợc cả. Mong các bác chỉ giáo.
Cụ thể :
Từ tọa ðộ file exel chuyển sang cad bằng cách sử dụng lisp nhý sau:
Command spline: x=1,6, y=1,38, z=0
x=1,6, y=1,735, z=0,4
x=1,6, y=1,83, z= 0,8
x=1,6, y=1,89, z= 1,2
x=1,6, y=1,935, z=1,6
x=1,6, y=1,98, z=2
x=1,6, y=2,015, z=2,4
x=1,6, y=2,035, z=2,6
Kết thúc ðýờng Spline ( Enter 3 lần ). Sau ðó thay ðổi toạ ðộ khác... Nghĩa là ðýờng spline kết thúc ở nhóm tọa ðộ này sau ðó sang nhóm tọa ðộ khác...

Ðây là file dữ liệu mẫu dạng TEXT, cứ mỗi dòng trống là kết thúc một spline : http://www.cadviet.c...iles/spline.txt
Còn ðây là code, bạn tham khảo xem ðýợc không. Mình không có nhiều thời gian nên có lẽ cũng không tốt lắm
;ve spline
(defun C:VESPL( / n1 f1 st lis p shd kt)
;;;;
(defun ptdanhsach(st ch / st1 i lis ch1)
(setq st1 "")
(setq i 1 lis nil)
(while (<= i (strlen st))
(setq ch1 (substr st i 1))
(if (= ch ch1) (progn
(setq lis (append lis (list st1)))
(setq st1 "")
) (progn
(setq st1 (strcat st1 ch1))
(if (= i (strlen st)) (setq lis (append lis (list st1))))
)
)
(setq i (1+ i))
)
lis
)
(defun opw( tieude duoi)
(setq duongdanfile (getfiled tieude duongdanfile duoi 7))
)
(defun opr( tieude duoi)
(setq duongdanfile (getfiled tieude duongdanfile duoi 6))
)
;;ham chinh
(setq n1 (opr "Ten file toa do : " "txt"))
(setq f1 (open n1 "r") kt nil)
(while (setq st (read-line f1))
(if (/= st "") (progn
(setq lis (ptdanhsach st "\t") p nil)
(cond
((= (length lis) 4)
(setq shd (nth 0 lis) p (list (atof (nth 1 lis)) (atof (nth 2 lis)) (atof (nth 3 lis))))
)
((= (length lis) 3)
(setq p (list (atof (nth 1 lis)) (atof (nth 2 lis)) (atof (nth 3 lis))))
)
(T (setq p nil))
)
(if p (progn
(if (null kt) (progn
(setq kt T)
(command "_.spline" p)
) (command p))
))
) (progn
(command "" "" "")
(setq kt nil p nil)
))
)
(if (and kt p) (command "" "" ""))
(close f1)
(princ)
)

  • 0

#8 tn20159

tn20159

    biết vẽ circle

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

Đã gửi 09 April 2009 - 03:10 PM

[/quote]

Cảm ơn Bác đã quan tâm, nhưng sau khi ap và đánh lệnh Vespl thì bị lỗi như sau: "error: bad argument type: stringp nil"
  • 0

#9 tdvn

tdvn

    biết lệnh rotate

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

Đã gửi 09 April 2009 - 11:28 PM

Cảm õn Bác ðã quan tâm, nhýng sau khi ap và ðánh lệnh Vespl thì bị lỗi nhý sau: "error: bad argument type: stringp nil"

Bạn thêm dòng này vào dýới cùng hoặc trên cùng
(if (null duongdanfile) (setq duongdanfile ""))
Ðầy ðủ nó nhý vậy
;ve spline
(defun C:VESPL( / n1 f1 st lis p shd kt)
;;;;
(defun ptdanhsach(st ch / st1 i lis ch1)
(setq st1 "")
(setq i 1 lis nil)
(while (<= i (strlen st))
(setq ch1 (substr st i 1))
(if (= ch ch1) (progn
(setq lis (append lis (list st1)))
(setq st1 "")
) (progn
(setq st1 (strcat st1 ch1))
(if (= i (strlen st)) (setq lis (append lis (list st1))))
)
)
(setq i (1+ i))
)
lis
)
(defun opw( tieude duoi)
(setq duongdanfile (getfiled tieude duongdanfile duoi 7))
)
(defun opr( tieude duoi)
(setq duongdanfile (getfiled tieude duongdanfile duoi 6))
)
;;ham chinh
(setq n1 (opr "Ten file toa do : " "txt"))
(setq f1 (open n1 "r") kt nil)
(while (setq st (read-line f1))
(if (/= st "") (progn
(setq lis (ptdanhsach st "\t") p nil)
(cond
((= (length lis) 4)
(setq shd (nth 0 lis) p (list (atof (nth 1 lis)) (atof (nth 2 lis)) (atof (nth 3 lis))))
;nếu là tọa độ trắc địa thì như vậy
;(setq shd (nth 0 lis) p (list (atof (nth 2 lis)) (atof (nth 1 lis)) (atof (nth 3 lis))))
)
((= (length lis) 3)
(setq p (list (atof (nth 0 lis)) (atof (nth 1 lis)) (atof (nth 2 lis))))
;nếu là tọa độ trắc địa thì như vậy
;(setq p (list (atof (nth 1 lis)) (atof (nth 0 lis)) (atof (nth 2 lis))))
)
((= (length lis) 2)
(setq p (list (atof (nth 0 lis)) (atof (nth 1 lis)) 0.0))
;nếu là tọa độ trắc địa thì như vậy
;(setq p (list (atof (nth 1 lis)) (atof (nth 0 lis)) 0.0))
)
(T (setq p nil))
)
(if p (progn
(if (null kt) (progn
(setq kt T)
(command "_.spline" p)
) (command p))
))
) (progn
(command "" "" "");nếu muốn đóng lại thì thay như vậy (command "c" "")
(setq kt nil p nil)
))
)
(if (and kt p) (command "" "" ""))"");nếu muốn đóng lại thì thay như vậy (command "c" "")
(close f1)
(princ)
)
(if (null duongdanfile) (setq duongdanfile ""))

  • 0

#10 tn20159

tn20159

    biết vẽ circle

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

Đã gửi 10 April 2009 - 10:22 AM

[/quote]
Cảm ơn Bác rất nhiều, mình đã làm được rồi.
  • 0