Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
- - - - -

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


  • Please log in to reply
9 replies to this topic

#1 minhah8767

minhah8767

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 11 August 2017 - 08:05 AM

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.c...1_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...


  • -1

#2 lp_hai

lp_hai

    biết lệnh Xplode

  • Members
  • PipPipPipPipPipPip
  • 481 Bài viết
Điểm đánh giá: 207 (khá)

Đã gửi 11 August 2017 - 08:52 AM

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


  • 0

#3 minhah8767

minhah8767

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 11 August 2017 - 09:19 AM

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à..


  • 0

#4 lp_hai

lp_hai

    biết lệnh Xplode

  • Members
  • PipPipPipPipPipPip
  • 481 Bài viết
Điểm đánh giá: 207 (khá)

Đã gửi 11 August 2017 - 01:25 PM

ý 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ả?


  • 0

#5 lp_hai

lp_hai

    biết lệnh Xplode

  • Members
  • PipPipPipPipPipPip
  • 481 Bài viết
Điểm đánh giá: 207 (khá)

Đã gửi 11 August 2017 - 01:48 PM

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)))
  ) 

  • 1

#6 minhah8767

minhah8767

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 11 August 2017 - 02:46 PM

 

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....


  • 0

#7 lp_hai

lp_hai

    biết lệnh Xplode

  • Members
  • PipPipPipPipPipPip
  • 481 Bài viết
Điểm đánh giá: 207 (khá)

Đã gửi 11 August 2017 - 03:09 PM

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


  • 0

#8 minhah8767

minhah8767

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 11 August 2017 - 03:37 PM

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à... 


  • 0

#9 minhah8767

minhah8767

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 13 August 2017 - 10:39 PM

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


  • 0

#10 lp_hai

lp_hai

    biết lệnh Xplode

  • Members
  • PipPipPipPipPipPip
  • 481 Bài viết
Điểm đánh giá: 207 (khá)

Đã gửi 14 August 2017 - 09:43 AM

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


  • 0