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

[Đã xong] Lisp chọn đối tượng thì các style của nó hiện hành

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

Bác nào có lisp chọn nhanh dim, layer, text về thành dim, layer, text hiện hành không, share em với. Em đã tìm với từ khóa chuyển dim bất kỳ về hiện hành nhưng không thấy. Mong các bác giúp hộ.

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ác nào có lisp chọn nhanh dim, layer, text về thành dim, layer, text hiện hành không, share em với. Em đã tìm với từ khóa chuyển dim bất kỳ về hiện hành nhưng không thấy. Mong các bác giúp hộ.

Không hiểu ý bạn. Chọn ... về thành ? Bạn nói rõ hơn ý tưởng đi :)

  • 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

Không hiểu ý bạn. Chọn ... về thành ? Bạn nói rõ hơn ý tưởng đi :)

Hì, lại gặp bạn Ket rồi. Ý mình là lisp chọn đối tượng dim hoặc layer, text bất kỳ. Và chuyển nó thành current. Ví dụ: lệnh doi, sẽ cho mình chọn 1 dim style, hoặc layer hoặc text style. Sau khi pick vào, thì nó lập tức chuyển thành dim style hoặc layer, text style hiện hà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

Hì, lại gặp bạn Ket rồi. Ý mình là lisp chọn đối tượng dim hoặc layer, text bất kỳ. Và chuyển nó thành current. Ví dụ: lệnh doi, sẽ cho mình chọn 1 dim style, hoặc layer hoặc text style. Sau khi pick vào, thì nó lập tức chuyển thành dim style hoặc layer, text style hiện hành.

Hoặc là bạn vẫn chưa trình bày rõ ý đồ, hoặc là mình kém quá, đọc n hok hiểu ^^

Bạn chọn đối tượng Dim,Text thì ok rồi, còn chọn layer là sao nhỉ ??

Mình nói lại ý tưởng của bạn thế này, bạn xem có phải không :

Chọn 1 đối tượng => Lấy Layer, Hoặc Dimstyle, Hoặc Text Style của đối tượng đó làm Layer/Dímtyle/Text Style hiện hành ?

 

 

P/S : mình ra công trường, bạn chịu khó chờ, các bác khác đọc được sẽ giúp bạn ngay đấy :wub:

  • 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

Hì, lại gặp bạn Ket rồi. Ý mình là lisp chọn đối tượng dim hoặc layer, text bất kỳ. Và chuyển nó thành current. Ví dụ: lệnh doi, sẽ cho mình chọn 1 dim style, hoặc layer hoặc text style. Sau khi pick vào, thì nó lập tức chuyển thành dim style hoặc layer, text style hiện hành.

Bạn thử cái này xem

(defun c:CLA()(command "clayer" (cdr(assoc 8 (entget(car(entsel "\nChon doi tuong lay layer hien hanh:")))))))
(defun c:CDI()(command "-dimstyle" "r" ""))
(defun c:CTE()(command "textstyle" (cdr(assoc 7 (entget(car(entsel "\nChon doi tuong lay textstyle hien hanh:")))))))

  • 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

Hoặc là bạn vẫn chưa trình bày rõ ý đồ, hoặc là mình kém quá, đọc n hok hiểu ^^

Bạn chọn đối tượng Dim,Text thì ok rồi, còn chọn layer là sao nhỉ ??

Mình nói lại ý tưởng của bạn thế này, bạn xem có phải không :

Chọn 1 đối tượng => Lấy Layer, Hoặc Dimstyle, Hoặc Text Style của đối tượng đó làm Layer/Dímtyle/Text Style hiện hành ?

 

 

P/S : mình ra công trường, bạn chịu khó chờ, các bác khác đọc được sẽ giúp bạn ngay đấy :wub:

Đúng rồi, tại mình nói mơ hồ quá. Chính xác là như thế bạn Ket à. Bác hay pro nào viết giúp mình cái lisp đó được không. 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

Bạn thử cái này xem

(defun c:CLA()(command "clayer" (cdr(assoc 8 (entget(car(entsel "\nChon doi tuong lay layer hien hanh:")))))))

Bác viết để pick dim style hoặc text style được không? Ý tưởng như bài viết trên của mình. 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

Bác viết để pick dim style hoặc text style được không? Ý tưởng như bài viết trên của mình. Thanks!

Bạn down lại code ở trên

  • 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

Cái text style hình như chưa được bác à. Em chọn mà nó không chuyển thành hiện hành. Hai cái dim và layer thì good rồi bác à.

Mình nhầm chút bạn down lại code trên mình đã sửa 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

Các bạn có thể mở rộng thêm chọn nhanh đối tượng để lấy line type hiện hành nữa ko. Mình tìm trên diễn đàn mà ko thấy, hic!

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

Hì, lại gặp bạn Ket rồi. Ý mình là lisp chọn đối tượng dim hoặc layer, text bất kỳ. Và chuyển nó thành current. Ví dụ: lệnh doi, sẽ cho mình chọn 1 dim style, hoặc layer hoặc text style. Sau khi pick vào, thì nó lập tức chuyển thành dim style hoặc layer, text style hiện hành.

Chiron không hiểu tại sao phải viết lisp mới? Nếu cần chuyển đối tượng qua layer hiện hành có thể dùng lệnh laycur, còn để chuyển qua layer của đối tượng được chọn thì có thể dùng lệnh laymcur hoặc dùng lệnh ma để copy thuộc tính của đối tượng mà?

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

(setvar "celtype" (cdr (assoc 6 (entget (car (entsel))))))

 

(setvar "celtype" (cdr (assoc 6 (entget (car (entsel))))))

 

Cái này ketxu viết dùng ntn vậ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

Cái này ketxu viết dùng ntn vậy?

Bạn copy dòng này (setvar "celtype" (cdr (assoc 6 (entget (car (entsel))))))

và paste vào Command

Hoặc là viết thành code như vầy :

 

(defun c:Lty()

(setvar "celtype" (cdr (assoc 6 (entget (car (entsel))))))

)

 

Hề hề hề,bác Bình post bài nhanh hơn em mấy mili giây. :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

Để ý lỗi nếu Linetype là bylayer.

(setvar "celtype" (cdr (assoc 6 (entget (car (entsel))))))

Dùng cái này thì tránh được lỗi trên

(vlax-get-property (vlax-ename->vla-object (car (entsel))) 'Linetype)

  • 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

Cảm ơn bác ĐVH đã nhắc nhở ^^ :

=> (setvar "celtype" (cond ((cdr (assoc 6 (entget (car (entsel))))))("BYLAYER")))

hoặc

(setvar "celtype" (vlax-get-property (vlax-ename->vla-object (car (entsel))) 'Linetype) )

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

Em copy lisp của bác vào thì một số lisp có sẵn của em (add cùng 1 lisp) bị lỗi, có bác nào biết tại sao ko. Hiện tượng này xảy ra với 1 số lisp khác nữa nhưng em vẫn chẳng biết khắc phục ntn :)

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

Có bác nào có ý tưởng thế này chưa, chon một đối tượng thì setting mọi thuộc tính của nó về current, bao gồm: Layer, Linetype, Color, Text style (nếu là text) và Dim style (nếu là DIM). Các cao thủ autolisp chỉ giáo :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

Có bác nào có ý tưởng thế này chưa, chon một đối tượng thì setting mọi thuộc tính của nó về current, bao gồm: Layer, Linetype, Color, Text style (nếu là text) và Dim style (nếu là DIM). Các cao thủ autolisp chỉ giáo :D

;Doan Van Ha - CADViet.com - Ngay 03/4/2012
;Muc dich: Set Curent theo doi tuong chon: Layer, Linetype, Colour, Textstyle (*text) or Dimstyle (dimension).
(defun C:HA()
(setq lst (entget (car (entsel "\nChon 1 doi tuong Text/Mtext/Dimension de Set Current: "))))
(setvar "CLAYER" (cdr (assoc 8 lst)))				;Layer
(setvar "CELTYPE" (cond ((cdr (assoc 6 lst))) ("BYLAYER")))		;Linetype
(setvar "CECOLOR" (_GetColour lst))				;Colour
(cond							;TextStyle or DimStyle
 ((wcmatch (cdr (assoc 0 lst)) "*TEXT") (setvar "TEXTSTYLE" (cdr (assoc 7 lst))))
 ((wcmatch (cdr (assoc 0 lst)) "DIMENSION") (command "DIMSTYLE" "r" (cdr (assoc 3 lst)))))
(princ))
;-----
(defun _GetColour ( e / c )   
(if (setq c (cdr (assoc 62 e)))     
 (cond
  ((cdr (assoc c '((0 . "ByBlock") (1 . "Red") (2 . "Yellow") (3 . "Green") (4 . "Cyan") (5 . "Blue") (6 . "Magenta") (7 . "White")))))
  ((itoa c)))
 "ByLayer"))

  • Like 1
  • Vote tăng 3

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

;Doan Van Ha - CADViet.com - Ngay 03/4/2012
;Muc dich: Set Curent theo doi tuong chon: Layer, Linetype, Colour, Textstyle (*text) or Dimstyle (dimension).
(defun C:HA()
(setq lst (entget (car (entsel "\nChon 1 doi tuong Text/Mtext/Dimension de Set Current: "))))
(setvar "CLAYER" (cdr (assoc 8 lst)))				;Layer
(setvar "CELTYPE" (cond ((cdr (assoc 6 lst))) ("BYLAYER")))		;Linetype
(setvar "CECOLOR" (_GetColour lst))				;Colour
(cond							;TextStyle or DimStyle
 ((wcmatch (cdr (assoc 0 lst)) "*TEXT") (setvar "TEXTSTYLE" (cdr (assoc 7 lst))))
 ((wcmatch (cdr (assoc 0 lst)) "DIMENSION") (command "DIMSTYLE" "r" (cdr (assoc 3 lst)))))
(princ))
;-----
(defun _GetColour ( e / c )  
(if (setq c (cdr (assoc 62 e)))    
 (cond
  ((cdr (assoc c '((0 . "ByBlock") (1 . "Red") (2 . "Yellow") (3 . "Green") (4 . "Cyan") (5 . "Blue") (6 . "Magenta") (7 . "White")))))
  ((itoa c)))
 "ByLayer"))

 

Thks bác, cái này mà bản vẽ nhiều dim nhiều linetype thì tiện phải biết cheer !!

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

;Doan Van Ha - CADViet.com - Ngay 03/4/2012
;Muc dich: Set Curent theo doi tuong chon: Layer, Linetype, Colour, Textstyle (*text) or Dimstyle (dimension).
(defun C:HA()
(setq lst (entget (car (entsel "\nChon 1 doi tuong Text/Mtext/Dimension de Set Current: "))))
(setvar "CLAYER" (cdr (assoc 8 lst)))				;Layer
(setvar "CELTYPE" (cond ((cdr (assoc 6 lst))) ("BYLAYER")))		;Linetype
(setvar "CECOLOR" (_GetColour lst))				;Colour
(cond							;TextStyle or DimStyle
 ((wcmatch (cdr (assoc 0 lst)) "*TEXT") (setvar "TEXTSTYLE" (cdr (assoc 7 lst))))
 ((wcmatch (cdr (assoc 0 lst)) "DIMENSION") (command "DIMSTYLE" "r" (cdr (assoc 3 lst)))))
(princ))
;-----
(defun _GetColour ( e / c )  
(if (setq c (cdr (assoc 62 e)))    
 (cond
  ((cdr (assoc c '((0 . "ByBlock") (1 . "Red") (2 . "Yellow") (3 . "Green") (4 . "Cyan") (5 . "Blue") (6 . "Magenta") (7 . "White")))))
  ((itoa c)))
 "ByLayer"))

Thanks bác , Lisp hay quá , bác thêm cho trường hợp Linetype Scale đc ko ? . Tức là Global scale factor trong Linetype Manager vẫn ko thay đổi nhưng những đối tượng vẽ ra sau khi dùng Lisp của bác sẽ có Linetype Scale theo đối tượng đc chọn . Cảm ơn bác lần nữ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

Thanks bác , Lisp hay quá , bác thêm cho trường hợp Linetype Scale đc ko ? . Tức là Global scale factor trong Linetype Manager vẫn ko thay đổi nhưng những đối tượng vẽ ra sau khi dùng Lisp của bác sẽ có Linetype Scale theo đối tượng đc chọn . Cảm ơn bác lần nữa

thật quá tuyệt vời ông mặt trờ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

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

×