Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
Leona

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

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

Leona    1

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:

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
Nguyen Hoanh    4.524

Đ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:

ChinhTyle.gif

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

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!

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

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

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!

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
codered8x    18

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?

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
Doan Van Ha    2.676

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

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
Doan Van Ha    2.676

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.

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

Đăng nhập để thực hiện theo  

×