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

[Yêu cầu] lsp tách 1 nhóm layer thành nhiều layer khác nhau

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

K có j thừa với lòng nhiệt tình cả ^^ Mỗi lisp là một bài học. Dào này ket ít viết lắm, mà vẫn chăm chỉ download của mọi người về mót, nhiều lúc sướng hết cả người.Hehe. Tks bạ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

em cám ơn anh ketxu và anh hochoaivandot đã tận tình giúp đỡ em về lsp nay, em còn may lsp nũa cua cong ty nhung em cung mun chinh sua xíu, nếu mấy anh có hứng thú em sẽ post lên để mọi người cùng tham khảo trao đổi hihi

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

@nhoclangbat: bạn đang có 1 người thầy tuyệt vời. Không khai thác hết là quá phí học phí!

@hochoaivandot: bản ẩn mình một thời gian dài, bỗng trỗi dậy với đầy tiềm năng trong từng dòng code.

  • 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

Mình cũng thường xuyên làm bản đồ như thế nhưng phải làm xóa thủ công không, nay thất lisp này thì dow ve nhung không sử dụng được. Mình up file này lên nhờ mọi người coi dùm. http://www.cadviet.com/upfiles/3/37805_cu_xa_lu_gia_p15_q11new.dwg

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

file của bạn mình xem thử rùi, mà bạn dùng lsp nào lsp của anh ket hay anh HHVD, nếu bạn dùng lsp của anh ket thì nếu trước tiên những đối tượng đó là block phải phá block và chỉ đổi layer đc khi trong file đã có sẵn 3 layer cần đổi, anh ket đã kêu mình nếu trong file ko có layer đó thì trong lsp phải có thêm lệnh tạo các layer đó, lsp mới thực thi đc, còn lsp của anh HHVD thì ko cần phá block quét chọn hết đối tượng đó chạy lsp tự động tạo ra các layer đó, tự phá block và chuyển layer lun, trường hợp file của bạn đã có nhửng layer đó rùi, những đối tượng đó ko còn là block nữa thì chỉ cần dùng lsp của anh ket là ok mình cũng đã thử, nếu file bản đồ gốc của bạn đối tượng đó là block thì dùng lsp của anh HHVD. nếu trong file của bạn ko có sẵn những layer đó thì mình sẽ psot lsp của anh ket mà anh ket chỉ mình nếu mún lsp tự tạo các layer đó thì thêm vài dòng lệnh là ok, mình đã mò mẫn và sữa lại thành công hihi.

PS: dùng lsp của anh HHVD thì đối tượng đó phải là block nha bạn, nếu đã phá block rùi thì dùng ko đc đâu.

lsp của anh ket mình đã chỉnh sữa

(defun c:test(/ ss a )(vl-load-com)
(COMMAND "LAYER" "M" "SOTHUA" "C" "3" "" "")
(COMMAND "LAYER" "M" "DIENTICH" "C" "3" "" "")
(COMMAND "LAYER" "M" "LOAIRUONGDAT" "C" "3" "" "")
(setq  a '((INT . "SOTHUA")(REAL . "DIENTICH")(SYM . "LOAIRUONGDAT"))
  tmp  (ssget (list (cons 0 "TEXT")(cons 8 "13")))
) 
(vlax-for x (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))     
	(if (setq tmp (assoc (type (read (vla-get-textstring x))) a))
  (vla-put-layer x (cdr tmp))
	)
)     
)

  • 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

may anh ơi em có ý này ko pit đc ko, mình có thể kết hợp lsp của anh Ket va anh HHVD đc ko ta, vd khi ta chạy lsp quét đối tượng, khi đó lsp sẽ tiến hành nhận dạng nếu là block thì chạy hàm của anh HHVD nếu ko phải block thì chạy của anh Ket hihi hơi tham

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

may anh ơi em có ý này ko pit đc ko, mình có thể kết hợp lsp của anh Ket va anh HHVD đc ko ta, vd khi ta chạy lsp quét đối tượng, khi đó lsp sẽ tiến hành nhận dạng nếu là block thì chạy hàm của anh HHVD nếu ko phải block thì chạy của anh Ket hihi hơi tham

(defun dxf (code e) (cdr (assoc code (entget e))))
(defun PUT-GC (VALUE GROUP ENTITY / PROPERTIES)
(setq PROPERTIES (entget ENTITY))
(setq PROPERTIES (subst (cons GROUP VALUE) (assoc GROUP PROPERTIES) PROPERTIES))
(entmod PROPERTIES)
)
(defun CreatLayer(MyLayer / MyColor)
(if (not (tblsearch "LAYER" MyLayer))
(progn
 (entmakex
  (list
(cons 0 "LAYER")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbLayerTableRecord")
(cons 70 0)
(cons 2 MyLayer)
  )
 )
)
)
)
(defun ChangeLayer(kq / i dt type_dt)
(repeat (setq i (sslength kq))
 (setq dt (ssname kq (setq i (1- i))))
 (setq type_dt (type (read (dxf 1 dt))))
 (cond
  ((= type_dt 'INT) (PUT-GC "SOTHUA" 8 dt))
  ((= type_dt 'REAL) (PUT-GC "DIENTICH" 8 dt))
  ((= type_dt 'SYM) (PUT-GC "LOAIRUONGDAT" 8 dt))
 )
)
)
(defun c:test2 (/ ss el qa kq i)
(vl-load-com)
(CreatLayer "SOTHUA")
(CreatLayer "DIENTICH")
(CreatLayer "LOAIRUONGDAT")
(setq ss  (ssget (list (cons 8 "13"))) kq (ssadd))
(setq qa (getvar 'QAFLAGS))
(setvar 'QAFLAGS 1)
(repeat (setq i (sslength ss))
 (setq e (ssname ss (setq i (1- i))))
 (setq dxf0 (dxf 0 e))
 (cond
  ((= dxf0 "TEXT") (ssadd e kq))
  (
   (= dxf0 "INSERT")
   (progn
(setq el (entlast))    
(command "explode" ss "")

(while (setq en (entnext el))
     (if (= (dxf 0 en) "TEXT") (ssadd en kq))
     (setq el en)
)
   )
  )  
 )
)
(setvar 'QAFLAGS qa)
(ChangeLayer kq)
(princ "\nHochoaivandot - Cadviet.com")
(princ)
)

  • 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

tối qua bùn bùn, ngồi lục lại ổ cứng em đã tìm đc file chương trình có tác dụng giống mấy anh viết hộ em mà nó là file.exe, nhưng khác 1 cái giống lúc đầu em trình bày , ko cần biết nó thuộc layer nào, chỉ cần dạng giống file vd em đưa lên chọn đại 1 cái để tách là toàn bộ đối tượng giống vậy thuộc cùng 1 layer trong bản vẽ đều đc biến đổi có. Nay em mún nhờ mấy huynh xem hộ chương trình này có phải dựa trên nền tảng là lsp ko, em chỉ mún tìm hỉu thêm thui, chứ làm thì chắc phải chục năm mới làm nổi :D

http://www.cadviet.com/upfiles/3/104473_tachnhan32.rar

em post lên nhờ mấy anh nghiên cứu, cách sử dụng nó như thế này

tạo 1 lệnh trong file acadxxx.lsp trong mục support của cad

(defun c:bbb ()

(startapp "TachNhan32")

)

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 dxf (code e) (cdr (assoc code (entget e))))
(defun PUT-GC (VALUE GROUP ENTITY / PROPERTIES)
(setq PROPERTIES (entget ENTITY))
(setq PROPERTIES (subst (cons GROUP VALUE) (assoc GROUP PROPERTIES) PROPERTIES))
(entmod PROPERTIES)
)
(defun CreatLayer(MyLayer / MyColor)
(if (not (tblsearch "LAYER" MyLayer))
(progn
 (entmakex
  (list
(cons 0 "LAYER")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbLayerTableRecord")
(cons 70 0)
(cons 2 MyLayer)
  )
 )
)
)
)
(defun ChangeLayer(kq / i dt type_dt)
(repeat (setq i (sslength kq))
 (setq dt (ssname kq (setq i (1- i))))
 (setq type_dt (type (read (dxf 1 dt))))
 (cond
  ((= type_dt 'INT) (PUT-GC "SOTHUA" 8 dt))
  ((= type_dt 'REAL) (PUT-GC "DIENTICH" 8 dt))
  ((= type_dt 'SYM) (PUT-GC "LOAIRUONGDAT" 8 dt))
 )
)
)
(defun c:test2 (/ ss el qa kq i)
(vl-load-com)
(CreatLayer "SOTHUA")
(CreatLayer "DIENTICH")
(CreatLayer "LOAIRUONGDAT")
(setq ss  (ssget (list (cons 8 "13"))) kq (ssadd))
(setq qa (getvar 'QAFLAGS))
(setvar 'QAFLAGS 1)
(repeat (setq i (sslength ss))
 (setq e (ssname ss (setq i (1- i))))
 (setq dxf0 (dxf 0 e))
 (cond
  ((= dxf0 "TEXT") (ssadd e kq))
  (
   (= dxf0 "INSERT")
   (progn
(setq el (entlast))    
(command "explode" ss "")

(while (setq en (entnext el))
     (if (= (dxf 0 en) "TEXT") (ssadd en kq))
     (setq el en)
)
   )
  )  
 )
)
(setvar 'QAFLAGS qa)
(ChangeLayer kq)
(princ "\nHochoaivandot - Cadviet.com")
(princ)
)

Hề hề hề,...

Anh bạn này đổi nick được rồi đó. HOCHOAIHETHOT........

  • 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

co anh nao giup em ko

Hề hề hề,

Nó dựa trên cái gì thì phải hỏi người cho bạn cái file ấy, còn đã khóa tịt nó lại bằng cách đóng gói thành file exe rồi thì chỉ có tây mới biết bên trong nó là gì....

Hề hề 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

Anh Bình có thử chạy chưa anh, vậy nhìn cách nó chạy có thể suy ra đc ko anh, em quên là phải để file.exe đó trong thư mục support của cad 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

Cái này quá đơn giản, nhoclangbat tự viết cũng được mà :o . Chú ý các lệnh Laymrg nữa thì công việc càng nhàn hơn. File exe viết bằng VB, k phải lisp

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

×