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  
minhah8767

[Nhờ Giúp Đỡ] Lisp Tự Động Revcloud Các Đối Tượng Cùng 1 Layer

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

1 ) Mình có 1 bản vẽ , trong đó  có rất nhiều hình được vẽ bằng 1 layer duy nhất , mình cần revcloud chúng lại trong 1 lần duy nhất , trước kia mình phải vẽ rectang,pline để khoanh vùng cần revcloud (object) và thực hiện từng lần và đặt biển báo đánh dấu sự thay đổi cho từng đối tượng một rất tốn thời gian . Nay muốn nhờ các bạn trên này viết giùm LISP tư động làm công việc đó

http://www.cadviet.com/upfiles/7/162201_example_1.dwg

 

( các thuộc tính của Revcloud như Arc length : mình sẽ đặt ngay ban đầu , hướng và kiểu của Revcloud thì y hệt như bản vẽ mẫu mình gửi lên các bạn )

 

2 ) Mình có rất nhiều bản vẽ giống hệt nhau , chỉ khác nét , và các bản vẽ này đều có chung revcloud , chung biển báo ở vị trí y hệt nhau trên các bản vẽ và đều cùng 1 layer , có cách nào để vẽ revcloud trên 1 bản vẽ thì nó sẽ tự động xuất hiện trên các bản vẽ còn lại ko nhỉ.. tks mọi người nhiều...

 

Lời cuối cùng , cho mình cám ơn các bạn nhiều...

  • Vote giảm 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

Cloud revision mục đích là báo sự thay đổi, để biết rõ thay đổi chỗ nào thì tốt nhất làm bằng tay :D
Vì sau này còn Rev 3 Rev 4.... lúc đó layer nó có chắc là sẽ có 1 layer mới nữa để bạn xài lisp?

Vẽ cloud rất nhanh, không lâu như bạn sợ đâu, mà mình kiểm soát được nó. vẽ pl (hoặc rectang rồi pick thôi mà) :D

Vị trí cloud giống nhau thì không gì nhanh hơn bằng Ctrl+C >>>> Ctrl+V.

Từ Cad đời sau này có chức năng record để ghi lại những thao tác bạn làm trên 1 file. Sau đó vào file khác nhấn nút Play là nó sẽ làm lại tất cả những gì bạn đã record. Cái này có lợi cho những bạn làm nhiều bv giống nhau... Bạn nghiên cứu thêm thế nà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

Mình sẽ vẽ bằng tay rectang,pline,line , mình chỉ muốn rút ngắn giai đoạn cloud revision ấy . Còn các rev về sau đều do mình vẽ cả , mình sẽ xóa cái đó , và vẽ mới cái mới trên cùng layer đó 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

ý bạn là bạn sẽ vẽ pline (đường bao revision), còn lisp là sẽ tự động chọn những đường bao đó để tạo cloud 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

Có thể viết được chọn theo layer, nhưng tốt hơn bạn nên quét chọn các pl để cloud. Thao tác là bạn chọn block revision, tiếp theo chọn các pl.
Còn về arc và kiểu cloud bạn có thể chọn bằng cách dùng lệnh revclound bên ngoài để trong lisp tự động theo

(defun c:cld (/ dt bl sdt id en)
  (command "Undo" "be")
  (setq osm (getvar "osmode")
	bl (cdr (assoc 2 (entget(car (entsel "\nSelect Revision block:")))))
	dt (ssget '((-4 . "<OR")
		(0 . "LWPOLYLINE")		    
		(-4 . "OR>")	
		))
	sdt (sslength dt)
	id 0
	)
  (setvar "osmode" 0)
  (repeat sdt
    (while
      (setq en (ssname dt id)
	    id (1+ id)
	    )
      (cloud en)
      )
    )
  (setvar "osmode" osm)
  (command "undo" "end")
  (princ)
  )
    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
(defun cloud (en / p0 p1 pm)
  (setq p0 (vlax-curve-getPointAtParam en 0)
	p1 (vlax-curve-getPointAtParam en 1)
	pm (list (/(+(car p0)(car p1))2) (+(/(+(cadr p0)(cadr p1 ))2)8))
	)
  (command "revcloud" "o" en "")
  (entmake (list  (cons 0 "insert")  (cons 2 bl) (cons 10 pm)))
  ) 
  • 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ó thể viết được chọn theo layer, nhưng tốt hơn bạn nên quét chọn các pl để cloud. Thao tác là bạn chọn block revision, tiếp theo chọn các pl.

Còn về arc và kiểu cloud bạn có thể chọn bằng cách dùng lệnh revclound bên ngoài để trong lisp tự động theo

(defun c:cld (/ dt bl sdt id en)
  (command "Undo" "be")
  (setq osm (getvar "osmode")
	bl (cdr (assoc 2 (entget(car (entsel "\nSelect Revision block:")))))
	dt (ssget '((-4 . "<OR")
		(0 . "LWPOLYLINE")		    
		(-4 . "OR>")	
		))
	sdt (sslength dt)
	id 0
	)
  (setvar "osmode" 0)
  (repeat sdt
    (while
      (setq en (ssname dt id)
	    id (1+ id)
	    )
      (cloud en)
      )
    )
  (setvar "osmode" osm)
  (command "undo" "end")
  (princ)
  )
    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
(defun cloud (en / p0 p1 pm)
  (setq p0 (vlax-curve-getPointAtParam en 0)
	p1 (vlax-curve-getPointAtParam en 1)
	pm (list (/(+(car p0)(car p1))2) (+(/(+(cadr p0)(cadr p1 ))2)8))
	)
  (command "revcloud" "o" en "")
  (entmake (list  (cons 0 "insert")  (cons 2 bl) (cons 10 pm)))
  ) 

 

Lời đầu tiên cho mình cám ơn bạn . Mình đã test thử lisp bạn gửi lên , có 1 số điểm như sau

 

1) Lisp mỗi lần chỉ chạy được mỗi hình . Mình chọn 3 hình ( 2 rec + 1 pl ) , nó chỉ revcloud được 1 hình duy nhất , thử nhiều trường hợp khác cũng như thế . Block revision ở đây là cái gì nhỉ ( mình ko hiểu cho lắm )

2) Mình muốn khi chọn layer xong >>> quét nguyên 1 bản vẽ , những hình nào do mình vẽ bằng layer mình đặt ra để cloud thì nó sẽ tự cloud . Vì mình đặt riêng 1 layer cho cái mình cần cloud. 

 

Hình của mình có rất nhiều hình khối nên thiết nghĩ quét = layer thì hay hơn lại nhanh hơn :D

 

Bạn xem xét giùm mình , nếu được mình cám ơn 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

Block revision ở đây là cái gì nhỉ ( mình ko hiểu cho lắm )

 

Là cái block tam giác ghi revision đó bạn

Còn về đối tượng chọn: Lisp này yêu cầu bạn phải có sẵn các đường bao...

bạn test lại xem thế nào:

1 đánh lệnh

2 chọn vào block tam giác

3 quét chọn các polyline

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à cái block tam giác ghi revision đó bạn

Còn về đối tượng chọn: Lisp này yêu cầu bạn phải có sẵn các đường bao...

bạn test lại xem thế nào:

1 đánh lệnh

2 chọn vào block tam giác

3 quét chọn các polyline

 

Ah thì ra là thế . Được rồi bạn , chạy tốt nếu pl là hình chữ nhật or hình vuông or rectang , nếu pl là hình tam giác thì cái Block Revision nó nằm lung tung lúc trong lúc ngoài hình .

 

Còn ý thứ 2 mình nhờ bạn thì sao nhỉ :D , bản vẽ mình thì polyline cực nhiều luôn , toàn hình khối kg 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

Không có ai giúp hết nhỉ :)

(defun c:cld (/ dt bl sdt id en)
  (command "Undo" "be")
  (setq osm (getvar "osmode")
	bl (cdr (assoc 2 (entget(car (entsel "\nSelect Revision block: ")))))
	dt (ssget "_X" (list (assoc 8 (entget (car(entsel"\nSelect layer: "))))))
	sdt (sslength dt)
	id 0
	)
  (setvar "osmode" 0)
  (repeat sdt
    (while
      (setq en (ssname dt id)
	    id (1+ id)
	    )
      (cloud en)
      )
    )
  (setvar "osmode" osm)
  (command "undo" "end")
  (princ)
  )
    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
(defun cloud (en / p0 p1 pm)
  (setq p0 (vlax-curve-getPointAtParam en 0)
	p1 (vlax-curve-getPointAtParam en 1)
	pm (list (/(+(car p0)(car p1))2) (+(/(+(cadr p0)(cadr p1 ))2)8))
	)
  (command "revcloud" "o" en "")
  (entmake (list  (cons 0 "insert")  (cons 2 bl) (cons 10 pm)))
  )

Cái này là cho layer. Sau khi đánh lệnh pick chọn block rev, tiếp theo pick chọn đối tượng có layer bạn muốn thực hiệ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

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  

×