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

NHỜ CÁC ANH CHỊ VIẾT, SỬA GIÚP EM LIPS AUTODIM

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

Em có lụm nhặt trên mạng được lisp autodim khá hay nhưng chỉ dùng được cho line, em chỉ lụm đc file VLX.
Giờ em muốn nó dùng cho XLine thì phải làm ntn, mong anh chị giúp đỡ

 

AUTO DIM.rar

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

XLine mà cũng dim được sao? Bạn thử dim XLine bằng lệnh xem có được không.

  • 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
4 phút trước, 7o7 đã nói:

XLine mà cũng dim được sao? Bạn thử dim XLine bằng lệnh xem có được không.

ý là khoảng cách giữa các XLine ấy bạn
image.thumb.png.d53c4da3854eb2290bdc4b45f1874195.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
23 phút trước, ronaldo2002 đã nói:

MÀ CÓ CŨNG CHƯA CHẮC BIETS SỬA EM MỚI TẬP TÀNH NÊN GÀ

Thông thường, file .VLX thì không thể sửa được, chỉ có thể viết lại thôi bạn!

  • 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
Vừa xong, NTHAHT đã nói:

Thông thường, file .VLX thì không thể sửa được, chỉ có thể viết lại thôi bạn!

VÂNG Ý EM LÀ NGUYÊN LÍ HOẠT ĐỘNG NÓ SẼ TƯƠNG TỰ LISP TRÊN, CHỨ CHO EM FILE LSP EM CŨNG K SỬA NỔI NÊN MỚI NHỜ MN Ạ

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
14 giờ trước, NTHAHT đã nói:

Mình viết giúp bạn đây.

 

X1_Y1.rar

tuyệt quá anh ạ, cảm ơn anh nhiều ạ. 1000 vote cho anh. Qua giờ em mới đăng nhập lại thấy đc mn giúp đỡ mà vui quá

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
21 giờ trước, NTHAHT đã nói:

Mình viết giúp bạn đây.

 

X1_Y1.rar

Làm phiền a 1 chút ạ, em rất tôn trọng ng viết lisp như anh nma việc lúc load lisp có cái thông báo , mỗi khi vào cad có nhiều thông báo quá. Cả lisp của anh 3Duy cũng thế nên ấn thông báo 4 5 cái mong anh xóa bỏ giúp em cái thông báo đc ko anh.
Nếu là file lsp em có thể tự xóa chứ vlx ko biết xóa sao a ạ.
Cái này k phải là ko tôn trọng ng viết đâu e chỉ muốn tối ưu hóa thời gian thôi a ạ, mỗi lần mở lên 5 6 cái tab thông báo load lisp cũng hơi lâu. Nếu có gì k vừa ý mong anh bỏ qua cho em.

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ấy giây hiện thông báo có đáng gì với việc hữu ích rút ngắn thời gian mà lisp mang lại. Chúc bạn thành công!

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 ở dưới đây, để bạn có thể sửa thoả thích.

+ Ngoài ra mình còn làm thêm 3 lệnh khác là DX, DY, DXY.

  - Lệnh DX, DY tương tự lệnh X1, Y1 có khác chút là khi chọn điểm đặt dim, thì không phải kiểu pick điểm mà là rê chuột tương tự lệnh Dim của cad.

  - Lệnh DXY: tự động dò phương khi di chuột chọn điểm đặt dim.

  - Trước khi chọn điểm đặt chân dim có tuỳ chọn Dim tổng hay không [Yes/No], và có chuyển đổi kiểu dim theo phương X, Y hay tự động.

(alert (apply 'strcat
              (list "AutoDIM kích th\U+01B0\U+1EDBc Line, Xline theo tr\U+1EE5c X & Y.\n"
                    "   + L\U+1EC7nh: X1 DIM theo tr\U+1EE5c X.\n"
                    "   + L\U+1EC7nh: Y1 DIM theo tr\U+1EE5c Y.\n"
                    "\t- Ng\U+01B0\U+1EDDi vi\U+1EBFt: NTHAHT@CadViet.com-2024")))
(vl-load-com)
(defun _Autodimxy_nthaht  (dim / asp pcd pdd doc ent lsp rot ss)
  (setq asp (vlax-get (setq doc (vla-get-activedocument (vlax-get-acad-object)))
                      (if (> (vla-get-activespace doc) 0)
                        'modelspace
                        'paperspace)))
  (while (and (princ (strcat "\nQuét ch\U+1ECDn Line, Ray, Xline \U+0111\U+1EC3 dim theo tr\U+1EE5c " dim "!"))
              (setq ss (ssget '((0 . "LINE,XLINE,RAY"))))
              (> (sslength ss) 1)
              (setq pcd (getpoint "\nV\U+1ECB trí chân Dim: "))
              (setq pdd (getpoint "\nV\U+1ECB trí \U+0111\U+1EB7t Dim: " pcd)))
    (setq lsp nil)
    (while (and (setq ent (ssname ss 0)) (ssdel ent ss))
      (setq lsp (cons (cdr (assoc 10 (entget ent))) lsp)))
    (cond ((eq dim "X")
           (setq lsp (vl-sort lsp '(lambda (x y) (< (car x) (car y))))
                 lsp (mapcar '(lambda (p) (list (cons (car p) (cdr pcd)) (cons (car p) (cdr pdd)))) lsp)
                 rot 0))
          ((eq dim "Y")
           (setq lsp (vl-sort lsp '(lambda (x y) (< (cadr x) (cadr y))))
                 lsp (mapcar '(lambda (p) (list (cons (car pcd) (cdr p)) (cons (car pdd) (cdr p)))) lsp)
                 rot (* 0.5 pi))))
    (mapcar '(lambda (x y / d)
               (if (> (distance (car x) (car y)) 1e-5)
                 (progn (setq d (vlax-invoke asp 'AddDimRotated (car x) (car y) (cadr x) rot))
                        (entmod (list (cons -1 (vlax-vla-object->ename d)) (cons 8 "DIM"))))))
            lsp
            (cdr lsp)))
  (princ))
(defun C:X1 () (_Autodimxy_nthaht "X"))
(defun C:Y1 () (_Autodimxy_nthaht "Y"))

Dxy - Lisp này chỉ hiện lên bảng thông báo duy nhất lần load đầu tiên.

 

  • Vote tăng 2

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
1 giờ} trướ}c, NTHAHT đã nói:

+ Lisp ở dưới đây, để bạn có thể sửa thoả thích.

+ Ngoài ra mình còn làm thêm 3 lệnh khác là DX, DY, DXY.

  - Lệnh DX, DY tương tự lệnh X1, Y1 có khác chút là khi chọn điểm đặt dim, thì không phải kiểu pick điểm mà là rê chuột tương tự lệnh Dim của cad.

  - Lệnh DXY: tự động dò phương khi di chuột chọn điểm đặt dim.

  - Trước khi chọn điểm đặt chân dim có tuỳ chọn Dim tổng hay không [Yes/No], và có chuyển đổi kiểu dim theo phương X, Y hay tự động.


(alert (apply 'strcat
              (list "AutoDIM kích th\U+01B0\U+1EDBc Line, Xline theo tr\U+1EE5c X & Y.\n"
                    "   + L\U+1EC7nh: X1 DIM theo tr\U+1EE5c X.\n"
                    "   + L\U+1EC7nh: Y1 DIM theo tr\U+1EE5c Y.\n"
                    "\t- Ng\U+01B0\U+1EDDi vi\U+1EBFt: NTHAHT@CadViet.com-2024")))
(vl-load-com)
(defun _Autodimxy_nthaht  (dim / asp pcd pdd doc ent lsp rot ss)
  (setq asp (vlax-get (setq doc (vla-get-activedocument (vlax-get-acad-object)))
                      (if (> (vla-get-activespace doc) 0)
                        'modelspace
                        'paperspace)))
  (while (and (princ (strcat "\nQuét ch\U+1ECDn Line, Ray, Xline \U+0111\U+1EC3 dim theo tr\U+1EE5c " dim "!"))
              (setq ss (ssget '((0 . "LINE,XLINE,RAY"))))
              (> (sslength ss) 1)
              (setq pcd (getpoint "\nV\U+1ECB trí chân Dim: "))
              (setq pdd (getpoint "\nV\U+1ECB trí \U+0111\U+1EB7t Dim: " pcd)))
    (setq lsp nil)
    (while (and (setq ent (ssname ss 0)) (ssdel ent ss))
      (setq lsp (cons (cdr (assoc 10 (entget ent))) lsp)))
    (cond ((eq dim "X")
           (setq lsp (vl-sort lsp '(lambda (x y) (< (car x) (car y))))
                 lsp (mapcar '(lambda (p) (list (cons (car p) (cdr pcd)) (cons (car p) (cdr pdd)))) lsp)
                 rot 0))
          ((eq dim "Y")
           (setq lsp (vl-sort lsp '(lambda (x y) (< (cadr x) (cadr y))))
                 lsp (mapcar '(lambda (p) (list (cons (car pcd) (cdr p)) (cons (car pdd) (cdr p)))) lsp)
                 rot (* 0.5 pi))))
    (mapcar '(lambda (x y / d)
               (if (> (distance (car x) (car y)) 1e-5)
                 (progn (setq d (vlax-invoke asp 'AddDimRotated (car x) (car y) (cadr x) rot))
                        (entmod (list (cons -1 (vlax-vla-object->ename d)) (cons 8 "DIM"))))))
            lsp
            (cdr lsp)))
  (princ))
(defun C:X1 () (_Autodimxy_nthaht "X"))
(defun C:Y1 () (_Autodimxy_nthaht "Y"))

Dxy - Lisp này chỉ hiện lên bảng thông báo duy nhất lần load đầu tiên.

 

thanks a nhiều ạ, cảm ơn anh ạ quá nhiệt tình quá tuyệt ạ

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
2 giờ trước, limfx đã nói:

Mấy giây hiện thông báo có đáng gì với việc hữu ích rút ngắn thời gian mà lisp mang lại. Chúc bạn thành công!

Vâng bản chất lisp là muốn thao tác nhanh nên em cũng nói lên suy nghĩ của bản thân thôi. Còn em luôn tôn trọng tác giả và mn đã giúp đỡ. Có những lisp e k nhờ đc thì phải bỏ tiền ra mua nên em luôn biết ơn những ng viết và chia sẽ free cho cộng đồng.
 

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
1 giờ} trướ}c, NTHAHT đã nói:

+ Lisp ở dưới đây, để bạn có thể sửa thoả thích.

+ Ngoài ra mình còn làm thêm 3 lệnh khác là DX, DY, DXY.

  - Lệnh DX, DY tương tự lệnh X1, Y1 có khác chút là khi chọn điểm đặt dim, thì không phải kiểu pick điểm mà là rê chuột tương tự lệnh Dim của cad.

  - Lệnh DXY: tự động dò phương khi di chuột chọn điểm đặt dim.

  - Trước khi chọn điểm đặt chân dim có tuỳ chọn Dim tổng hay không [Yes/No], và có chuyển đổi kiểu dim theo phương X, Y hay tự động.


(alert (apply 'strcat
              (list "AutoDIM kích th\U+01B0\U+1EDBc Line, Xline theo tr\U+1EE5c X & Y.\n"
                    "   + L\U+1EC7nh: X1 DIM theo tr\U+1EE5c X.\n"
                    "   + L\U+1EC7nh: Y1 DIM theo tr\U+1EE5c Y.\n"
                    "\t- Ng\U+01B0\U+1EDDi vi\U+1EBFt: NTHAHT@CadViet.com-2024")))
(vl-load-com)
(defun _Autodimxy_nthaht  (dim / asp pcd pdd doc ent lsp rot ss)
  (setq asp (vlax-get (setq doc (vla-get-activedocument (vlax-get-acad-object)))
                      (if (> (vla-get-activespace doc) 0)
                        'modelspace
                        'paperspace)))
  (while (and (princ (strcat "\nQuét ch\U+1ECDn Line, Ray, Xline \U+0111\U+1EC3 dim theo tr\U+1EE5c " dim "!"))
              (setq ss (ssget '((0 . "LINE,XLINE,RAY"))))
              (> (sslength ss) 1)
              (setq pcd (getpoint "\nV\U+1ECB trí chân Dim: "))
              (setq pdd (getpoint "\nV\U+1ECB trí \U+0111\U+1EB7t Dim: " pcd)))
    (setq lsp nil)
    (while (and (setq ent (ssname ss 0)) (ssdel ent ss))
      (setq lsp (cons (cdr (assoc 10 (entget ent))) lsp)))
    (cond ((eq dim "X")
           (setq lsp (vl-sort lsp '(lambda (x y) (< (car x) (car y))))
                 lsp (mapcar '(lambda (p) (list (cons (car p) (cdr pcd)) (cons (car p) (cdr pdd)))) lsp)
                 rot 0))
          ((eq dim "Y")
           (setq lsp (vl-sort lsp '(lambda (x y) (< (cadr x) (cadr y))))
                 lsp (mapcar '(lambda (p) (list (cons (car pcd) (cdr p)) (cons (car pdd) (cdr p)))) lsp)
                 rot (* 0.5 pi))))
    (mapcar '(lambda (x y / d)
               (if (> (distance (car x) (car y)) 1e-5)
                 (progn (setq d (vlax-invoke asp 'AddDimRotated (car x) (car y) (cadr x) rot))
                        (entmod (list (cons -1 (vlax-vla-object->ename d)) (cons 8 "DIM"))))))
            lsp
            (cdr lsp)))
  (princ))
(defun C:X1 () (_Autodimxy_nthaht "X"))
(defun C:Y1 () (_Autodimxy_nthaht "Y"))

Dxy - Lisp này chỉ hiện lên bảng thông báo duy nhất lần load đầu tiên.

 

CÁC DX DY ĐÚNG LÀ ĐỈNH CỦA CHÓP LUÔN ANH ĐỠ PHẢI CĂN CUTDIM VỚI BẰNG DIM. HƠI THAM LAM NMA NẾU CÓ THỂ CHO EM XIN FILE LSP VỚI ANH, EM MUỐN TÙY CHỈNH TÊN LỆNH CHÚT. VÌ CÁI DX DY DXY NÀY ĂN ĐỨT CÁI X1 Y1 RỒI Ạ

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

nthaht_autodimxy Lisp này mình đã gỡ các lệnh Dx, Dy, Dxy. Nó chỉ còn hàm: nthaht_autodimxy

Bạn muốn sửa tên lệnh thì làm như sau: tạo 1 file .lsp mới copy 3 dòng dưới vào sau đó đổi tên lệnh (hoặc copy vào 1 lisp nào đó).
Load đồng thời lisp các lisp là được.

 

(defun c:DX () (nthaht_autodimxy "X"))
(defun c:DY () (nthaht_autodimxy "Y"))
(defun c:DXY () (nthaht_autodimxy "XY"))

 

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
1 phút trước, NTHAHT đã nói:

nthaht_autodimxy Lisp này mình đã gỡ các lệnh Dx, Dy, Dxy. Nó chỉ còn hàm: nthaht_autodimxy

Bạn muốn sửa tên lệnh thì làm như sau: tạo 1 file .lsp mới copy 3 dòng dưới vào sau đó đổi tên lệnh (hoặc copy vào 1 lisp nào đó).
Load đồng thời lisp các lisp là được.

 

(defun c:DX () (nthaht_autodimxy "X"))
(defun c:DY () (nthaht_autodimxy "Y"))
(defun c:DXY () (nthaht_autodimxy "XY"))

 

THANKS KIU A NHIỀU NHA !!!

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
5 giờ trước, NTHAHT đã nói:

nthaht_autodimxy Lisp này mình đã gỡ các lệnh Dx, Dy, Dxy. Nó chỉ còn hàm: nthaht_autodimxy

Bạn muốn sửa tên lệnh thì làm như sau: tạo 1 file .lsp mới copy 3 dòng dưới vào sau đó đổi tên lệnh (hoặc copy vào 1 lisp nào đó).
Load đồng thời lisp các lisp là được.

 

(defun c:DX () (nthaht_autodimxy "X"))
(defun c:DY () (nthaht_autodimxy "Y"))
(defun c:DXY () (nthaht_autodimxy "XY"))

 

Tiện cho em hỏi anh cho lisp dim được các đối tượng trong block không anh

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
16 giờ trước, Xuân Lộc đã nói:

Tiện cho em hỏi anh cho lisp dim được các đối tượng trong block không anh

- Bạn thử thì biết mà! 

- Nếu dim xong mà các dim nằm trong block, thì bạn có thể dùng lệnh BEDIT để vào trong block mà DIM.

- Các ý khác: Dim nằm ngoài block, dim nằm trong block nhưng không vào block bằng Bedit thì phải bổ sung code.

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  

×