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

Mình cần 1 lisp scale nhiều đối tượng 1lúc

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

Bài toán của mình như sau:

Khi mình chọn nhiều đối tượng 1lúc và dùng lệnh scale thì lệnh hỏi chỉ điểm gốc để scale khi scale tỉ lệ khác đi thì các đối tượng mình chọn bị dịch chuyển tương ứng theo điểm gốc mình đã chọn.Các bro giúp mình làm thế nào để khi scale thì các đối tượng không bị dịch chuyển.(ví dụ như mình muốn scacle nhiều circle 1lúc thì khi chọn điểm gốc là tâm 1circle nào đó thì các circle còn lại cũng scale quanh điểm gốc là chính tâm của các circle đó).

THANKS CÁC BRO NHÌU NHÌ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
Bài toán của mình như sau:

Khi mình chọn nhiều đối tượng 1lúc và dùng lệnh scale thì lệnh hỏi chỉ điểm gốc để scale khi scale tỉ lệ khác đi thì các đối tượng mình chọn bị dịch chuyển tương ứng theo điểm gốc mình đã chọn.Các bro giúp mình làm thế nào để khi scale thì các đối tượng không bị dịch chuyển.(ví dụ như mình muốn scacle nhiều circle 1lúc thì khi chọn điểm gốc là tâm 1circle nào đó thì các circle còn lại cũng scale quanh điểm gốc là chính tâm của các circle đó).

THANKS CÁC BRO NHÌU NHÌU...!!!

Vấn đề này cũng đã nói nhiều nơi bạn không chịu khó tìm xem đấy thôi. Thực chất đã có bạn hỏi câu giống như bạn rồi nhưng mà không giải quyết được đâu bạn.

-Khi đưa ra đề bài bạn đừng ví dụ mà phải cụ thể.

-Với hình tròn như ví dụ của bạn thì giải được vì nó có tâm.

-Với block cũng có tâm nhưng rất nhiều đối tượng không biết lấy gì làm đểm cơ sở nên nếu bạn yêu cầu cụ thể cho đối tượng loại nào thì mọi người mới giúp đượ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

đâu cần phải lisp,mình làm thế này nha:bạn thử vẽ 5 hình tròn sau đó vẽ đường thằng đi qua các tâm đường tròn đó(mục đích để bạn con nó có bị dịch đi không đấy mà) sau đó bạn chọn các hình tròn đó và ấn ctrl + 1 vào bảng đấy tăng Radius lên theo ý bạn là ok,thử đi nha,

  • 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
đâu cần phải lisp,mình làm thế này nha:bạn thử vẽ 5 hình tròn sau đó vẽ đường thằng đi qua các tâm đường tròn đó(mục đích để bạn con nó có bị dịch đi không đấy mà) sau đó bạn chọn các hình tròn đó và ấn ctrl + 1 vào bảng đấy tăng Radius lên theo ý bạn là ok,thử đi nha,

Rất cảm ơn 2bạn Duy và Hoàng đã chú ý trả lời câu hỏi mình.Vì mình mới tham gia cadviet nen chua có điều kiện tìm hiểu đc nhiều nên còn nhiều fần mình chưa đọc hết mong các bạn thông cảm.Đúng như bạn Hoàng nói nếu đơn giản là đường tròn thì làm đc như thế.Vấn đề của mình là đường tròn đã đc tô solid rùi thì ko làm đc như vậy.Mong các bạn giúp mình nhá.1 lần nữa cảm ơn 2bạ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
Bạn xem lại câu trả lời của bác DUY nhé, quan trọng ở đây ko fải vấn đề dùng lisp hay ko, mà bạn phải xác định được tâm scale mà bạn muốn với từng đối tượng khác nhau là như thế nào.

Ví dụ, như bạn nói đường tròn thì là tâm ==> quá đơn giản. nhưng block là ở đâu; hình chữ nhật là góc nào hay là giao của 2 đường chéo, text là điểm đặt text hay sao (text thì có nhiều định dạng điểm chèn),...đại khái như vậy

P/S: bài toán này trước đây mình nhớ ko lầm thì đã có người đặt đề tài rồi thì fải

Cám ơn các bạn đã quan tâm vấn đề của mình.Mình xin nói cụ thể hơn mong các bạn giúp đc.Tức là mình vẽ cốt thép bằng những đường tròn đã đc hacth solid giờ mình muốn thay đổi đường kính của những đường tròn đó mà ko làm dịch chuyển chúng khỏi vị trí tâm như lúc ban đầu thì làm thế nào.Rất mong sự quan tâm giúp đỡ của các bạn trên diễn đàn. Thanks....!

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 các bạn đã quan tâm vấn đề của mình.Mình xin nói cụ thể hơn mong các bạn giúp đc.Tức là mình vẽ cốt thép bằng những đường tròn đã đc hacth solid giờ mình muốn thay đổi đường kính của những đường tròn đó mà ko làm dịch chuyển chúng khỏi vị trí tâm như lúc ban đầu thì làm thế nào.Rất mong sự quan tâm giúp đỡ của các bạn trên diễn đàn. Thanks....!

Sao bạn không vẽ mặt cắt cốt thép bằng lệnh donut?

Lệnh scale donut tại tâm của nó nằm ở đây :

http://www.cadviet.com/forum/index.php?sho...amp;#entry68859

Bài viết số 10 bạn nhé

 

Còn Lisp scale "đường tròn" cốt thép của bạn thì bạn hãy thử code này nhé :

(defun TraceCIRCLE (obj / sp ep inc pt ptlst)
;Thanks gia_bach for this function;
(setq sp 0
ep (* 2 pi)
inc (/ ep 72) )
(while ((setq pt (vlax-curve-getPointAtParam obj sp)
ptlst (cons pt ptlst)
sp (+ inc sp)) )
(reverse ptlst)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:sct (/ sscir i n ent cen lstp ss tl vl ov)
;copyright by Tue_NV 
(vl-load-com)
(setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0 0))
(command "undo" "be")
(if (not *tl*) (setq *tl* 1.0))
(setq tl (getdist (strcat "\n Nhap he so ti le  : ")))
(if (not tl) (setq tl *tl*) (setq *tl* tl))
(if (setq sscir (ssget (list (cons 0 "CIRCLE"))))
(progn 
(setq n (sslength sscir) i 0)

(while (	(setq ent (ssname sscir i)
	cen (cdr (assoc 10 (entget ent)))
)

(if (= (cdr (assoc 0 (entget ent))) "CIRCLE")
(progn 
(setq lstp (traceCircle (setq ob (vlax-ename->vla-object ent))) )
(if (setq ss (ssget "cp" lstp (list(cons 0 "HATCH")) )) 
(command "scale" ss ent "" cen tl)
)
);progn
);if
(setq i (1+ i))
);while
(command "undo" "e")
(mapcar 'setvar vl ov) ; reset Sys Vars
);progn
(alert "\n Ban chua chon doi tuong nao ca")
);if
(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
Sao bạn không vẽ mặt cắt cốt thép bằng lệnh donut?

Lệnh scale donut tại tâm của nó nằm ở đây :

http://www.cadviet.com/forum/index.php?sho...amp;#entry68859

Bài viết số 10 bạn nhé

 

Còn Lisp scale "đường tròn" cốt thép của bạn thì bạn hãy thử code này nhé :

(defun TraceCIRCLE (obj / sp ep inc pt ptlst)
;Thanks gia_bach for this function;
(setq sp 0
ep (* 2 pi)
inc (/ ep 72) )
(while (< sp ep)
(setq pt (vlax-curve-getPointAtParam obj sp)
ptlst (cons pt ptlst)
sp (+ inc sp)) )
(reverse ptlst)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:sct (/ sscir i n ent cen lstp ss tl vl ov)
;copyright by Tue_NV 
(vl-load-com)
(setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0 0))
(command "undo" "be")
(if (not *tl*) (setq *tl* 1.0))
(setq tl (getdist (strcat "\n Nhap he so ti le < " (rtos *tl* 2 2) " > : ")))
(if (not tl) (setq tl *tl*) (setq *tl* tl))
(if (setq sscir (ssget (list (cons 0 "CIRCLE"))))
(progn 
(setq n (sslength sscir) i 0)

(while (< i n)
(setq ent (ssname sscir i)
	cen (cdr (assoc 10 (entget ent)))
)

(if (= (cdr (assoc 0 (entget ent))) "CIRCLE")
(progn 
(setq lstp (traceCircle (setq ob (vlax-ename->vla-object ent))) )
(if (setq ss (ssget "cp" lstp (list(cons 0 "HATCH")) )) 
(command "scale" ss ent "" cen tl)
)
);progn
);if
(setq i (1+ i))
);while
(command "undo" "e")
(mapcar 'setvar vl ov) ; reset Sys Vars
);progn
(alert "\n Ban chua chon doi tuong nao ca")
);if
(princ)
)

thanks Tue NV nhìu nhá.Mình sẽ thử.Cadviet thật tuyệt vời vì trong 4rum toàn những người nhiệt tình. Thaks all.

(Ngoài lề 1chút sao mình vào phần trả lời nhanh ko gõ đc tiếng Việt nhỉ.Chỉ giúp mình nhá.hihì)

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 đã thử và rất hiệu quả, thanks Tue_NV nhìu nhìu.hì. Để lisp này hoàn hảo hơn mình có câu hỏi mở thêm là: Tue_NV có thể nâng cấp lisp này chút nữa được ko, cụ thể là mình có thể chọn điểm bất kỳ trên circle đc tô solid để làm tâm scale (các circle khác cũng tự động lấy điểm đó làm tâm scale) được ko nhỉ ?. Rất mong Tue_NV quan tâm tìm hiểu.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
Mình đã thử và rất hiệu quả, thanks Tue_NV nhìu nhìu.hì. Để lisp này hoàn hảo hơn mình có câu hỏi mở thêm là: Tue_NV có thể nâng cấp lisp này chút nữa được ko, cụ thể là mình có thể chọn điểm bất kỳ trên circle đc tô solid để làm tâm scale (các circle khác cũng tự động lấy điểm đó làm tâm scale) được ko nhỉ ?. Rất mong Tue_NV quan tâm tìm hiểu.hì.

Bạn thử code này nhé :

(defun TraceCIRCLE (obj / sp ep inc pt ptlst)
;Thanks gia_bach for this function;
(setq sp 0
ep (* 2 pi)
inc (/ ep 72) )
(while ((setq pt (vlax-curve-getPointAtParam obj sp)
ptlst (cons pt ptlst)
sp (+ inc sp)) )
(reverse ptlst)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:sct (/ sscir i n ent cen lstp ss tl vl ov cen_po ang dis R Rr di)
;copyright by Tue_NV 
(vl-load-com)
(setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0 0))
(command "undo" "be")
(if (not *tl*) (setq *tl* 1.0))
(setq tl (getdist (strcat "\n Nhap he so ti le  : ")))
(if (not tl) (setq tl *tl*) (setq *tl* tl))
(if (setq sscir (ssget (list (cons 0 "CIRCLE"))))
(progn 
(setq n (sslength sscir) i 0)
(setq ent (ssname sscir 0)
cen (cdr (assoc 10 (entget ent)))
Rr (cdr (assoc 40 (entget ent)))
)
(mapcar 'setvar vl ov)
(setq cen_po (getpoint cen "\n Nhap diem bat ki tren Circle lam tam :"))
(mapcar 'setvar vl '(0 0 0))
(setq ang (angle cen cen_po))
(setq di (- (distance cen cen_po) Rr))
(vla-ZoomExtents (vlax-get-acad-object))
(while ((setq ent (ssname sscir i)
cen (cdr (assoc 10 (entget ent)))
R (cdr (assoc 40 (entget ent)))
dis (+ (/ (* di R) Rr) R)
cen_po (polar cen ang dis)
)
(if (= (cdr (assoc 0 (entget ent))) "CIRCLE")
(progn 
(setq lstp (traceCircle (setq ob (vlax-ename->vla-object ent))) )
(if (setq ss (ssget "cp" lstp (list(cons 0 "HATCH")) )) 
(command "scale" ss ent "" cen_po tl)
)
);progn
);if
(setq i (1+ i))
);while
(command "undo" "e")
(mapcar 'setvar vl ov) ; reset Sys Vars
);progn
(alert "\n Ban chua chon doi tuong nao ca")
);if
(princ)
(vla-ZoomPrevious (vlax-get-acad-object))
)

  • 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

×