Chuyển đến nội dung
Diễn đàn CADViet
zaqzaqzaqzaq

Đổi MlineStyle cho Mline

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

Em chào các anh ạ!

Nhờ các cao thủ nghĩ cách giải quyết vấn đề này giúp em (bằng cách nào có sẵn của cad hay lisp)

Em có 1 bản vẽ có nhiều đối tượng là Mline

Em muốn thay đổi Mline Style của các đối tượng đó thì có cách nào k ạ? (ví dụ như: nó đang có style là "mlstyle-1", em muốn chuyển sang style là "mlstyle-2")

Thanks!

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

Xem cái này xem được không bạn.

ml style bạn cần đổi sang current 

chọn ml cần đổi enter đến kết thúc lệnh

Change mline.lsp

;;
;; http://cadxp.com/index.php?/topic/34672-remplacer-multiligne-par-une-autre-multiligne/page__pid__188...
;; Change_MLine par Bonuscad - Version 1.00
;; Remplacer une MLine par une autre qui utilise le style de MLine courant
;;  

;; 
;; VLisp Routine :  Change_MLine
;; Change THE selected MLine to the CURRENT MLine style
;; and you can switch to Closed/Opened MLine ...
;; 
;; Minimum Translation for US/English Forums by Patrice BRAUD
;; 
 
(vl-load-com) 

(defun l-coor2l-pt (lst flag / )
  (if lst
    (cons
      (list
        (car lst)
        (cadr lst)
        (if flag
          (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst))
          (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0)
        )
      )
      (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag)
    )
  )
)

(defun c:Change_MLine ( / js ent ename l_pt cur_lay closed) 

; (princ "\nSélectionner une multiligne.") 
  (princ "\nPlease Select a MLine ") 

  (while (null (setq js (ssget "_+.:E:S" '((0 . "MLINE"))))) 

;   (princ "\nCe n'est pas une multiligne!") 
    (princ "\nThis is not a MLine ! ") 

  )
  (setq
    ent (ssname js 0)
    ename (vlax-ename->vla-object ent)
    l_pt (l-coor2l-pt (vlax-get ename 'Coordinates) T)
    cur_lay (getvar "CLAYER")
  ) 

;;  (initget "Fermée Ouverte _Closed Open")
;;  (if (eq (getkword "\nMultiligne [Fermée/Ouverte] <Ouverte>: ") "Closed")

    (initget "Closed Open")
    (if (eq (getkword "\nMLine [Closed/Open] <Open>: ") "Closed")

    (setq closed T)
  )
  (setvar "clayer" (vlax-get ename 'Layer))
  (command "_.mline")
  (foreach n l_pt (command "_none" (trans n 0 1)))
  (if closed (command "_close") (command ""))
  (entdel ent)
  (setvar "CLAYER" cur_lay)
  (prin1)
)

 

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

anh ơi lisp này hay quá ạ. nhưng khi em thực hiện thì kích thước Mline cũng thay đổi theo setup hiện hành, nên nếu muốn giữ nguyên thì phải mỗi loại kích thước 1 lần. a có thể sửa lại để khi em thực hiện lệnh Change_MLine thì nó vẫn giữ nguyên kích thước của đối tượng Mline không ạ? Và có thể chọn nhiều Mine 1 lúc không a (hiện tại phải chọn từng Mline một)? Thank a!!!

Chỉnh sửa theo zaqzaqzaqzaq
thiểu ý kiế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
1 giờ} trướ}c, zaqzaqzaqzaq đã nói:

anh ơi lisp này hay quá ạ. nhưng khi em thực hiện thì kích thước Mline cũng thay đổi theo setup hiện hành, nên nếu muốn giữ nguyên thì phải mỗi loại kích thước 1 lần. a có thể sửa lại để khi em thực hiện lệnh Change_MLine thì nó vẫn giữ nguyên kích thước của đối tượng Mline không ạ? Và có thể chọn nhiều Mine 1 lúc không a (hiện tại phải chọn từng Mline một)? Thank a!!!

1.Bạn mở 1 bản vẽ mới tinh lên, tạo mlstyle1 với các tính chất giống hệt mlstyle2 ( nếu bản vẽ hiện hành có rồi thì copy sang và mlstyle2 đổi tên thành mlstyle1)

2.Bên bản vẽ hiện hành chọn tất cả các mline có mlstyle1

3. sau đó cut sang bản vẽ mới

4. tiếp theo là đổi tên mlstyle1 thành mlstyle2

5. Copy tất cả sang bản vẽ hiện hành là ok

  • 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

 

1 giờ} trướ}c, Biet ve CAD đã nói:

1.Bạn mở 1 bản vẽ mới tinh lên, tạo mlstyle1 với các tính chất giống hệt mlstyle2 ( nếu bản vẽ hiện hành có rồi thì copy sang và mlstyle2 đổi tên thành mlstyle1)

2.Bên bản vẽ hiện hành chọn tất cả các mline có mlstyle1

3. sau đó cut sang bản vẽ mới

 4. tiếp theo là đổi tên mlstyle1 thành mlstyle2

5. Copy tất cả sang bản vẽ hiện hành là ok

Anh ơi, em làm thử theo cách của anh nhưng khi làm bước 3 thì style mà em copy sang nó tự động đổi tên ạ. nó k trùng với mlstyle1 của bản vẽ mới 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
15 phút trước, zaqzaqzaqzaq đã nói:

 

Anh ơi, em làm thử theo cách của anh nhưng khi làm bước 3 thì style mà em copy sang nó tự động đổi tên ạ. nó k trùng với mlstyle1 của bản vẽ mới a ạ

Chắc phải dùng đến lisp thôi, Mline cad nó ko cho đổi

  • 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
3 phút trước, Biet ve CAD đã nói:

Chắc phải dùng đến lisp thôi, Mline cad nó ko cho đổi

sử dụng lisp của a vanngeonhuxua thì làm được rồi nhưng em nhờ a ấy sửa lại 1 chút để sử dụng cho tiệ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
18 phút trước, zaqzaqzaqzaq đã nói:

sử dụng lisp của a vanngeonhuxua thì làm được rồi nhưng em nhờ a ấy sửa lại 1 chút để sử dụng cho tiện

Bạn thử xem nhé ( mình sửa lại dựa lisp trên của vanngeonhuxua )

(vl-load-com) 

(defun l-coor2l-pt (lst flag / )
  (if lst
    (cons
      (list
        (car lst)
        (cadr lst)
        (if flag
          (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst))
          (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0)
        )
      )
      (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag)
    )
  )
)

(defun c:Change_MLine ( / js ent ename l_pt cur_lay closed lst ss) 
(princ "\nPlease Select a MLine ") 

  (if (setq ss (ssget '((0 . "MLINE"))))
    (progn
      (setq js 0)
      (repeat (sslength ss)
      
  (setq
    ent (ssname ss js)
    ename (vlax-ename->vla-object ent)
    l_pt (l-coor2l-pt (vlax-get ename 'Coordinates) T)
    cur_lay (getvar "CLAYER")
  ) 
    
  (setvar "clayer" (vlax-get ename 'Layer))
  (command "_.mline" "S" (vla-get-MlineScale ename))
  (foreach n l_pt (command "_none" (trans n 0 1)))
  (command "")
	
	(vla-put-Justification (vlax-ename->vla-object(entlast)) (vla-get-Justification ename))
  (entdel ent)
  
	(setq js (1+ js))
	)
      (setvar "CLAYER" cur_lay)
  ))
  (prin1)
)

 

  • 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
1 giờ trước, Biet ve CAD đã nói:

Bạn thử xem nhé ( mình sửa lại dựa lisp trên của vanngeonhuxua )

ok rồi a ơi. đổi style cho hơn 600 Mline của bản vẽ hết có mấy giây ^.^

em cám ơn các anh 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
Vào lúc 23/3/2020 tại 22:38, zaqzaqzaqzaq đã nói:

Em chào các anh ạ!

Nhờ các cao thủ nghĩ cách giải quyết vấn đề này giúp em (bằng cách nào có sẵn của cad hay lisp)

Em có 1 bản vẽ có nhiều đối tượng là Mline

Em muốn thay đổi Mline Style của các đối tượng đó thì có cách nào k ạ? (ví dụ như: nó đang có style là "mlstyle-1", em muốn chuyển sang style là "mlstyle-2")

Thanks!

Hôm qua cũng muốn đổi MlineStyle, hên là gặp bài viết này.....

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

×