Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
tn20159

Autolisp 3D

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

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.

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

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

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
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.com/forum/index.php?showtopic=9019

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 ðã 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.com/upfiles/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)
)

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 ðã 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 ""))

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
Đăng nhập để thực hiện theo  

×