Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
pdle

[Hỏi]Không explode toàn bộ chọn được một lúc

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

Em có lisp sau:

(defun c:lbl (/ ss)
(
setq ss(ssget "_X" (list (cons 0 "INSERT") (cons 8 "0,ff" )))
)
(command "explode" ss )
(princ)
)

 

Nhưng khi thực hiện lệnh, mặc dù ss có bao nhiêu object đi nữa thì kết quả cũng chỉ có 1 block bị explode.

 

Lỗi ở đâu?

 

http://www.cadviet.com/upfiles/3/64291_drawing1.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

Đặt biến qaflags về 1 trước khi Explode nhé :)

 

1.Hay quá. Mà sao em tìm trong system variables của help không có biến qaflags nhỉ :D

 

2.Em đã sửa lại lisp như sau:

(defun c:lbl (/ ss oldqa)

(
setq ss(ssget "_X" (list (cons 0 "INSERT") (cons 8 "0,ff" )))
  oldqa (getvar "qaflags")
)
(setvar "qaflags" 1)
(command "explode" ss "")
(setvar "qaflags" oldqa)
(princ)
)

Nhưng không hiểu sao, tất cả các exploded objects đều nằm về trên layer "0", không liên quan đến việc layer nào đang là current cả! Tại sao lại như thế?

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

...

Nhưng không hiểu sao, tất cả các exploded objects đều nằm về trên layer "0", không liên quan đến việc layer nào đang là current cả! Tại sao lại như thế?

Lệnh explode khi nổ thì layer của từng đối tượng tạo nên block sẽ trả về nguyên thuỷ (về "0" tất cả là do chúng cùng layer "0" mà thôi).

Lệnh xplode thì nổ về layer tuỳ chọn được.

  • 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. Em dùng xplode mà không được. Anh Hà có thể nói rõ cho em với được không ạ?

 

2.

((-1 . <Entity name: -16ece8>) (0 . "INSERT") (330 . <Entity
name: -170308>) (5 . "16B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"2") (100 . "AcDbBlockReference") (2 . "demo") (10 -4.10415 21.837 0.0) (41 .
1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0)
(210 0.0 0.0 1.0))


((-1 . <Entity name: -16ee88>) (0 . "LWPOLYLINE") (330 . <Entity 
name: -170308>) (5 . "137") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"2") (100 . "AcDbPolyline") (90 . 7) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0)
(10 7.18185 8.27749) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 10.7666 8.27749) (40
. 0.0) (41 . 0.0) (42 . 0.0) (10 10.7666 4.32379) (40 . 0.0) (41 . 0.0) (42 .
0.0) (10 8.51945 4.32379) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 8.51945 6.83492)
(40 . 0.0) (41 . 0.0) (42 . 0.0) (10 7.18185 6.83492) (40 . 0.0) (41 . 0.0) (42
. 0.0) (10 7.18185 8.27749) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))
Command:

 

Cái mã 330 kia <Entity Name ...> là gì ạ?

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. Em dùng xplode mà không được. Anh Hà có thể nói rõ cho em với được không ạ?

2. Cái mã 330 kia <Entity Name ...> là gì ạ?

2. Tôi không rành về 330, chỉ biết lơ mơ.

1. Srr bạn! Lệnh Xplode thuộc Tools Exprees nên không dễ để dùng trong hàm lisp (có khi không dùng đ­ược???).

Có thể làm kiểu này (chưa ưng ý lắm) để vừa nổ vừa convert layer về layer chọn.

(defun c:lbl (/ ss oldqa lay lst)
(setq ss (ssget "x" (list (cons 0 "INSERT") (cons 8 "0,ff" )))
      	oldqa (getvar "qaflags"))
(setvar "qaflags" 1)
(setq lay (getstring "\nNhap Layer moi: "))
(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (acet-explode ss)))))
(foreach n lst
 (command "CHPROP" n "" "la" lay ""))
(setvar "qaflags" oldqa)
(princ))

  • 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

Trong lisp này, E nghĩ là có thể thay lệnh CHPROP bằng:

(defun c:lbl (/ ss oldqa lay lst ndxf)
(setq ss (ssget "x" (list (cons 0 "INSERT") (cons 8 "0,ff" )))
   	oldqa (getvar "qaflags"))
(setvar "qaflags" 1)
(setq lay (getstring "\nNhap Layer moi: "))
(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (acet-explode ss)))))
(foreach n lst
(setq ndxf (entget n)
 ndxf (subst (cons 8 lay) (assoc 8 ndxf) ndxf)
)
(entmod ndxf)
 )
(setvar "qaflags" oldqa)
(princ)
)

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

Trong lisp này, E nghĩ là có thể thay lệnh CHPROP bằng:

(defun c:lbl (/ ss oldqa lay lst ndxf)
(setq ss (ssget "x" (list (cons 0 "INSERT") (cons 8 "0,ff" )))
   	oldqa (getvar "qaflags"))
(setvar "qaflags" 1)
(setq lay (getstring "\nNhap Layer moi: "))
(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (acet-explode ss)))))
(foreach n lst
(setq ndxf (entget n)
 ndxf (subst (cons 8 lay) (assoc 8 ndxf) ndxf)
)
(entmod ndxf)
 )
(setvar "qaflags" oldqa)
(princ)
)

OK thôi! Dùng entmod hay dùng vla-put- cũng được cả, và hay hơn là command.

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. Tôi không rành về 330, chỉ biết lơ mơ.

1. Srr bạn! Lệnh Xplode thuộc Tools Exprees nên không dễ để dùng trong hàm lisp (có khi không dùng đ­ược???).

Có thể làm kiểu này (chưa ưng ý lắm) để vừa nổ vừa convert layer về layer chọn.

(defun c:lbl (/ ss oldqa lay lst)
(setq ss (ssget "x" (list (cons 0 "INSERT") (cons 8 "0,ff" )))
  		oldqa (getvar "qaflags"))
(setvar "qaflags" 1)
(setq lay (getstring "\nNhap Layer moi: "))
(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (acet-explode ss)))))
(foreach n lst
 (command "CHPROP" n "" "la" lay ""))
(setvar "qaflags" oldqa)
(princ))

Nếu đã dùng Command như trên thì có thể viết không cần Foreach.

 

Thay dòng :

(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (acet-explode ss)))))

(foreach n lst

(command "CHPROP" n "" "la" lay ""))

 

Bằng dòng :

(setq ss (acet-explode ss))

(command "CHPROP" ss "" "la" lay "")

  • 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

Nếu đã dùng Command như trên thì có thể viết không cần Foreach.

 

Thay dòng :

(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (acet-explode ss)))))

(foreach n lst

(command "CHPROP" n "" "la" lay ""))

 

Bằng dòng :

(command "CHPROP" (acet-explode ss) "" "la" lay "")

sơ ý.

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  

×