Đến nội dung


Hình ảnh
- - - - -

Chỉnh sửa text, dim từ tỷ lệ này sang tỷ lệ khác


  • Please log in to reply
10 replies to this topic

#1 Leona

Leona

    Chưa sử dụng CAD

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

Đã gửi 26 February 2007 - 02:19 PM

Mình mới tham gia diễn đàn, bạn cho mình hỏi bạn có lisp nào có thể giúp cho việc quản lý chỉnh sửa các đường dim và các text không. không phải la lisp catdim mình biết nó.
Dùng trong trường hợp là muốn thay đổi size của các text một loạt, tất nhiên không dùng đến các lệnh như lay iso hay ma. vì các lệnh này làm cho dòng chữ nó thay đổi vị trí.
còn chỉnh dim ở trường hợp các bản vẽ có khung tỉ lệ 100,50 hoặc 25. còn bên trong thì có cả tỉ lệ khác nhau. Mình nghĩ thì vẫn có thể làm một lisp chỉnh được khi in ra để tất cả các kích thước vẫn bằng nhau. cái này nếu làm được thì rất hay, mình nghĩ có thể bán được đó hí.
Mình nói cụ thể hơn nhé: lấy một bản vẽ có khung đúng bằng A4 thì khung tỉ lệ là 1:100, còn một bản vẽ có khung bằng khổ A3 thì tỉ lệ in ra của nó là 1:200 thì mới bằng bản vẽ A4. còn trong mỗi khung thì có nhiều bản vẽ với tỉ lệ khác nhau, mình muốn chỉnh cho các bản vẽ trong mỗi cả 2 khung in ra đều có kích thước bằng nhau thì chỉnh sửa cũng mất khá thời gian nếu như có nhiều khung có tỉ lệ khác nhau trong một dự án. nếu có lisp tự động chỉnh cho mình mấy cái tỉ lệ đó thì hay tuyệt. bạn hiểu không nhỉ! help me! :lol: :lol:
  • 0
3C Club

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 26 February 2007 - 02:51 PM

Điều này hoàn toàn có thể làm được với lisp.

Để in bản vẽ ở các tỷ lệ khác nhau, ta cần 3 loại đối tượng chính để hiệu chỉnh kích thước là:
- Dim
- Text
- Các ký hiệu.

Dim và Text thì dễ rồi, nếu các ký hiệu mà đều được làm theo kiểu Block Attribute thì ok, còn không thì bạn phải chỉnh tay các ký hiệu.

Cách làm như sau:
- Để chuyển Dim, chúng ta chỉ việc tạo một Dim mới rồi dùng lệnh DimUpdate với toàn bộ Dim trong bản vẽ là xong.
- Để chuyển text từ tỷ lệ A sang tỷ lệ B (với tất cả các text), bạn hãy sử dụng lisp STE (Scale TExt) của cadviet. lệnh này có chức năng scale text như lệnh scale nhưng bạn không phải bắt điểm. Chương trình sẽ tự động detect điểm chèn của text và scale từng đối tượng text theo điểm này.
- Để chuyển các ký hiệu từ tỷ lệ A sang tỷ lệ B, hãy sử dụng lisp SB (Scale Block) của cadviet. Lệnh này giống như lệnh STE, scale từng block theo điểm chèn của nó.

Lisp:

(defun c:sb (/ tapblock sodt index soblocksua
entdt tt diemchen tyle DAIHT DAIMOI
TEMP
)
(init)
(princ "\nDay la lenh Scale block!")
(setq tapblock (ssget '((0 . "INSERT")))
temp (initget "R C")
temp (getreal "\nTy le phong: ")
tyle (cond
((= temp "R")
(setq
daiht (getdist "\nDo dai hien tai: ")
daimoi (getdist "\nDo dai moi: ")
tyle (/ daimoi daiht)
)
)
((= temp "C")
(setq tyle (getreal "\nTy le moi: "))
)
(t temp)
)
sodt (sslength tapblock)
index 0
soblocksua 0
)
(repeat sodt
(setq entdt (ssname tapblock index)
index (1+ index)
tt (entget entdt)
diemchen (trans (cdr (assoc '10 tt)) 0 1)
soblocksua (1+ soblocksua)
)
(luuos)
(setvar "OSMODE" 0)
(command ".scale" entdt "" diemchen tyle)
(traos)
)
(princ (strcat "\nSo block da sua: " (itoa soblocksua)))
(sssetfirst nil tapblock)
(done)
)
;;-----------------------------------
(defun c:ste (/ tapblock sodt index soblocksua
entdt tt diemchen tyle DAIHT DAIMOI
TEMP
)
(init)
(princ "\nDay la lenh Scale TEXT!")
(setq tapblock (ssget '((0 . "TEXT")))
temp (initget "R C")
temp (getreal "\nTy le phong: ")
tyle (cond
((= temp "R")
(setq
daiht (getdist "\nDo dai hien tai: ")
daimoi (getdist "\nDo dai moi: ")
tyle (/ daimoi daiht)
)
)
((= temp "C")
(setq tyle (getreal "\nTy le moi: "))
)
(t temp)
)
sodt (sslength tapblock)
index 0
soblocksua 0
)
(repeat sodt
(setq entdt (ssname tapblock index)
index (1+ index)
tt (entget entdt)
diemchen (trans (cdr (assoc '10 tt)) 0 1)
soblocksua (1+ soblocksua)
)
(luuos)
(setvar "OSMODE" 0)
(command ".scale" entdt "" diemchen tyle)
(traos)
)
(princ (strcat "\nSo TEXT da sua: " (itoa soblocksua)))
(sssetfirst nil tapblock)
(done)
)



Hình trước và sau khi chuyển tỷ lệ về còn 1 nửa:
Hình đã gửi
  • 1

#3 trantrung78

trantrung78

    biết zoom

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

Đã gửi 19 March 2007 - 10:56 AM

Xin cám ơn hai bác Nguyễn Hoành và ssg rất nhiều, mấy cái đoạn cốt mà hai bác chỉ giáo tôi đã làm được đúng như yêu cầu rồi (nhưng nếu có bác nào chỉ cho tôi cách copy mấy cái đoạn cốt đó giống như nguyên mẫu trong bài post thì đỡ quá, chứ như bây giờ paste vào nó cứ thành một dòng liên tục sửa lại mệt, mà còn bị sai nữa chứ!
và còn mấy cái đoạn code về lệnh SCALE BLOCK, SCALE DIM, SCALE TEXT sau khi tôi load xong chạy một lệnh lại xuất hiện dòng thông báo: "; error: no function definition: INIT" vậy là sao hả hai bác??). Về ý kiến thành lập một hệ thống như bác ssg nói thì hay qúa! như vậy mới chuẩn và tồn lại lâu được, tôi ủng hộ hết mình luôn, một lần nữa xin cám ơn hai bác nhiều!
  • 0

#4 be_chanh

be_chanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1712 Bài viết
Điểm đánh giá: 889 (rất tốt)

Đã gửi 19 March 2007 - 12:56 PM

Xin cám ơn hai bác Nguyễn Hoành và ssg rất nhiều, mấy cái đoạn cốt mà hai bác chỉ giáo tôi đã làm được đúng như yêu cầu rồi (nhưng nếu có bác nào chỉ cho tôi cách copy mấy cái đoạn cốt đó giống như nguyên mẫu trong bài post thì đỡ quá, chứ như bây giờ paste vào nó cứ thành một dòng liên tục sửa lại mệt, mà còn bị sai nữa chứ!
và còn mấy cái đoạn code về lệnh SCALE BLOCK, SCALE DIM, SCALE TEXT sau khi tôi load xong chạy một lệnh lại xuất hiện dòng thông báo: "; error: no function definition: INIT" vậy là sao hả hai bác??). Về ý kiến thành lập một hệ thống như bác ssg nói thì hay qúa! như vậy mới chuẩn và tồn lại lâu được, tôi ủng hộ hết mình luôn, một lần nữa xin cám ơn hai bác nhiều!


Trả lời câu hỏi thứ nhất: Copy lisp từ codebox thì mất các dấu xuống dòng, bạn có thể tham khảo ở đây

http://www.cadviet.com/forum/index.php?showtopic=352

Trả lời câu hỏi thứ 2: error: no function definition: INIT

Bản chất của lỗi này là không thấy defun INIT.Có thể giải quyết bằng cách sử dụng thêm lisp hethong.lsp sau. Nhớ là khi load phải load lisp hethong.lsp trước ,sau đó mới đến các lisp Scale Block..:lol:


;;------------------------------------------------------------
(defun hoanh_newerror (msg)
(if (and (/= msg "Function cancelled")
(/= msg "quit / exit abort")
)
(princ (strcat "\n" msg))
)
(done)
)
;;----------
(defun init ()
(setq
HOANH_CMD (getvar "CMDECHO")
HOANH_OLDERROR *error*
*error* hoanh_newerror

)
(setvar "CMDECHO" 0)
(command ".undo" "BE")
)
;;----------
(defun done ()
(command ".redraw")
(command ".undo" "E")
(if HOANH_CMD
(setvar "CMDECHO" HOANH_CMD)
)
(if HOANH_OLDERROR
(setq *error* HOANH_OLDERROR)
)
(princ)
)

(defun luuos ()
(setq
HOANH_OSMODE (getvar "OSMODE")
HOANH_AUTOSNAP (getvar "AUTOSNAP")
)
)
(defun traos ()
(if HOANH_OSMODE
(setvar "OSMODE" HOANH_OSMODE)
)
(if HOANH_AUTOSNAP
(setvar "AUTOSNAP" HOANH_AUTOSNAP)
)
)

  • -1

t: 097.323.1199 | m: cudstk@gmail.com | w: http://www.aicollect.com


#5 trantrung78

trantrung78

    biết zoom

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

Đã gửi 22 March 2007 - 11:24 AM

xin lỗi bác jikibo vì đã cám ơn bác hơi trễ! mấy hôm nay cty mạng bị die nên không thể reply cho bác được! mấy cái bác chỉ giáo tôi đã làm được rồi! cám ơn bác rất nhiều!
  • 0

#6 codered8x

codered8x

    biết lệnh copy

  • Members
  • PipPipPip
  • 119 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 31 March 2010 - 01:20 AM

Sao mình load cái file lsp trên mà báo load thành công rồi, gõ lệnh thì không có tác dụng, cũng k báo là k tìm thấy lệnh đó.???có cách nào khác để thay đổi đồng loạt nhiều cỡ text và dim không?
  • 0

#7 NguyễnĐua

NguyễnĐua

    biết vẽ line

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

Đã gửi 21 February 2012 - 09:10 AM

các bác cho em hỏi.sao em down cái lisp của bác hoanh về load nhưng ko thấy báo gì cả
chỉ em với em chưa sử dụng cái này
  • 0

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 21 February 2012 - 09:23 AM

các bác cho em hỏi.sao em down cái lisp của bác hoanh về load nhưng ko thấy báo gì cả
chỉ em với em chưa sử dụng cái này

Bác Hoành có cơ man nào là lisp, biết cái nào mà chỉ? Load xong, bấm F2 xem nó báo gì?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#9 NguyễnĐua

NguyễnĐua

    biết vẽ line

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

Đã gửi 21 February 2012 - 08:59 PM

thì là cái bác ý vừa cho ở trên ý mà
  • 0

#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 21 February 2012 - 09:35 PM

thì là cái bác ý vừa cho ở trên ý mà

Load lisp xong, nó báo đã load lisp hoàn thành (bấm F2 sẽ thấy). Trong lisp này có 2 lệnh là SB và STE. Bạn muốn dùng lệnh nào thì cứ nhập nó vào command.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#11 xuanduc1031

xuanduc1031

    biết zoom

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

Đã gửi 25 November 2014 - 01:42 PM

tải lisp trên thì cad nào hiểu được nhỉ


  • 0