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

Lisp đo khoảng cách 3 tâm đường tròn

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

Em nhờ các bác giúp em xem có lisp nào đo nhanh khoảng cách giữa 3 tâm đường tròn mà lại vuông góc với đường màu vàng ko ạ.Nếu mà dùng đường gióng thì lâu lắm ,hoặc dùng dal 2 tâm ngoài rồi dba tâm giữa. em phải đo kiểu này rất nhiều.

.chuan2.dwg

Untitled.png

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
(defun c:dx ()
(princ "\nchon duong muon xien theo")
(command ".ucs" "ob" pause)
(setq dddn (getpoint "\nDiem viet dim"))
(setq dddd (getpoint "\nDiem thu nhat"))
(while  (setq dddt (getpoint dddd "\nDiem do tiep theo <ENTER de ket thuc>"))
(command ".DIMLINEAR" "non" dddd "non" dddt "non" dddn)
(setq dddd dddt)
)
(command ".ucs" "p")
(Princ))

Về cơ bản là như này

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

; Ban load vao

;Lenh la:   KT_Tron   xong Enter chon 3 vong tron muon ghi kich thuoc nhe

 

(Defun c:KT_Tron(/ e1 e2 e3 da db dc d0 ds1 ds2 ss1 ntt i e0 ka kb kc)
  (setq ss1 (ssget (list (Cons 0 "CIRCLE"))) ntt (sslength ss1))
  (If (= ntt 3)
  (Progn
    (setq ds1 '() i 0 e0 (entlast))
    (Repeat ntt
      (setq ds1 (append ds1 (list (cdr (assoc 10 (entget (ssname ss1 i)))))) i (1+ i))
    )
    (command "Line" (car ds1) (cadr ds1) (caddr ds1) (car ds1) "")
    (setq e1 (entnext e0) e2 (entnext e1)  e3 (entnext e2) d0 (getpoint "\nCho huong: ")
; Bam vao canh chon lam huong
    da (vlax-curve-getClosestPointTo e1 d0) ka (distance d0 da)
          db (vlax-curve-getClosestPointTo e2 d0) kb (distance d0 db)
          dc (vlax-curve-getClosestPointTo e3 d0) kc (distance d0 dc)
          ds2 (list (list ka (car ds1) (cadr ds1) (vlax-curve-getClosestPointTo e1 (caddr ds1))(caddr ds1))
                    (list kb (cadr ds1) (caddr ds1)(vlax-curve-getClosestPointTo e2 (car ds1))(car ds1))
                    (list kc (caddr ds1) (car ds1) (vlax-curve-getClosestPointTo e3 (cadr ds1))(cadr ds1))
              )
          ds2 (vl-sort ds2 '(lambda (x y)(< (car x)(car y))))
          da (cadr (car ds2)) db (caddr (car ds2)) d0 (cadddr (car ds2)) dc (nth 4 (car ds2))
          dx (- (car da)(car d0)) dy (- (cadr da)(cadr d0)) da (list (+ (car dc) dx) (+ (cadr dc) dy))
          dx (- (car db)(car d0)) dy (- (cadr db)(cadr d0)) db (list (+ (car dc) dx) (+ (cadr dc) dy))
    )
    (command "Erase" e1 e2 e3 "")
    (command "dimaligned" da dc pause) (setq dd (getvar "lastpoint")) (command "dimaligned" dc db dd)
  )
  )
)

  • Like 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 thấy cái vấn đề cơ bản mà bạn cần làm trong trường hợp này là biết xoay ucs theo phương đường màu vàng, rồi dim bình thường. Nó có thể giúp bạn xử lý trong những trường hợp 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
12 phút ago, tuanlbn83 cho biết:

BÁC DuongTrungHuy  cho em hỏi em đang dùng thì bị lỗi : Cho huong: ; error: no function definition: VLAX-CURVE-GETCLOSESTPOINTTO là làm sao ạ

Bạn tìm kiếm trên diễn đàn từ khóa: error: no function definition: VLAX là sẽ ra lỗi ! Nếu không biết sửa nữa thì quay lại đây mọi người trả lời tiếp ( Khuyến khích tự tìm hiểu :P )

  • Like 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 đã sửa được rồi, cảm ơn bác

4 giờ trước, Danh Cong cho biết:

Bạn tìm kiếm trên diễn đàn từ khóa: error: no function definition: VLAX là sẽ ra lỗi ! Nếu không biết sửa nữa thì quay lại đây mọi người trả lời tiếp ( Khuyến khích tự tìm hiểu :P )

 

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 Danh Công!

Bạn dùng cái này mình đã bẫy nhiều lỗi, nó sẽ tốt hơn nhé! (là cái LISP Bạn thấy trên video đó)

(Defun c:KT_Tron(/ e1 e2 e3 da db dc d0 ds1 ds2 ss1 ntt i e0 ka kb kc d01 d02 d03 kc1 kc2 kc3)
  (setvar "Osmode" 0)(Setvar "orthomode" 0)  
  (Princ "\nBao chon 3 vong tron: ")
  (setq ss1 (ssget (list (Cons 0 "CIRCLE"))) ntt (sslength ss1))
  (If (= ntt 3)
  (Progn
    (setq ds1 '() i 0 e0 (entlast))
    (Repeat ntt
      (setq ds1 (append ds1 (list (cdr (assoc 10 (entget (ssname ss1 i)))))) i (1+ i))
    )
    (command "Line" (car ds1) (cadr ds1) (caddr ds1) (car ds1) "")
    (setq d0 (getpoint "\nCho huong (bam vao canh huong): ")
          kc1 (distance (car ds1) (cadr ds1)) kc2 (distance (cadr ds1) (caddr ds1)) kc3 (distance (caddr ds1) (car ds1))
          e1 (entnext e0) e2 (entnext e1)  e3 (entnext e2)
          d01 (vlax-curve-getPointAtDist e1 (* 0.5 kc1))
          d02 (vlax-curve-getPointAtDist e2 (* 0.5 kc2))
          d03 (vlax-curve-getPointAtDist e3 (* 0.5 kc3))
    )
    (command "Scale" e1 "" d01 100.0)(command "Scale" e2 "" d02 100.0)(command "Scale" e3 "" d03 100.0)
    (setq da (vlax-curve-getClosestPointTo e1 d0) ka (distance d0 da)
          db (vlax-curve-getClosestPointTo e2 d0) kb (distance d0 db)
          dc (vlax-curve-getClosestPointTo e3 d0) kc (distance d0 dc)
          ds2 (list (list ka (car ds1) (cadr ds1) (vlax-curve-getClosestPointTo e1 (caddr ds1))(caddr ds1))
                    (list kb (cadr ds1) (caddr ds1)(vlax-curve-getClosestPointTo e2 (car ds1))(car ds1))
                    (list kc (caddr ds1) (car ds1) (vlax-curve-getClosestPointTo e3 (cadr ds1))(cadr ds1))
              )
    )
    (setq ds2 (vl-sort ds2 '(lambda (x y)(< (car x)(car y))))
          da (cadr (car ds2)) db (caddr (car ds2)) d0 (cadddr (car ds2)) dc (nth 4 (car ds2))
          dx (- (car da)(car d0)) dy (- (cadr da)(cadr d0)) da (list (+ (car dc) dx) (+ (cadr dc) dy))
          dx (- (car db)(car d0)) dy (- (cadr db)(cadr d0)) db (list (+ (car dc) dx) (+ (cadr dc) dy))
    )
    (command "Erase" e1 e2 e3 "")
    (cond
      ((< (abs (- (distance da db) (distance da dc) (distance db dc))) 0.0001)
             (command "dimaligned" da dc pause) (setq dd (getvar "lastpoint")) (command "dimaligned" dc db dd)
      )
      ((< (abs (- (distance da dc) (distance da db) (distance dc db))) 0.0001)
             (command "dimaligned" da db pause) (setq dd (getvar "lastpoint")) (command "dimaligned" db dc dd)
      )
      ((< (abs (- (distance db dc) (distance da dc) (distance da db))) 0.0001)
             (command "dimaligned" dc da pause) (setq dd (getvar "lastpoint")) (command "dimaligned" da db dd)
      )
    )
  )
  )
)

 

  • 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 thao tác thuận lợi (Pick chọn đường vàng -> Quét chọn các đường tròn -> Pick điểm đặt giá trị đo) thì chỉ cần quickcode thế này là đủ :)

(defun c:foo()
(vl-cmdf 	
	".ucs" "Object" pause
	".qdim" (ssget '((0 . "CIRCLE"))) "" pause
	".ucs" "Previous"
))


 

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

Đúng rồi Bạn ketxu cái "lèn èng" ở đây là tính kích thước theo phương nào, nếu theo đường vàng đã có thì sẽ hết thú vị và tất nhiên sẽ ko còn rối rắm.

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

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  

×