Đến nội dung


Hình ảnh

scale theo trục x và y


  • Please log in to reply
41 replies to this topic

#1 xtuan

xtuan

    biết pan

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

Đã gửi 09 December 2008 - 11:08 PM

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
  • 0

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 10 December 2008 - 06:18 AM

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

  • 1

#3 lquocthinh

lquocthinh

    biết zoom

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

Đã gửi 18 January 2009 - 11:35 AM

Bạn cũng có thể dùng lệnh strech ( S ) để kéo dãn đối tượng 2 lần theo 2 phương .
  • 0
Nắng có hồng bằng đôi môi em ? Mưa có buồn bằng đôi mắt trong ?

#4 haanh

haanh

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2877 Bài viết
Điểm đánh giá: 1555 (rất tốt)

Đã gửi 18 January 2009 - 05:01 PM

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

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#5 hd_khiem

hd_khiem

    biết zoom

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

Đã gửi 22 October 2010 - 11:51 AM

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
  • 0

#6 phandungh

phandungh

    biết vẽ pline

  • Members
  • PipPip
  • 63 Bài viết
Điểm đánh giá: 35 (tàm tạm)

Đã gửi 22 October 2010 - 09:33 PM

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...!
  • 0

#7 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 19 April 2014 - 08:49 AM

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


  • -1

#8 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5683 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 19 April 2014 - 02:19 PM

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


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#9 buondoi59

buondoi59

    biết pan

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

Đã gửi 19 April 2014 - 02:42 PM

các bác cho e hỏi đăng bài lên ntn đấy ạk


  • 0

#10 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 19 April 2014 - 07:37 PM

Đây là lisp scale all giữ nguyên dim, text của bác SSG, bạn tham khảo


  • 0

#11 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 19 April 2014 - 07:39 PM

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


  • 0

#12 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 21 April 2014 - 09:05 AM

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


  • 0

#13 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 21 April 2014 - 05:06 PM

Nhờ Bác Bình và các Bác trên diễn dàn giúp đỡ....


  • 0

#14 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 22 April 2014 - 03:58 PM

Cấp cứu cấp cứu Nhờ Các Bác Giúp...


  • 0

#15 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 22 April 2014 - 07:55 PM

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


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#16 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 23 April 2014 - 12:50 PM

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


  • 1

#17 vuongvjpnd

vuongvjpnd

    biết vẽ rectang

  • Members
  • PipPip
  • 88 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 23 April 2014 - 01:32 PM

theo mình nghĩ bạn ấy đang muốn scale 1 cái gì đó lớn hơn là 1 hcn bình thường, vd như 1 ngôi nhà chẳng hạn!!!!! ( nguy hiểm tý)


  • 0

#18 anpha3

anpha3

    biết vẽ arc

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

Đã gửi 24 April 2014 - 09:44 AM

 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


  • 0

#19 jzuoglee

jzuoglee

    biết vẽ arc

  • Members
  • PipPip
  • 48 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 24 April 2014 - 09:48 AM

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.


  • 0

#20 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 24 April 2014 - 10:24 AM

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.


  • 0