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

Giúp mình cái lisp này

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

Với bản vẽ đó thì bạn vẽ 1 cái răng rồi array là xong ngay!

bạn có cách nào làm việc đó trên lisp không?mình gặp khó khăn khi bắt điểm đầu và cuối của đường thân khai

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

bạn có cách nào làm việc đó trên lisp không?mình gặp khó khăn khi bắt điểm đầu và cuối của đường thân khai

1). Bạn post bài sai quy định. Hãy đọc nội quy post bài vào box autolisp.

2). Hình vẽ của bạn phải thể hiện đầy đủ kích thước diễn tả được chi tiết của mỗi răng. Tôi là người ngoại đạo nên nhìn hình không hiểu.

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

Trong thực tế sản xuất, bản vẽ bánh răng được vẽ đại diện theo quy ước rồi đính kèm các thông số chế tạo bánh răng như mô-đun, bước...

 

1244793615_ddvip_4188.jpeg1244793578_ddvip_3122.jpeg

 

Nếu bạn rỗi hơi, thừa thời gian vẽ hết tất cả các răng bằng lệnh Array cũng không sai.

Đây là lisp vẽ đường thân khai:

Có 1 cách là vẽ bằng đường spline. xác định 1 số điểm chính xác và nối lại bằng Spline. Nếu bạn biết sử dụng mã VBA thì đây là một đoạn mã để vẽ đường đường này(Ở đây r0 bằng 10)

Public Sub pratice()
Dim spl As AcadSpline
Dim i As Variant
Dim b(0 To 2) As Double
Dim p(0 To 2) As Double
Dim anpha As Double
Dim x1 As Double
Dim y1 As Double
Dim j As Integer
Dim step As Double
Dim l As Double
Dim r0 As Double
Dim p1(0 To 5) As Double
Dim startTan(0 To 2) As Double
Dim endTan(0 To 2) As Double


r0 = 10
l = 3 * r0
step = 5 * 3.14 / 180
i = ThisDrawing.Utility.GetPoint(, "Chon diem goc")
If Round(l / (r0 * step) - 0.5) > 1 Then
	p1(0) = i(0) + l
	p1(1) = i(1) + r0
	p1(2) = 0
	p1(3) = i(0) + r0 * Sin(step) + Cos(step) * (l - step * r0)
	p1(4) = i(1) + r0 * Cos(step) - Sin(step) * (l - step * r0)
	p1(5) = 0
	startTan(0) = 0: startTan(1) = 0: startTan(2) = 0
	endTan(0) = 0: endTan(1) = 0: endTan(2) = 0
	Set spl = ThisDrawing.ModelSpace.AddSpline(p1, startTan, endTan)
Else
	Exit Sub
End If
For j = 2 To Round(l / (r0 * step) - 0.5)
	anpha = j * step
	x1 = r0 * Sin(anpha)
	y1 = r0 * Cos(anpha)
	p(0) = i(0) + x1 + y1 / r0 * (l - anpha * r0)
	p(1) = i(1) + y1 - x1 / r0 * (l - anpha * r0)
	spl.AddFitPoint j, p
Next
'Ve duong tron
Dim cir As AcadCircle
Set cir = ThisDrawing.ModelSpace.AddCircle(i, r0)
End Sub

Còn đây là chương trình Autolisp tạo đường cong thân khai đường tròn tích hợp vào AutoCAD:

http://www.cadviet.c...04426_bai3b.pdf

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
Lisp Ghi chiều dài thanh thép bên cạnh
Xin mọi người sửa giùm lisp sau.
Tôi muốn kết quả chiều cao chữ định sẵn , hoặc định một lần đầu, lần sau cứ enter là chiều cao chữ đó. ở đây tôi cứ mày mò ra được chiều cao chữ lần đầu sử dụng, nhưng enter thi cad không hiểu lệnh.
 
Mong mọi người giúp đỡ.
 
;; free lisp from cadviet.com
(defun add_mline ()
(foreach e_record_sub e_record
(cond ((= 10 (car e_record_sub))
(setq pt1 (cdr e_record_sub)
mline_len 0.0
)
)
((= 11 (car e_record_sub))
(setq pt2 (cdr e_record_sub)
mline_len (+ mline_len (distance pt2 pt1))
pt1 pt2
)
)
)
)
(setq f (+ f mline_len))
(ssdel e_name ss)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:th (/ f ss e_name e_record e_type)
(setq f 0.0)
(setq ss (ssget))
(if (null ss)
(exit))
(while (> (sslength ss) 0)
(setq e_name (ssname ss 0))
(setq e_record (entget e_name))
(setq e_type (cdr (assoc '0 e_record)))
(cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
(command "lengthen" e_name "")    
(setq f (+ f (getvar "PERIMETER")))
(ssdel e_name ss))
((wcmatch e_type "MLINE") (add_mline))
(e_type (ssdel e_name ss))))
(setq p (getpoint "\n Chon diem nhap ket qua" ))
(if (not k) (setq k 1)) (setq h (getreal (strcat "\n Nhap chieu cao text < " (rtos k 2 2) " >: "))) (if h (setq k h))
(command "text" p h "0" (strcat(rtos f 2 0)))
;(prompt (strcat "\nTotal length is: " (rtos f 2 2)))
(princ));end

sửa giùm lisp nay mình, mình muốn nó định cỡ chữ sẵn, hoặc định một lần rồi lần sau tiếp tục lấy giá trị đó.
Thanhkyou

;; free lisp from cadviet.com
;; this lisp was downloaded from http://www.cadviet.c...?showtopic=3778
(defun add_mline ()
(foreach e_record_sub e_record
(cond ((= 10 (car e_record_sub))
(setq pt1 (cdr e_record_sub)
mline_len 0.0
)
)
((= 11 (car e_record_sub))
(setq pt2 (cdr e_record_sub)
mline_len (+ mline_len (distance pt2 pt1))
pt1 pt2
)
)
)
)
(setq f (+ f mline_len))
(ssdel e_name ss)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:th (/ f ss e_name e_record e_type)
(setq f 0.0)
(setq ss (ssget))
(if (null ss)
(exit))
(while (> (sslength ss) 0)
(setq e_name (ssname ss 0))
(setq e_record (entget e_name))
(setq e_type (cdr (assoc '0 e_record)))
(cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
(command "lengthen" e_name "")
(setq f (+ f (getvar "PERIMETER")))
(ssdel e_name ss))
((wcmatch e_type "MLINE") (add_mline))
(e_type (ssdel e_name ss))))
(setq p (getpoint "\n Chon diem nhap ket qua" ))
(if (not k) (setq k 1)) (setq h (getreal (strcat "\n Nhap chieu cao text < " (rtos k 2 2) " >: "))) (if h (setq k h))
(command "text" p h "0" (strcat(rtos f 2 0)))
;(prompt (strcat "\nTotal length is: " (rtos f 2 2)))
(princ));end

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

 

Lisp Ghi chiều dài thanh thép bên cạnh
Xin mọi người sửa giùm lisp sau.
Tôi muốn kết quả chiều cao chữ định sẵn , hoặc định một lần đầu, lần sau cứ enter là chiều cao chữ đó. ở đây tôi cứ mày mò ra được chiều cao chữ lần đầu sử dụng, nhưng enter thi cad không hiểu lệnh.
 
Mong mọi người giúp đỡ.
 
;; free lisp from cadviet.com
(defun add_mline ()
(foreach e_record_sub e_record
(cond ((= 10 (car e_record_sub))
(setq pt1 (cdr e_record_sub)
mline_len 0.0
)
)
((= 11 (car e_record_sub))
(setq pt2 (cdr e_record_sub)
mline_len (+ mline_len (distance pt2 pt1))
pt1 pt2
)
)
)
)
(setq f (+ f mline_len))
(ssdel e_name ss)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:th (/ f ss e_name e_record e_type)
(setq f 0.0)
(setq ss (ssget))
(if (null ss)
(exit))
(while (> (sslength ss) 0)
(setq e_name (ssname ss 0))
(setq e_record (entget e_name))
(setq e_type (cdr (assoc '0 e_record)))
(cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
(command "lengthen" e_name "")    
(setq f (+ f (getvar "PERIMETER")))
(ssdel e_name ss))
((wcmatch e_type "MLINE") (add_mline))
(e_type (ssdel e_name ss))))
(setq p (getpoint "\n Chon diem nhap ket qua" ))
(if (not k) (setq k 1)) (setq h (getreal (strcat "\n Nhap chieu cao text < " (rtos k 2 2) " >: "))) (if h (setq k h))
(command "text" p h "0" (strcat(rtos f 2 0)))
;(prompt (strcat "\nTotal length is: " (rtos f 2 2)))
(princ));end

http://www.cadviet.com/upfiles/3/13694_

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  

×