ai có lips hay có cách nào để scale đối tượng theo 1 chiều thì send cho mình với nhé.Đang rất cần.Thanksss nhiều
QUẢNG CÁO ĐẦU TRANG
Collapse
Thông báo
Collapse
No announcement yet.
scale đối tượng theo 1 chiều(X or Y)
Collapse
X
-
Ðề: scale đối tượng theo 1 chiều(X or Y)
Nguyên văn bởi loisudecách dể dàng nhất là tạo thành block sao đó insert lại. Bạn xem trong phần insert block co tỉ lệ theo 2 phương đó. Rất dễ. Thân chào
-
Ðề: scale đối tượng theo 1 chiều(X or Y)
Nguyên văn bởi casperví dụ đợn giản như hcn (a.b) thì thành (2a.b) đó mà
;- Tâm sclale p0 (x0 y0 z0)
;- mx; my là tỉ lệ theo x; y
;- p1 là một điểm có (x1 y1 z1)
;- sau khi scale p1 sẽ có tọa độ là X1=x0+(x1-x0)*mx
; Y1=y0+(y1-y0)*my
; Z= z1
;đối với PLINE thì Z được bỏ qua,còn các đối tượng khác thì cần
;Ví dụ sau sẽ scale thep x=3.0, y=2.0
(setq mx 3.0
my 2.0)
(setq ent (car (entsel "\nChon PLINE:"))) ;chọn một đường PLINE
(setq ent1 (entget ent)) ;Lấy dữ liệu DXF của nó
(setq n (length ent1)) ;lấy chiều lài list
(setq p0 (getpoint "\nTam scale:")) ;Tâm scale
(setq px0 (car p0) ;Lấy tọa độ x0
py0 (cadr p0)) ;lấy tọa độ y0
(setq dlist (list)) ; tạo list rỗng
(setq i 0) ;thành phần thứ nhất của list
(while (< i n) ;nếu chưa hết các thành phần
(if (/= (car (nth i ent1)) 10) ;duyệt danh sách nếu
;thành phần không phải là tọa độ thì dừng lại (tọa độ điểm trong pline là (10 x y)) và gắn vào danh sách
(setq dlist (append (list (nth i ent1)) dlist))
(setq dlist (append (list (list 10
(+ px0 (*(- (cadr (nth i ent1)) px0) mx))
(+ py0 (*(- (caddr (nth i ent1)) py0) my))
)
) dlist)) ;nếu là tọa độ thì đổi luôn x;y
) ; end if
(setq i (1+ i)) ; duyệt thành phần tiếp
) ; end while
(setq dlist (reverse dlist)) ; đảo ngược danh sách
(entmod dlist) ;cập nhật lại DXF
(entupd ent) ; cập nhật lại PLINE
;các bạn có thể gom các câu lệnh này thành 1 hàm, đặt tham số, biến cục bộ, xử lý thêm phần nhập PLINE để thành 1 hàm hoàn chỉnh,
; VD (defun scale_pline (ent mx my p0 / ent1 i n dlist px0 py0)
..........)
Ghi chú
-
Ðề: scale đối tượng theo 1 chiều(X or Y)
muốn scale theo một chiều dễ thui ah, không cần phải lập lis cho mệt chỉ cần block lại nhưng phải chọn điểm làm mốc khi Block sau đó vào phần Properties(ctrl+1) kéo danh sách xuống chọn phần scalex,y,z chọn chiều nào thì đánh tỉ lệ vào chiều đó là ok
Ghi chú
-
Ðề: scale đối tượng theo 1 chiều(X or Y)
Nguyên văn bởi 3dnowmuốn scale theo một chiều dễ thui ah, không cần phải lập lis cho mệt chỉ cần block lại nhưng phải chọn điểm làm mốc khi Block sau đó vào phần Properties(ctrl+1) kéo danh sách xuống chọn phần scalex,y,z chọn chiều nào thì đánh tỉ lệ vào chiều đó là ok
Ghi chú
-
Ðề: scale đối tượng theo 1 chiều(X or Y)
Bên cv có mà bạn.
;Scale the mot chieu
(DEFUN EXCUTE()
(setq oldvalue (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(princ "Chon doi tuong can scale: ")
(setq ss (ssget))
(setq P0 (getpoint "\nChon diem goc: "))
(initget 1 "X Y X S")
(setq C (getkword "\nScale theo [X,Y,Z,Scale]?<X/Y/Z/S> :"))
(setq hs (getreal "Cho biet he so scale: "))
(DELBLOCK "vkc_temp")
(CREATEBLOCK ss P0)
(Command "-Insert" "vkc_temp" C hs P0 "")
(setq dt (entlast))
(Command "Explode" dt)
(setvar "CMDECHO" oldvalue)
(princ)
)
(DEFUN CREATEBLOCK(ss P)
(command "-Block" "vkc_temp" P ss "")
)
(DEFUN DELBLOCK (bname)
(if (IsExistBlock bname)
(Command "-Purge" "B" bname "Y" "Y")
)
)
(DEFUN IsExistBlock(bname / kq)
(setq kq Nil)
(setq n (length LiBlk))
(setq i 0)
(while (< i n)
(if (= bname (nth i LiBlk))
(progn
(setq i n)
(setq kq T)
)
)
(setq i (1+ i))
)
kq
)
(DEFUN CREALIBLK (/ NL)
(setq LiBlk (List))
(setq NL (tblnext "BLOCK" T))
(while NL
(setq LiBlk (append LiBlk (list (cdr (assoc 2 NL)))))
(setq NL (tblnext "BLOCK"))
)
(setq LiBlk (Acad_strlsort LiBlk))
)
(DEFUN C:XSCALE()
(CREALIBLK)
(EXCUTE)
)
(DEFUN C:XSC()
(CREALIBLK)
(EXCUTE)
)
(princ "\nfree lisp from www.cadviet.com")
(princ)
Ghi chú
Quảng cáo cuối trang
Collapse
Ghi chú