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

scale theo trục x và y

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

mình có hình chữ nhật kích thước a(mm)xb(mm). mình muốn scale thành hình chữ nhật kích thước a+2 (mm) x b+5 (mm)thì làm sao các bác. mình đang học cad

Cách của mình là tạo block rồi bấm Ctrl +1, vào properties để scale trong x và y., nhưng đó là scale tỷ lệ. mình muốn đưa kích thươc vào ấy

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 có hình chữ nhật kích thước a(mm)xb(mm). mình muốn scale thành hình chữ nhật kích thước a+2 (mm) x b+5 (mm)thì làm sao các bác. mình đang học cad

Cách của mình là tạo block rồi bấm Ctrl +1, vào properties để scale trong x và y., nhưng đó là scale tỷ lệ. mình muốn đưa kích thươc vào ấy

Nếu muốn như vậy thì bạn phải sử dụng Lisp Scale theo 1 phương X trước rồi tiếp theo đó bạn scale 1 chiều theo phương Y sau.

Như vậy thì mới đạt được kết quả mong muốn .

Đây là lệnh XSC : Scale theo 1 phương :

;XSCALE Scale the mot chieu lenhtat :XSC
(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]? :"))
 (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 (	(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)
)

  • 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
mình có hình chữ nhật kích thước a(mm)xb(mm). mình muốn scale thành hình chữ nhật kích thước a+2 (mm) x b+5 (mm)thì làm sao các bác. mình đang học cad

Cách của mình là tạo block rồi bấm Ctrl +1, vào properties để scale trong x và y., nhưng đó là scale tỷ lệ. mình muốn đưa kích thươc vào ấy

Gặp trường hợp của bạn dùng strech ( S ) để kéo dãn đối tượng theo phương a: 2mm và theo phương b: 5mm

nhanh gấp nhiều lần dùng lisp.

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 muốn như vậy thì bạn phải sử dụng Lisp Scale theo 1 phương X trước rồi tiếp theo đó bạn scale 1 chiều theo phương Y sau.

Như vậy thì mới đạt được kết quả mong muốn .

Đây là lệnh XSC : Scale theo 1 phương :

;XSCALE Scale the mot chieu lenhtat :XSC
(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]? :"))
 (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)
)

Down file đó về rùi bỏ nó vào đâu vậy bạ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
Down file đó về rùi bỏ nó vào đâu vậy bạn

Bạn mở notepad rồi paste các dòng xanh đỏ đó rồi lưu lại với đuôi fai lsp,

Sử dụng:

mở CAD vào Tools -> load Application...

nhấn vao fai vừa lưu open là ok...!

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ờ Bác tuệ chỉnh hộ lisp  của Bắc scale theo trục x và y mà text hoặc mtex  hoặc text không bị scale theo ( vẫn giữ nguyên).

  • 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

Bác Bình lớn tuổi rồi nên bạn phải viết thật to sợ bác ý k đọc được chăng ??

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

Tham khảo nha, tui cũng post file ko được...

 

(defun ss2ent (ss / i Le e) ;;;Convert ss to list of ename
(setq i 0 Le nil)
(repeat (sslength ss)
(setq
e (ssname ss i)
Le (append Le (list e))
i (1+ i)
)
)
Le
)
;;;;;;;;;;;;;;
(defun SCDim( / e ob OName SF LSF)
(while (setq e (ssname ssd 0))

  (setq

    ob (vlax-ename->vla-object e)

    OName (vla-get-ObjectName ob)

    SF (vla-get-ScaleFactor ob)

  )

  (if (not (wcmatch OName "*AngularDimension"))

    (progn

      (setq LSF (vla-get-LinearScaleFactor ob))

      (command "dimoverride" "dimlfac" (/ LSF k) "" e "")

    )

  )

  (if (/= opt "N") (command "dimoverride" "dimscale" (* SF k) "" e ""))

  (ssdel e ssd)

)

)

;;;-------------------------------------------------------------
(defun C:SCA( / ss e d L ssd p k opt) ;;;SCale with Constant dimensions
(vl-load-com)
(command "undo" "be")
(setq
  ss (ssget)
  ssd (ssget "p" '((0 . "DIMENSION")))
  L (ss2ent ss)
  p (getpoint "\nBase point:")
  k (getreal "\nScale Factor:")
  opt "N"
)
(foreach e L
(setq d (entget e))
(if (wcmatch (cdr (assoc 0 d)) "TEXT,MTEXT")
(entmod (subst (cons 40 (/ (cdr (assoc 40 d)) k)) (assoc 40 d) d))
)
)
(if (> k 1)
  (progn (command "scale" ss "" p k) (SCDim))
  (progn (SCDim) (command "scale" ss "" p k))
)
(command "undo" "e")
(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

lisp của bác SSG chỉ giữ nguyên text và dim khi scale xy em đang cần lisp giữ nguyên text và dim khi scale 1 chiều x hoặc y.Cám ơn Bác... 

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ờ Bác Bình và các Bác trên diễn dàn giúp đỡ....

Mình và mọi người sẽ không ai giúp được bạn nếu như không hiểu bạn muốn gì.

Tại sao không gửi bản vẽ lên để mô tả điều bạn muốn.???

Bằng lời văn của bạn có nhiều cách hiểu khác nhau:

1/- Chỉ scale các đối tượng không phải là text,

2/- Scale toàn bộ , sau đó thu nhỏ các tẽxt lại như cũ nhưng vẫn đúng ở vị trí sau khi scale.

3/- Scale các đối tượng không phải là text rồi move các đối tượng text sang vị trí mới thích hợp.

.....................................

Đấy là chưa kể tới việc với các text có trong các dim, các block thì bạn định làm thế nào???

 

Nếu bạn không tôn trọng nội quy diễn đàn thì có kêu rát cổ, gõ mỏi tay cũng vô ích bạn ạ. Hãy xem kỹ và làm đúng các quy định về việc post các yêu cầu về lisp của diễn đàn....

  • Vote tăng 1
  • 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

Tôi có lisp scale theo 2 phương nhưng vẫn giữ chiều cao và bề rộng text như cũ. Nhưng chưa làm được với Mtext.

Có điều là tôi không biết thuật toán biến hình dạng ma trận, nên lisp chỉ đúng với text nằm ngang hoặc thẳng đứng thôi, còn text nằm xiên thì chưa được. Bác nào giỏi toán (như bác DOAN VAN HA chẳng hạn, vì thấy có lần làm giải phương trình gì đó) biết thuật toán này thì post lên thì sửa lisp sẽ hoàn thiện hơn.

 

http://www.mediafire.com/download/tzujlca9slfwlcb/sc2.LSP

 

Lisp này không giữ giá trị cũ của dim text vì làm như vậy là fake dim rồi.

  • 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ám Ơn Bác Bình đã nhắc nhở. Cũng không có gì to tát cả Bác ạ. Khi em scale mặt cắt dọc theo 1 chiều x (1/10) thì các text của mặt cắt giãn ra cụ thể:

Text cũ có height : 10 ; width factor: 0.75. sau khi scale theo chiều x: 10 thì Text mới có height : 100 ; width factor: 0.075. Nhờ Bác Chỉ hộ lisp để text có chiều cao height  và width factor như lúc đầu. Cám ơn Bác...Em up BVe lên mà mãi không được BV của em chỉ có 192kb

 

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

theo tớ thì bạn up lên mediafire rồi paste link lên đây, chịu khó tí đi! Vì mọi người không biết tương quan giữa hình vẽ và text trong bản vẽ của bạn như thế nào thì cũng khó hiểu bạn đang muốn scale theo kiểu như nào.

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 thử dùng lisp trên, khi nó hỏi

"Ty le scale phuong X:" thì gõ 10

"Ty le scale phuong Y:" thì gõ 1

xem kết quả ra sao.

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

Khi em scale mặt cắt dọc theo 1 chiều x (1/10) thì các text của mặt cắt giãn ra cụ thể:

Text cũ có height : 10 ; width factor: 0.75. sau khi scale theo chiều x: 10 thì Text mới có height : 100 ; width factor: 0.075. Nhờ Bác Chỉ hộ lisp để text có chiều cao height  và width factor như lúc đầu. Cám ơn Bác..

https://www.mediafire.com/?v560rbo6pslrra8

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

 

Khi em scale mặt cắt dọc theo 1 chiều x (1/10) thì các text của mặt cắt giãn ra cụ thể:

Text cũ có height : 10 ; width factor: 0.75. sau khi scale theo chiều x: 10 thì Text mới có height : 100 ; width factor: 0.075. Nhờ Bác Chỉ hộ lisp để text có chiều cao height  và width factor như lúc đầu. Cám ơn Bác..

https://www.mediafire.com/?v560rbo6pslrra8

bạn dùng lisp của bác tot77 đi, tớ thấy dùng đúng yêu cầu của bạn rồi đấy!

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

Lisp của Bác tot77 text bị giãn cũng giống như lisp của bác Tue mình muốn sau khi scale theo 1 chiều thì text không bị giãn.Cám ơn Bạ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

Lisp của Bác tot77 text bị giãn cũng giống như lisp của bác Tue mình muốn sau khi scale theo 1 chiều thì text không bị giãn.Cám ơn Bạn... 

tớ thử dùng như bác ấy nói : tỷ lệ X : 10  đặt tỷ lệ Y : 1  text k bị giãn đâu 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

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

×