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

nhờ giúp đở cách đổi đường nét trong block

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

Mình mới tham gia vào diển đàn.rất mong các bác giúp đỡ.mình cần chuyển các đối tượng trong bản vẽ về layer,linetype khác.vd:

Tất cả layer 0-->layer 10

Layer 2 -->layer 90

Nét dash-->dash2

....

Mình đã tạo được lisp chuyển được các đối tượng về layer,linetype,linescale mong muốn rồi.NGOẠI TRỪ các đối tượng nằm trong BLOCK.các bác chỉ giùm mình cách truy cập các đối tượng trong block mà không phải rã block ra( có rất nhiều block,rã ra rồi phải ngồi block lại)mình cũng mới biết chút ít về autolisp thôi.cảm ơn các bác 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

:d :d :d

bạn biết autolisp là sư phụ của 2 lúa rồi. bạn nghiên cứu thêm autosearch nữa 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

Mình mới tham gia vào diển đàn.rất mong các bác giúp đỡ.mình cần chuyển các đối tượng trong bản vẽ về layer,linetype khác.vd:

Tất cả layer 0-->layer 10

Layer 2 -->layer 90

Nét dash-->dash2

....

Mình đã tạo được lisp chuyển được các đối tượng về layer,linetype,linescale mong muốn rồi.NGOẠI TRỪ các đối tượng nằm trong BLOCK.các bác chỉ giùm mình cách truy cập các đối tượng trong block mà không phải rã block ra( có rất nhiều block,rã ra rồi phải ngồi block lại)mình cũng mới biết chút ít về autolisp thôi.cảm ơn các bác nhiều.

Yêu cầu của bạn tương tự yêu cầu ở Topic Vấn đề về màu Layer:

http://www.cadviet.com/forum/topic/69447-van-de-ve-mau-layer/

và Topic [Yên cầu] lisp lọc tất cả các đối tượng theo màu

http://www.cadviet.com/forum/topic/42436-yeu-cau-lisp-loc-tat-ca-cac-doi-tuong-theo-mau/

có chăng khác nhau ở chỗ bạn muốn chuyển từ Layer này sang Layer khác và từ Linetype này sang kiểu khác mà thôi.

 

Còn đây là Lisp theo yêu cầu của bạn. Lệnh KK1 để chuyển layer, lệnh KK2 để chuyển Linetype. Phải load linetype trước khi chạy lệnh KK2 nhé.  Khi chạy lisp thì không riêng gì block mà toàn bộ đối tượng khác đều bị hết. Nói tóm lại là lisp này dùng cho toàn bộ đối tượng trên bản vẽ

http://www.cadviet.com/upfiles/3/71162_chuyeni_layer_linetype.lsp

;========LISP CHUYEN LAYER LINETYPE==========
;===========KANGKUNG 26/03/2013==============
(defun C:KK1()
  (vl-load-com)
  (command "UNDO" "BE")
  (setq lay1(getstring T "\n Nhap ten Layer can chuyen: "))
  (setq lay2(getstring T "\n Nhap ten Layer chuyen den: "))
  (vlax-for for-item (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object)))
    (vlax-for item for-item
      (if (= (vla-get-Layer item) lay1)
	(vla-put-layer item lay2)
	)
      )
    )
  (command "UNDO" "END")
  (alert "Well done!")
  )
(defun C:KK2()
  (vl-load-com)
  (command "UNDO" "BE")
  (setq type1(strcase(getstring T "\n Nhap ten LineType can chuyen: ")))
  (setq type2(strcase(getstring T "\n Nhap ten LineType chuyen den: ")))
  (vlax-for for-item (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object)))
    (vlax-for item for-item
      (if (= (vla-get-linetype item) "ByLayer")
	(setq Ltype(vla-get-linetype (vlax-ename->vla-object (TBLOBJNAME "LAYER" (vla-get-Layer item)))))
	(setq Ltype(vla-get-linetype item)))
      (if (= Ltype type1)
	(vla-put-linetype item type2)
	)
      )
    )
  (command "UNDO" "END")
  (alert "Well done!")
  )
(princ "\n                Written By KangKung - 26/03/2013\n")
(princ "\n           Nhap KK1 de chuyen Layer KK2 de chuyen LineType\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

Cảm ơn KangKung nhiều nhiều.thế là mình học thêm được ít kiến thức nữa rồi.

lúc trước mình dùng như thế này:

   (setq oj ssget "X" (list (cons 6 "dashed))))
   (command ".chprop" oj "" "la" "dashed2" "")

nên nó không đụng đến block được.

CẢM ƠN HUYNH!

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

KK Cho mình hỏi thêm.nếu mình muốn chuyển tất cả các đường line về layer 2,text về layer t2...(kể cả nó nằm trong block)thì mình phải dùng hàm điều kiện như thế nào.mình đã thử dùng:

If(= (vla-get-type item) "line")

Nhưng không được.mình đang sài cad tiếng nhật nên cũng khó sài chức năng hepl.

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

KK Cho mình hỏi thêm.nếu mình muốn chuyển tất cả các đường line về layer 2,text về layer t2...(kể cả nó nằm trong block)thì mình phải dùng hàm điều kiện như thế nào.mình đã thử dùng:

If(= (vla-get-type item) "line")

Nhưng không được.mình đang sài cad tiếng nhật nên cũng khó sài chức năng hepl.

Bác dùng cái này:

 

(vlax-for for-item (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object)))
    (vlax-for item for-item
      (if (= (vla-get-objectname item) "AcDbText")
          (vla-put-layer item "Text"))
      (if (= (vla-get-objectname item) "AcDbPolyline")
          (vla-put-layer item "Polyline"))
      )
  )
Hoặc cái này
(vlax-for for-item (vla-get-blocks(vla-get-activedocument(vlax-get-acad-object)))
    (vlax-for item for-item
      (if (= (cdr(assoc 0 (entget(vlax-vla-object->ename item)))) "TEXT")
         (vla-put-layer item "Text"))
      (if (= (cdr(assoc 0 (entget(vlax-vla-object->ename item)))) "LWPOLYLINE")
         (vla-put-layer item "Polyline"))
      )
  )

Bác người Việt sao lại dùng hàng Nhật làm gì cho nó phức tạp? 

  • 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

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


×