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

Giúp Đỡ [Lisp] Tự Động Vẽ Đầu Mũi Khoan

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

Chào tất cả anh em trong diễn đàn

mình có một bài toán mong các anh em giúp đỡ

yêu cầu bài toán:

1. có một đoạn thẳng mình muốn tạo ra một tam giác cân góc 60 độ chỉ với 2 click . 

      click 1: chọn đường thẳng

      click 2 : chon miền đặt điểm đỉnh của tam giác

2. tự động tạo ra lỗ khoan bằng cách nhập tọa độ 2 điểm trên màn hinh mà khoảng cách giữa hai điểm đó chính là chiều sâu của mũi khoan sau đó chương chình yêu cầu nhập đường kính mũi khoan

......

mình muốn 2 bài toán trên gộp thành một chương trình với 2 lựa chọn

mình đã upload hình ảnh mô tả bài toán ở dưới. rất mong các anh em giúp đỡ.

 

https://drive.google.com/file/d/0Byp-qz2acPIgcF9fV2FPZDc3VUk/view?usp=sharing

  • Vote giảm 1

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ào tất cả anh em trong diễn đàn

mình có một bài toán mong các anh em giúp đỡ

yêu cầu bài toán:

1. có một đoạn thẳng mình muốn tạo ra một tam giác cân góc 60 độ chỉ với 2 click . 

      click 1: chọn đường thẳng

      click 2 : chon miền đặt điểm đỉnh của tam giác

2. tự động tạo ra lỗ khoan bằng cách nhập tọa độ 2 điểm trên màn hinh mà khoảng cách giữa hai điểm đó chính là chiều sâu của mũi khoan sau đó chương chình yêu cầu nhập đường kính mũi khoan

......

mình muốn 2 bài toán trên gộp thành một chương trình với 2 lựa chọn

mình đã upload hình ảnh mô tả bài toán ở dưới. rất mong các anh em giúp đỡ.

 

https://drive.google.com/file/d/0Byp-qz2acPIgcF9fV2FPZDc3VUk/view?usp=sharing

Một vài gợi ý :

bài 1.

- Gọi ptA là đỉnh của tam giác cân (vì góc ở đỉnh là 60 độ => t/giác đều)

- gọi ent là dường thẳng đã chọn

sử dụng hàm (vlax-curve-getClosestPointTo ent ptA) để tính điểm ptH là chân đường  cao cũng là đường trung trực.

- vẽ đ/cao từ ptA đến ptH (copy thành 2 đường)

 + xuay đường cao này qua trái 1 góc 30, tìm giao với đ/thầng ent ta được điểm ptB (sử dung hàm vla-intersectwith)

 + tương tự, xuay đường cao này qua phải 1 góc 30, tìm giao với đ/thầng ent ta được điểm ptC 

- nối các điểm ptA, ptB, ptC ta được kết quả là tam giác đều.

 - xóa các đường phụ (nếu cầ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ính toán mệt. Phương án khỏe hơn là tạo block chứa tam giác cân có góc đáy là 60 độ không có cạnh đáy. Chiều dài đáy là 1 đơn vị.

Insert block này vào dựa trên 2 điểm line. X nó ra là xong.

 

Mà ngó chừng chủ thớt nói uyễn chuyễn thế thôi chứ là nhờ viết lisp chứ ko phải nhờ chỉ hướng đâu nhỉ

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ào tất cả anh em trong diễn đàn

mình có một bài toán mong các anh em giúp đỡ

yêu cầu bài toán:

1. có một đoạn thẳng mình muốn tạo ra một tam giác cân góc 60 độ chỉ với 2 click . 

      click 1: chọn đường thẳng

      click 2 : chon miền đặt điểm đỉnh của tam giác

2. tự động tạo ra lỗ khoan bằng cách nhập tọa độ 2 điểm trên màn hinh mà khoảng cách giữa hai điểm đó chính là chiều sâu của mũi khoan sau đó chương chình yêu cầu nhập đường kính mũi khoan

......

mình muốn 2 bài toán trên gộp thành một chương trình với 2 lựa chọn

mình đã upload hình ảnh mô tả bài toán ở dưới. rất mong các anh em giúp đỡ.

 

https://drive.google.com/file/d/0Byp-qz2acPIgcF9fV2FPZDc3VUk/view?usp=sharing

 

Mũi khoan có góc ở đỉnh là 60℃ , không biết anh có hơi bị ... nhầm nhọt gì không???

Phải chăng, anh đang thiết kế loại MŨI KHOAN CHUYÊN DÙNG ĐỂ KHOAN ...THỊT LỢ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

Chào tất cả anh em trong diễn đàn

mình có một bài toán mong các anh em giúp đỡ

yêu cầu bài toán:

1. có một đoạn thẳng mình muốn tạo ra một tam giác cân góc 60 độ chỉ với 2 click . 

      click 1: chọn đường thẳng

      click 2 : chon miền đặt điểm đỉnh của tam giác

2. tự động tạo ra lỗ khoan bằng cách nhập tọa độ 2 điểm trên màn hinh mà khoảng cách giữa hai điểm đó chính là chiều sâu của mũi khoan sau đó chương chình yêu cầu nhập đường kính mũi khoan

......

mình muốn 2 bài toán trên gộp thành một chương trình với 2 lựa chọn

mình đã upload hình ảnh mô tả bài toán ở dưới. rất mong các anh em giúp đỡ.

 

https://drive.google.com/file/d/0Byp-qz2acPIgcF9fV2FPZDc3VUk/view?usp=sharing

Mềnh chả biết mũi khoan là gì nhưng thấy bài toàn giải hay hay nên nghịch chơi. Thử lisp này nhé. ^_^

;;;Found Internet
(defun Point_per (P1 P2 P3 / X1 X2 X3 Y1 Y2 Y3 Z1 Z2 Z3 T4)
  (setq	X1 (car P1)
	X2 (car P2)
	X3 (car P3)
	Y1 (cadr P1)
	Y2 (cadr P2)
	Y3 (cadr P3)
	Z1 (caddr P1)
	Z2 (caddr P2)
	Z3 (caddr P3)
	T4 (/ (+ (* (- X2 X1) (- X3 X1))
		 (* (- Y2 Y1) (- Y3 Y1))
		 (* (- Z2 Z1) (- Z3 Z1))
	      )
	      (+ (* (- X2 X1) (- X2 X1))
		 (* (- Y2 Y1) (- Y2 Y1))
		 (* (- Z2 Z1) (- Z2 Z1))
	      )
	   )
  )
  (list	(+ X1 (* T4 (- X2 X1)))
	(+ Y1 (* T4 (- Y2 Y1)))
	(+ Z1 (* T4 (- Z2 Z1)))
  )
)
;;;My funtions
(defun ve_mui_khoan ( / a p10 p11 pt pt1 pt2 pt_0)
  (setq a (car (entsel "\nChon doan thang: ")))
  (if a
    (progn
      (setq p10 (cdr (assoc 10 (entget a))))
      (setq p11 (cdr (assoc 11 (entget a))))
      (setq pt (polar p10 (angle p10 p11) (/ (distance p10 p11) 2)))
      (setq pt1 (getpoint "\nChon diem bat ky: "))
      (setq pt2 (Point_per p10 p11 pt1))
      (setq pt_0 (polar	pt
			(angle pt2 pt1)
			(/ (* (distance p10 p11) (sqrt 3)) 6)
		 )
      )
      (command "_polygon" "3" "_none" pt_0 "I" p10)
    )
  )
)
(defun ve_lo_khoan (/ p1 p2 d p3 p4 p5 p6 p7 ang)
  (setq p1 (getpoint "\nChon diem 1: "))
  (setq p2 (getpoint p1 "\nChon diem 2: "))
  (setq d (getreal "\nChon duong kinh: "))
  (setq p3 (polar p1 (+ (setq ang (angle p1 p2)) (* pi 0.5)) (/ d 2))
	p4 (polar p3 (+ ang (* pi 1.5)) d)
	p5 (polar p4 ang (distance p1 p2))
	p6 (polar p5 (+ ang (* pi 0.5)) d)
	p7 (polar p2 (angle p1 p2) (/ (* d (sqrt 3)) 6))
	)
  (command "line" "_non" p3 "_non" p4 "_non" p5 "_non" p6 "_non" p3 ""
	   "line" "_non" p6 "_non" p7 "_non" p5 "")
  )
(defun c:test ()
  (initget 1 "M L ")
  (setq ob (getkword "\nChon ve mui khoan hoac ve lo khoan [Mui/Lo]: "))
  (cond
    ((= ob "M")
     (ve_mui_khoan)
     )
    ((= ob "L")
     (ve_lo_khoan)
     )
    );#cond
  (princ)
  )

Lệnh test nhé.

  • Vote tăng 1

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 chả biết mũi khoan là gì nhưng thấy bài toàn giải hay hay nên nghịch chơi. Thử lisp này nhé. ^_^

;;;Found Internet
(defun Point_per (P1 P2 P3 / X1 X2 X3 Y1 Y2 Y3 Z1 Z2 Z3 T4)
  (setq	X1 (car P1)
	X2 (car P2)
	X3 (car P3)
	Y1 (cadr P1)
	Y2 (cadr P2)
	Y3 (cadr P3)
	Z1 (caddr P1)
	Z2 (caddr P2)
	Z3 (caddr P3)
	T4 (/ (+ (* (- X2 X1) (- X3 X1))
		 (* (- Y2 Y1) (- Y3 Y1))
		 (* (- Z2 Z1) (- Z3 Z1))
	      )
	      (+ (* (- X2 X1) (- X2 X1))
		 (* (- Y2 Y1) (- Y2 Y1))
		 (* (- Z2 Z1) (- Z2 Z1))
	      )
	   )
  )
  (list	(+ X1 (* T4 (- X2 X1)))
	(+ Y1 (* T4 (- Y2 Y1)))
	(+ Z1 (* T4 (- Z2 Z1)))
  )
)
;;;My funtions
(defun ve_mui_khoan ( / a p10 p11 pt pt1 pt2 pt_0)
  (setq a (car (entsel "\nChon doan thang: ")))
  (if a
    (progn
      (setq p10 (cdr (assoc 10 (entget a))))
      (setq p11 (cdr (assoc 11 (entget a))))
      (setq pt (polar p10 (angle p10 p11) (/ (distance p10 p11) 2)))
      (setq pt1 (getpoint "\nChon diem bat ky: "))
      (setq pt2 (Point_per p10 p11 pt1))
      (setq pt_0 (polar	pt
			(angle pt2 pt1)
			(/ (* (distance p10 p11) (sqrt 3)) 6)
		 )
      )
      (command "_polygon" "3" "_none" pt_0 "I" p10)
    )
  )
)
(defun ve_lo_khoan (/ p1 p2 d p3 p4 p5 p6 p7 ang)
  (setq p1 (getpoint "\nChon diem 1: "))
  (setq p2 (getpoint p1 "\nChon diem 2: "))
  (setq d (getreal "\nChon duong kinh: "))
  (setq p3 (polar p1 (+ (setq ang (angle p1 p2)) (* pi 0.5)) (/ d 2))
	p4 (polar p3 (+ ang (* pi 1.5)) d)
	p5 (polar p4 ang (distance p1 p2))
	p6 (polar p5 (+ ang (* pi 0.5)) d)
	p7 (polar p2 (angle p1 p2) (/ (* d (sqrt 3)) 6))
	)
  (command "line" "_non" p3 "_non" p4 "_non" p5 "_non" p6 "_non" p3 ""
	   "line" "_non" p6 "_non" p7 "_non" p5 "")
  )
(defun c:test ()
  (initget 1 "M L ")
  (setq ob (getkword "\nChon ve mui khoan hoac ve lo khoan [Mui/Lo]: "))
  (cond
    ((= ob "M")
     (ve_mui_khoan)
     )
    ((= ob "L")
     (ve_lo_khoan)
     )
    );#cond
  (princ)
  )

Lệnh test nhé.

Mình xin lỗi vì đã viết là góc tạo mũi khoan là 60 độ

nó là 120 độ

cảm ơn bạn rất nhiề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

Mình xin lỗi vì đã viết là góc tạo mũi khoan là 60 độ

nó là 120 độ

cảm ơn bạn rất nhiều

Nếu là 120 thì thay dòng

(command "_polygon" "3" "_none" pt_0 "I" p10)

 

bằng dòng

 

(command "_line" "_non" p10 "_non" pt_0 "_non" p11 "") 

 

Có thể thay line thành pline tùy ý.

  • Vote tăng 1

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

Nếu là 120 thì thay dòng

(command "_polygon" "3" "_none" pt_0 "I" p10)

 

bằng dòng

 

(command "_line" "_non" p10 "_non" pt_0 "_non" p11 "") 

 

Có thể thay line thành pline tùy ý.

Tuyệt. Cảm ơn bạn rất nhiều

:D

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  

×