Đến nội dung


Hình ảnh
- - - - -

Scale tất cả trên bẻn vẽ


  • Please log in to reply
31 replies to this topic

#1 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 09 February 2009 - 11:58 AM

Em nhờ các bác viết hộ em một Lisp về scale
trong cad có lệnh sc nhưng sử dụng lệnh đó không thể giữ nguyên các kích thước mà nó bị thay đổi theo tỉ lệ scale, khi scale nhỏ lại nó sẽ bị các đường ghi KT che kín hết, khi đó phải đi ghi lại KT
trong diễn đàn có lisp scc nhưng nó không scale các đường kthước và cỡ chữ ghi trên đó, sũng như lệnh trên khi scale nhỏ lại nó sẽ bị các đường ghi KT che kín hết, khi đó phải đi ghi lại KT
Em muốn các bác giúp em scale mà toàn bộ mọi loại đường, chữ số, mũi tên nghi KT, ... đều theo tỉ lệ scale đã chọn
Em xin chân thành cảm ơn.
  • 0
Úi Trời!!!!!!!!!!!!!!!

#2 trandungpc87

trandungpc87

    biết zoom

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

Đã gửi 20 February 2009 - 12:22 PM

Em nhờ các bác viết hộ em một Lisp về scale
trong cad có lệnh sc nhưng sử dụng lệnh đó không thể giữ nguyên các kích thước mà nó bị thay đổi theo tỉ lệ scale, khi scale nhỏ lại nó sẽ bị các đường ghi KT che kín hết, khi đó phải đi ghi lại KT
trong diễn đàn có lisp scc nhưng nó không scale các đường kthước và cỡ chữ ghi trên đó, sũng như lệnh trên khi scale nhỏ lại nó sẽ bị các đường ghi KT che kín hết, khi đó phải đi ghi lại KT
Em muốn các bác giúp em scale mà toàn bộ mọi loại đường, chữ số, mũi tên nghi KT, ... đều theo tỉ lệ scale đã chọn
Em xin chân thành cảm ơn.

Mình cũng mới dùng CAD thôi. Theo mình thì như thế này.
Bạn vào Format\ Dimension Style Manager và chọn New... từ kiểu bạn đang dùng. Sau đó nó sẽ hiện ra 1 bảng Modify Dimension Style. Bạn vào tab Primary Units sau đó đặt lại Scale factor là <1 nếu bạn scale tăng hoặc >1 nếu scale đối tượng giảm. Các cái khác bạn để nguyên. Sau đó bạn scale thoải mái và chọn DIM mới vừa rồi.
Có gì email cho mình, mình cùng học. Thân!
email: trandungpc87@gmail.com
  • 0

#3 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 21 February 2009 - 09:31 AM

Mình cũng mới dùng CAD thôi. Theo mình thì như thế này.
Bạn vào Format\ Dimension Style Manager và chọn New... từ kiểu bạn đang dùng. Sau đó nó sẽ hiện ra 1 bảng Modify Dimension Style. Bạn vào tab Primary Units sau đó đặt lại Scale factor là <1 nếu bạn scale tăng hoặc >1 nếu scale đối tượng giảm. Các cái khác bạn để nguyên. Sau đó bạn scale thoải mái và chọn DIM mới vừa rồi.
Có gì email cho mình, mình cùng học. Thân!
email: trandungpc87@gmail.com


Bạn ơi!
Vấn đề của mình không phải làm được hay không mà công việc của mình cần tốc độ nhanh. Mình nói cho bạn thế này, Những bản vẽ của mình không phải chỉ là một kiểu ghi kích thước mà nó có nhiều kiểu ghi kthước, và nó có nhiều tỉ lệ trong bản vẽ ví dụ hình trích cần phóng to thì mình lại phải cho nó một tỉ lệ chẳng hạn,...

Mình cần nhanh nên mới nhờ các đại ca giúp cho cái lisp nhưng mãi phông có đại ca nào đoái hoài mà công việc mình thì vẫn phải lần mò từng chút một như vậy

Mong đại ca nào có thể hãy giúp cho.

Xin chân thành cảm ơn.
  • 0
Úi Trời!!!!!!!!!!!!!!!

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 21 February 2009 - 11:43 AM

Bạn ơi!
Vấn đề của mình không phải làm được hay không mà công việc của mình cần tốc độ nhanh. Mình nói cho bạn thế này, Những bản vẽ của mình không phải chỉ là một kiểu ghi kích thước mà nó có nhiều kiểu ghi kthước, và nó có nhiều tỉ lệ trong bản vẽ ví dụ hình trích cần phóng to thì mình lại phải cho nó một tỉ lệ chẳng hạn,...

Mình cần nhanh nên mới nhờ các đại ca giúp cho cái lisp nhưng mãi phông có đại ca nào đoái hoài mà công việc mình thì vẫn phải lần mò từng chút một như vậy

Mong đại ca nào có thể hãy giúp cho.

Xin chân thành cảm ơn.

Ui_troi_2005 ơi,
Vấn đề của bạn do không nói rõ nên chửa hiểu được là phải làm cái gì. Nếu là bạn muốn scale kích thước chỉ đơn thuần về tỉ lệ các con số , đường gióng , mũi tên ... thôi mà giữ nguyên giá trị của nó thì rất đơn giản là bạn hãy explore cái kích thước bạn muốn scale trước khi thực hiện lệnh scale là OK thôi mà.
Nhưng nếu bạn muốn cái giá trị kích thước ấy cũng phải được scale theo ( ví dụ trước khi scale nó là 24, sau khi scale với tỷ lệ 0.5 thì nó là 12) thì nó sẽ rắc rối hơn nhiều bạn ạ.
Lần sau khi bạn muốn cái gì thì bạn nên nói cụ thể hơn và tốt nhất là nên có hình minh họa ý tưởng của bạn để người giúp có cơ sở suy luận chứ. Bằng không có khi họ giúp mà không đúng ý bạn thì chỉ là một công việc vô ích thôi mà chả ai lại muốn làm cái việc vô ích cả bạn ạ.
Rất mong bạn lưu ý điều này chứ đừng có mang cái níck của bạn ra xài nhiều quá nhé.
Ui_troi_ ....... ơi, Cơ khổ, cơ khổ.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 haanh

haanh

    biết lệnh adcenter

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

Đã gửi 21 February 2009 - 03:16 PM

Em nhờ các bác viết hộ em một Lisp về scale
trong cad có lệnh sc nhưng sử dụng lệnh đó không thể giữ nguyên các kích thước mà nó bị thay đổi theo tỉ lệ scale, khi scale nhỏ lại nó sẽ bị các đường ghi KT che kín hết, khi đó phải đi ghi lại KT
trong diễn đàn có lisp scc nhưng nó không scale các đường kthước và cỡ chữ ghi trên đó, sũng như lệnh trên khi scale nhỏ lại nó sẽ bị các đường ghi KT che kín hết, khi đó phải đi ghi lại KT
Em muốn các bác giúp em scale mà toàn bộ mọi loại đường, chữ số, mũi tên nghi KT, ... đều theo tỉ lệ scale đã chọn
Em xin chân thành cảm ơn.


Trong khi chờ đợi Bác đặt bản vẽ đó thành Block rồi Scale theo các tỷ lệ sẽ nhỏ đi hoặc lớn lên không cần phải thay đổi kiểu DIM
  • 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...”


#6 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 24 February 2009 - 12:00 PM

Ui_troi_2005 ơi,
Vấn đề của bạn do không nói rõ nên chửa hiểu được là phải làm cái gì. Nếu là bạn muốn scale kích thước chỉ đơn thuần về tỉ lệ các con số , đường gióng , mũi tên ... thôi mà giữ nguyên giá trị của nó thì rất đơn giản là bạn hãy explore cái kích thước bạn muốn scale trước khi thực hiện lệnh scale là OK thôi mà.
Nhưng nếu bạn muốn cái giá trị kích thước ấy cũng phải được scale theo ( ví dụ trước khi scale nó là 24, sau khi scale với tỷ lệ 0.5 thì nó là 12) thì nó sẽ rắc rối hơn nhiều bạn ạ.
Lần sau khi bạn muốn cái gì thì bạn nên nói cụ thể hơn và tốt nhất là nên có hình minh họa ý tưởng của bạn để người giúp có cơ sở suy luận chứ. Bằng không có khi họ giúp mà không đúng ý bạn thì chỉ là một công việc vô ích thôi mà chả ai lại muốn làm cái việc vô ích cả bạn ạ.
Rất mong bạn lưu ý điều này chứ đừng có mang cái níck của bạn ra xài nhiều quá nhé.
Ui_troi_ ....... ơi, Cơ khổ, cơ khổ.


Bác ơi!
Nếu mà dùng Block thì sau khi scale xong thì mình có muốn chỉnh sử gì thì lại chỉnh sửa từng li từng tí sao? mà bản vẽ có nhiều các đường kthước giả sử chỉnh sử tất thì ........ có lẽ vẽ lại tốt hơn.
Còn việc bác muốn từ 24 về 12 với tỉ lệ 0.5 thì bác chỉ cần sc là okê ngay thôi kthước nó tự ngảy cho bác, còn bác muốn giữ nguyên kthước 24 vẫn 24 với mọi tỉ lệ scale bác chỉ cần vào xin cái Lisp có sẵn trong diễn đàn với lệnh scc là bác okê ngay.

Vấn đề của em là thế này: (Mục tiêu hang đầu là thời gian)
Em là muốn nhờ các bác viết hộ em cái lisp nó cũng gần như cái lisp lệnh là SCC nhưng nó hơn ở chỗ scale được cả mấy thằng kích thước (cỡ ghi chữ trong kthước, mũi tên, nói chung là các loại đường trong Dimension style)

Hình đã gửi
Bản vẽ với tỉ lệ 1/25.4
Hình đã gửi
Hình đã gửi
Hình đã gửi

Các bác xem và tìm cách sửa lỗi giúp em với
Em xin cảm ơn các bác
  • 0
Úi Trời!!!!!!!!!!!!!!!

#7 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 February 2009 - 06:16 PM

Bác ơi!
Nếu mà dùng Block thì sau khi scale xong thì mình có muốn chỉnh sử gì thì lại chỉnh sửa từng li từng tí sao? mà bản vẽ có nhiều các đường kthước giả sử chỉnh sử tất thì ........ có lẽ vẽ lại tốt hơn.
Còn việc bác muốn từ 24 về 12 với tỉ lệ 0.5 thì bác chỉ cần sc là okê ngay thôi kthước nó tự ngảy cho bác, còn bác muốn giữ nguyên kthước 24 vẫn 24 với mọi tỉ lệ scale bác chỉ cần vào xin cái Lisp có sẵn trong diễn đàn với lệnh scc là bác okê ngay.

Vấn đề của em là thế này: (Mục tiêu hang đầu là thời gian)
Em là muốn nhờ các bác viết hộ em cái lisp nó cũng gần như cái lisp lệnh là SCC nhưng nó hơn ở chỗ scale được cả mấy thằng kích thước (cỡ ghi chữ trong kthước, mũi tên, nói chung là các loại đường trong Dimension style)

Các bác xem và tìm cách sửa lỗi giúp em với
Em xin cảm ơn các bác

Chào bạn Ui_troi_2005,
Trong khi đi tìm lời giải cho cái bạn cần, mình thấy có cái thằng fakedim này, bạn thử xem có xài được không.
http://www.cadviet.c...o...=1306&st=40

Bạn lưu ý rằng sau khi xài thằng fakedim thì các dimension của bạn đã bị thay đổi so với bản chất của nó. Bạn hãy đọc kỹ các bài post của mọi người để chọn cho mình cách xài phù hợp.
Riêng quan điểm của mình là việc bạn yêu cầu khá phức tạp do dimension là một nhóm các thuộc tính riêng, đụng vào nó là như đụng vào ổ kiến lửa ấy. Chính vì thế, ngay cả cái lisp SCC của bạn cũng phải chừa lại cái khó đấy mà không giải quyết được triệt để vấn đề như bạn yêu cầu.
Nếu chỉ đơn giản là scale một lần rồi không quan tâm tới việc chỉnh sửa về sau nữa thì nên explore nó rồi scale là tốt nhất. Cái này cũng sẽ cho kết quả giống như cái fakedim của bác Hoành nhưng tệ hơn là tất cả đều bị vỡ cả. Còn fakedim của bác Hoành thì chỉ chuyển mỗi dimtext thành text thôi.
Để giải quyết triệt để cái yêu cầu của bạn có lẽ nên xài theo cách gợi ý của bác Nothien trong topic ở trên. Điều này mình chưa dám chắc là sẽ làm được nhưng sẽ cố thử xem sao.
Chúc bạn vui và thành công.

PS: Bạn có thể post lại cho mình cái lisp SCC mà bạn có hay không? mình tìm hoài trên diễn đàn mà chưa thấy. Cám ơn bạn trước
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#8 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 25 February 2009 - 04:40 PM

Chào bác "phamthanhbinh"
Em rất cảm ơn bác đã nói cho em biết, thực ra em ko biết về Lisp, em chỉ biết dùng nên cái khó của nó em không biết, Bác Hồ đã dạy "Đi đường mới biết gian lao"
Về vấn cái lisp với lệnh scc thì em cop ở trong mục Download nếu bác không thấy thì em cop lên đây bác xem. Cái này khi scale giữ nguyên giá trị thực của kthước, nó tự động thay đổi trong Dimension style.


;;;-------------------------------------------------------------
(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 C:SCC( / ss ssd L k e d dtype dt k0 newdtype) ;;;SCale Constant
(setq
ss (ssget)
ssd (ssget "p" '((0 . "DIMENSION")))
L (ss2ent ss)
)
(command "scale" ss "" pause (setq k (getreal "\nScale factor:")))
(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 ssd (progn
(setq
e (ssname ssd 0)
d (entget e)
dtype (cdr (assoc 3 d))
dt (tblsearch "dimstyle" dtype)
k0 (cdr (assoc 144 dt))
newdtype (strcat dtype "x" (rtos k))
)
(setvar "dimlfac" (/ k0 k))
(if (tblsearch "dimstyle" newdtype)
(command "dimstyle" "r" newdtype)
(command "dimstyle" "s" newdtype)
)
(command "dimstyle" "a" ssd "")
))
(princ)
)
;;;-------------------------------------------------------------
  • 0
Úi Trời!!!!!!!!!!!!!!!

#9 haanh

haanh

    biết lệnh adcenter

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

Đã gửi 25 February 2009 - 05:52 PM

Uớc gì có cái lips có thể Scale tất cả các bản vẽ 3D các loại cánh cửa từ một cái cửa có một loại KT ra nhiều loại KT to nhỏ khác nhau, các bác nhể!
  • 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...”


#10 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 27 February 2009 - 01:34 PM

Chào bác "phamthanhbinh"
Em rất cảm ơn bác đã nói cho em biết, thực ra em ko biết về Lisp, em chỉ biết dùng nên cái khó của nó em không biết, Bác Hồ đã dạy "Đi đường mới biết gian lao"
Về vấn cái lisp với lệnh scc thì em cop ở trong mục Download nếu bác không thấy thì em cop lên đây bác xem. Cái này khi scale giữ nguyên giá trị thực của kthước, nó tự động thay đổi trong Dimension style.


Chào bạn Ui_troi_2005,
Nhờ có cái lisp của bạn gửi, mình đã mày mò vọc nó và bổ sung thêm các yêu cầu mà bạn đã nêu. Không biết như vầy đã đúng ý bạn chưa, bạn thử xem nhé. Mình cũng đang định cải biên nó thêm tí nữa sau khi đã hiểu hòm hòm cái lisp này.
Đây là cái lisp mà mình đã bổ sung:
;;;-------------------------------------------------------------
(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 C:SCC( / ss ssd L k e d dtype dt k0 newdtype);;;SCale Constant
(setq
ss (ssget)
ssd (ssget "p" '((0 . "DIMENSION")))
L (ss2ent ss)
)
(command "scale" ss "" pause (setq k (getreal "\nScale factor:")))
(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 ssd (progn
(setq
e (ssname ssd 0)
d (entget e)
dtype (cdr (assoc 3 d))
dt (tblsearch "dimstyle" dtype)
k0 (cdr (assoc 144 dt))
newdtype (strcat dtype "x" (rtos k))
)
(setvar "dimlfac" (/ k0 k))

(setvar "dimdli" (* k (cdr (assoc 43 dt))))
(setvar "dimexe" (* k (cdr (assoc 44 dt))))
(setvar "dimexo" (* k (cdr (assoc 42 dt))))
(setvar "dimasz" (* k (cdr (assoc 41 dt))))
(setvar "dimcen" (* k (cdr (assoc 141 dt))))
(setvar "dimtxt" (* k (cdr (assoc 140 dt))))
(setvar "dimgap" (* k (cdr (assoc 147 dt))))

(if (tblsearch "dimstyle" newdtype)
(command "dimstyle" "r" newdtype)
(command "dimstyle" "s" newdtype)
)
(command "dimstyle" "a" ssd "")
))
(princ)
)
;;;-------------------------------------------------------------

Bạn thử lại và cho mình biết ý kiến nha.
@ Bác Haanh: Có lẽ cái này có thể đáp ứng điều bác muốn, tuy nhiên bác cần lưu ý là không phải cứ giảm nhỏ theo tỷ lệ là có cửa nhỏ được vì bác còn phải quan tâm đến các yêu cầu khác của cửa nữa, (ví như độ bền, vật liệu, chiều dày, ....... cũng như tính hợp lý của kết cấu cửa.)
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#11 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 27 February 2009 - 02:18 PM


Chào bạn Ui_troi_2005,
Đây là cái lisp mình cải tiến lại cái lisp trườc. Bạn xem thử xem có tiến không hay là lùi nhé. Chức năng y chang nhau.
;;;-------------------------------------------------------------
(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 C:SCC1( / ss ssd L k e d dtype dt k0 newdtype);;;SCale Constant
(setq
ss (ssget)
ssd (ssget "p" '((0 . "DIMENSION")))
L (ss2ent ss)
)
(command "scale" ss "" pause (setq k (getreal "\nScale factor:")))
(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 ssd (progn
(setq
e (ssname ssd 0)
d (entget e)
dtype (cdr (assoc 3 d))

k0 (getvar "dimlfac")
newdtype (strcat dtype "x" (rtos k))
)
(setvar "dimlfac" (/ k0 k))

(setvar "dimdli" (* k (getvar "dimdli")))
(setvar "dimexe" (* k (getvar "dimexe")))
(setvar "dimexo" (* k (getvar "dimexo")))
(setvar "dimasz" (* k (getvar "dimasz")))
(setvar "dimcen" (* k (getvar "dimcen")))
(setvar "dimtxt" (* k (getvar "dimtxt")))
(setvar "dimgap" (* k (getvar "dimgap")))

(if (tblsearch "dimstyle" newdtype)
(command "dimstyle" "r" newdtype)
(command "dimstyle" "s" newdtype)
)
(command "dimstyle" "a" ssd "")
))
(princ)
)
;;;-------------------------------------------------------------

Theo cảm nhận của mình, cái lisp này đọc dễ hiểu hơn nhưng mò được ít kiến thức về lisp hơn bạn ạ.
@ Bác Haanh: Sorry, không được bác ạ vì lisp này vẫn giữ nguyên giá trị của kích thước trên bản vẽ. Nếu bác muốn giá trị của kích thước cũng thay đổi theo tỷ lệ scale thì chỉ cần bỏ đi các dòng code có chữ dimlfac là OK. Chúc bác vui.
  • 3
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#12 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 27 February 2009 - 02:31 PM

Chào bác "phamthanhbinh"

Trước tiên em rất cảm ơn bác, em thấy cái Lisp của bác sửa lại rất hay, những yêu cầu của em bác đã giải quyết gíup cho nhưng còn một điều nhỏ nữa bác ạ đó là
Với bản vẽ của em thì em copy 1 đường thì okê, nhưng làm với 2 đường, và nhiều hơn thì lại ko đc, mà nó lại thực hiện với nhiều đường khi em vẽ linh tinh để thử thì lại đc. mà ko phải chỉ mỗi BV của em, của bạn em cũng vậy, mà theo em có lẽ những bản vẽ số lượng đường nó nhiều or định dạng nhiêud kiểu dimension là vẫn chưa đc.

(thực ra em cũng chưa có nhiều thời jan nên chưa test kỹ đc)
Mong bác chỉnh sửa lại giùm.....
Em xin cảm ơn bác.
  • 1
Úi Trời!!!!!!!!!!!!!!!

#13 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 27 February 2009 - 03:09 PM

Chào bác "phamthanhbinh"

Trước tiên em rất cảm ơn bác, em thấy cái Lisp của bác sửa lại rất hay, những yêu cầu của em bác đã giải quyết gíup cho nhưng còn một điều nhỏ nữa bác ạ đó là nó chỉ thực hiện đc một số đường thôi bác ạ.
Có nhiều thì nó bó tay, em làm thử với 1,2,.. đường thì đc, nhưng khi làm bản vẽ của em thì vẫn vậy bác ạ, nó ko thực hiện cho đường nào cả.
(thực ra em cũng chưa có nhiều thời jan nên chưa test kỹ đc)
Mong bác chỉnh sửa lại giùm.....
Em xin cảm ơn bác.

Chào bạn Ui_troi_2005,
Thú thực là mình cũng mới vọc cái lisp này thôi nên chưa có nhiều kinh nghiệm xử lý lỗi của lisp. Nếu bạn có thể post cái bản vẽ của bạn cho mình kiểm thử thì sẽ tốt hơn vì mình dễ mò ra lỗi hơn.
Cũng có thể khi số lượng dimension nhiều thì chương trình bị rối vì mỗi dim có quá nhiều tham số. Nhất là khi trên bản vẽ của bạn lại có nhiều dimstyle khác nhau. Bạn thử áp dụng lisp với một số dim hạn chế trên bản vẽ của bạn xem. Trước hết là với các dimension có cùng dimstyle rồi đến trộn lẫn các dimension có dimstyle khác nhau. Tất nhiên như vậy sẽ không thuận tiện vì bạn cần phải chọn tâm scale thống nhất trong các lần chạy lisp. Tuy nhiên từ đó mình có thể tìm ra lỗi nhanh hơn.
Mình cũng sẽ kiểm tra lại nhưng chưa chắc đã phát hiện ra điều gì vì có thể cái mình nghĩ khác với cái bạn có bạn ạ.
Chúc bạn vui và thành đạt.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#14 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 27 February 2009 - 04:01 PM

Chào bác "phanthanhbinh"
Em đã kiểm tra kỹ hơn và thấy chỉ một số bản vẽ nó mới ko thực hiện số lượng Dimension nhiều, còn những bản vẽ khác thì nó tuân theo tương đối tốt, còn một số cái đó là về text, các chữa ghi trên BV nó ko theo nó vẫn vậy, và phần vị trí đặt giá trị ghi nó ko tuân theo tỉ lệ, nó sẽ bị kéo dài hơn so với cỡ chữ.

Em up bản vẽ mà nó ko tuân theo lện lên, có jì bác xem lại júp em.

httpwww.cadviet.comupfilesCoxa.dwg

Thanks
  • 0
Úi Trời!!!!!!!!!!!!!!!

#15 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 27 February 2009 - 04:35 PM

Chào bác "phanthanhbinh"
Em đã kiểm tra kỹ hơn và thấy chỉ một số bản vẽ nó mới ko thực hiện số lượng Dimension nhiều, còn những bản vẽ khác thì nó tuân theo tương đối tốt, còn một số cái đó là về text, các chữa ghi trên BV nó ko theo nó vẫn vậy, và phần vị trí đặt giá trị ghi nó ko tuân theo tỉ lệ, nó sẽ bị kéo dài hơn so với cỡ chữ.

Em up bản vẽ mà nó ko tuân theo lện lên, có jì bác xem lại júp em.

httpwww.cadviet.comupfilesCoxa.dwg

Thanks

Chào bạn Ui_troi_2005,
Bạn gửi cái địa chỉ file mà mình không thể load về được do bạn nhập sai rồi. Bạn xem phần hướng dẫn upload file trên diễn đàn và upload lại đi nhé.
Theo như bạn nói thì rất có thể trên bản vẽ của bạn có các dimension đã bị chỉnh sửa bằng cách explore nên nó đã mất đi cái thuộc tính Dimassoc. Hoặc là nó đã bị xử lý theo một cách nào đó mà mình chưa rõ lắm. Bạn có thể kiểm tra như sau:
1/- Dùng hàm (setq a (entget (car ( entsel)))) rồi chọn vào cái dim không scale được.
2/- Dùng hàm (setq b (assoc 0 a)). Nếu thấy kết quả trả về không phải là "DIMENSION" thì chứng tỏ dim này đã bị thay đổi bạn ạ.

Còn với các text bạn cũng kiểm tra tương tự xem nó có phải là "TEXT" hay "MTEXT" không? Nếu không phải có nghĩa là các text này không do lệnh text hay Mtext tạo thành mà có thể là do các thao tác khác làm ra. Vì thế lisp không lọc được nó ra để áp dụng lệnh scale này. Việc text bị giãn dài hơn so với cỡ chữ chắc là đúng rồi vì mình chưa hề thay đổi biến lineweight. Cái này mình chưa rõ lắm nên để mình tìm hiểu thêm nhé.

Bạn hãy post lại cái file bản vẽ của bạn cho mình nhé để mình tìm hiểu thêm.

Chúc bạn vui.
  • 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 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 27 February 2009 - 06:52 PM

Chào bác "phanthanhbinh"
Em đã kiểm tra kỹ hơn và thấy chỉ một số bản vẽ nó mới ko thực hiện số lượng Dimension nhiều, còn những bản vẽ khác thì nó tuân theo tương đối tốt, còn một số cái đó là về text, các chữa ghi trên BV nó ko theo nó vẫn vậy, và phần vị trí đặt giá trị ghi nó ko tuân theo tỉ lệ, nó sẽ bị kéo dài hơn so với cỡ chữ.

Em up bản vẽ mà nó ko tuân theo lện lên, có jì bác xem lại júp em.

httpwww.cadviet.comupfilesCoxa.dwg

Thanks

Chào bạn Ui_troi_2005,
Sorry vì không kiểm tra kỹ lisp bạn gửi. Mình cứ nghĩ là bạn đã chạy thử rồi và Ok đối với text nên mình không quan tâm nữa chỉ lo sửa dim thôi, ai dè cái lisp của bạn gửi lại chính là với mục tiêu giữ kích thước text lại nguyên vẹn nên sau khi đã scale lại phải đổi về chiều cao text cũ bằng các dòng lệnh trong hàm foreach. Vì thế để cho các text được scale đúng theo yêu cầu của bạn, chỉ cần bỏ toàn bộ các dòng lệnh của hàm foreach này đi là ok.
Bạn có thể làm như mình dưới đây, tức là thêm các dấu chấm phẩy vào đầu các dòng này hoặc xóa toàn bộ các dòng code này đi là có lisp mới và bạn hãy chạy thử nhé.
;;;(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))
;;;)
;;;)

Còn việc điểm đặt text không theo đúng tỷ lệ scale chính là do khi scale thì lisp cho bạn chọn tâm scale, còn khi trả về chiều cao text cũ thì lisp lại giữ nguyên justify của text. Sau khi bạn bỏ các dòng code trên đi thì sẽ không còn việc sai lệch này nữa và text sẽ được scale ngon lành như nó vốn thế.

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

#17 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 01 March 2009 - 02:56 PM

Chào bạn Ui_troi_2005,
Sorry vì không kiểm tra kỹ lisp bạn gửi. Mình cứ nghĩ là bạn đã chạy thử rồi và Ok đối với text nên mình không quan tâm nữa chỉ lo sửa dim thôi, ai dè cái lisp của bạn gửi lại chính là với mục tiêu giữ kích thước text lại nguyên vẹn nên sau khi đã scale lại phải đổi về chiều cao text cũ bằng các dòng lệnh trong hàm foreach. Vì thế để cho các text được scale đúng theo yêu cầu của bạn, chỉ cần bỏ toàn bộ các dòng lệnh của hàm foreach này đi là ok.
Bạn có thể làm như mình dưới đây, tức là thêm các dấu chấm phẩy vào đầu các dòng này hoặc xóa toàn bộ các dòng code này đi là có lisp mới và bạn hãy chạy thử nhé.

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

Còn việc điểm đặt text không theo đúng tỷ lệ scale chính là do khi scale thì lisp cho bạn chọn tâm scale, còn khi trả về chiều cao text cũ thì lisp lại giữ nguyên justify của text. Sau khi bạn bỏ các dòng code trên đi thì sẽ không còn việc sai lệch này nữa và text sẽ được scale ngon lành như nó vốn thế.

Chúc bạn vui.


Chào bác phamthanhbinh.
Cảm ơn bác đã sửa lại cái lisp đó, bây jờ thì nó rất tốt rồi bác ạ, tất cả đều đã theo ý em, còn chỉ mọtt điều nhỏ đó là vị trí nó vẫn chưa được đẹp lắm(chưa đúng vị trí so với tỉ lệ mới).
Em up cái file lên và bác xem xem nó có vấn đề jì thì bác xem trực tiếp, em đã ghi mấy cái lỗi trong đó
http://www.4shared.c...676_tl_1-4.html

Cái lisp bác up lên lần thứ 2 sửa lại em ko thể load trong cad nên ko thể kiểm tra được cái đó.
Bác có thể nói rõ về 2 cái hàm
(setq a (entget (car ( entsel)))) và (setq b (assoc 0 a))
Em ko biết sử dụng nó, và cũng chưa hiểu hàm trong cad nó thế nào, mong bác chỉ giáo

Em xin chân thành cảm ơn bác.
  • 0
Úi Trời!!!!!!!!!!!!!!!

#18 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 04 March 2009 - 03:41 PM

Chào bác phamthanhbinh.
Cảm ơn bác đã sửa lại cái lisp đó, bây jờ thì nó rất tốt rồi bác ạ, tất cả đều đã theo ý em, còn chỉ mọtt điều nhỏ đó là vị trí nó vẫn chưa được đẹp lắm(chưa đúng vị trí so với tỉ lệ mới).
Em up cái file lên và bác xem xem nó có vấn đề jì thì bác xem trực tiếp, em đã ghi mấy cái lỗi trong đó
http://www.4shared.c...676_tl_1-4.html

Cái lisp bác up lên lần thứ 2 sửa lại em ko thể load trong cad nên ko thể kiểm tra được cái đó.
Bác có thể nói rõ về 2 cái hàm
(setq a (entget (car ( entsel)))) và (setq b (assoc 0 a))
Em ko biết sử dụng nó, và cũng chưa hiểu hàm trong cad nó thế nào, mong bác chỉ giáo

Em xin chân thành cảm ơn bác.

Chào bạn Ui_troi_2005,
Mình đã xem bản vẽ bạn gửi và phát hiện một số vấn đề như sau:
1/- Các dimension của bạn đã được Modify so với nguyên gốc của nó do lệnh dimensions tạo ra.
2/- Khi mình copy bản vẽ gốc của bạn sang bản vẽ mới thì rất nhiều dimension của bạn bị đổi màu do bạn đã modify cái màu gốc của nó, (cụ thể là các dim trên lớp part và lớp Dimension) không còn là bylayer nữa.
3/- Mình scale cái bản vẽ mới copy này bằng lệnh ssc mới sửa thì thấy mọi thứ OK. Bạn xem bản vẽ kèm theo đây nhé.
http://www.cadviet.c...s/testscale.dwg
4/- Bạn không đọc kỹ bài post lần hai của mình rồi, đó là đoạn lisp mình bảo bạn phải xóa đi trong cái lisp trước chứ nó có giá trị gì đâu mà bạn load nó trong cad được. Mình sẽ post lại cái lisp mới sửa cho bạn xài thử nhé.
;;;-------------------------------------------------------------
(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 C:SCC( / ss ssd L k e d dtype dt k0 newdtype);;;SCale Constant
(setq
ss (ssget)
ssd (ssget "p" '((0 . "DIMENSION")))
L (ss2ent ss)
)
(command "scale" ss "" pause (setq k (getreal "\nScale factor:")))

(if ssd (progn
(setq
e (ssname ssd 0)
d (entget e)
dtype (cdr (assoc 3 d))

k0 (getvar "dimlfac")
newdtype (strcat dtype "x" (rtos k))
)
(setvar "dimlfac" (/ k0 k))

(setvar "dimdli" (* k (cdr (assoc 43 dt))))
(setvar "dimexe" (* k (cdr (assoc 44 dt))))
(setvar "dimexo" (* k (cdr (assoc 42 dt))))
(setvar "dimasz" (* k (cdr (assoc 41 dt))))
(setvar "dimcen" (* k (cdr (assoc 141 dt))))
(setvar "dimtxt" (* k (cdr (assoc 140 dt))))
(setvar "dimgap" (* k (cdr (assoc 147 dt))))

(if (tblsearch "dimstyle" newdtype)
(command "dimstyle" "r" newdtype)
(command "dimstyle" "s" newdtype)
)
(command "dimstyle" "a" ssd "")
))
(princ)
)
;;;-------------------------------------------------------------
5/- Hàm setq được dùng để xác định giá trị các biến của bạn thôi.
(setq a (entget (car (entsel)))) dịch nôm na là: đặt biến a là giá trị của hàm entget với biến của hàm entget là giá trị của hàm car, còn hàm car thì lại lấy biến là giá trị của hàm entsel tức là hàm dùng để chọn một đối tượng trên màn hình cad.
(setq b (assoc 0 a)) được dịch nôm là: đặt biến b là giá trị của hàm assoc với các tham số là 0 và biến a ở trên.
Để hiểu kỹ về từng hàm có lẽ bạn nên tìm một cuốn tài liệu về lisp để đọc thêm hoặc chịu khó tra từ điển và vọc trong phần Developer Help của Cad sẽ rõ ngay thôi.
Để sử dụng hàm lisp trong cad, rất đơn giản là bạn nhập vào dòng lệnh command của cad đúng những gì bạn vie61ttrong lisp rồi enter là xong.
6/- Bạn nên thận trọng khi xài các dim vì nó có nhiều điều bất thường lắm. Tốt nhất là hãy tôn trọng Cad và đừng tự sửa những thông số trong Dim khi chưa hiểu hết cái sự đỏng đảnh của nó. Thường thì mình cố gắng tạo các Dim style cho từng bản vẽ trước khi dim và giữ nguyên các thuộc tính của nó chứ không mạo hiểm làm dim trước rồi đi sửa từng chú cho nó vừa mắt bạn ạ.
7/- Bạn có thể thử lisp trên với việc chọn từng mảng nhỏ trên bản vẽ của bạn xem nó có vấn đề như bạn đã gặp không nhé. Hy vọng bạn se hài lòng với kết quả.

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

#19 ui_troi_2005

ui_troi_2005

    biết vẽ arc

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

Đã gửi 06 March 2009 - 11:01 PM

Chào bác Phanthanhbinh.

Cái lisp bác mới up lên này nó ko scale như ý muốn của em, mà có thể là em ko dùng đc (em dùng thì nó như cái lisp đầu tiên em up lên). Em đã theo lời bác và chỉnh cái lisp đó đc rồi, lần trước em up bản vẽ đó lên có cả phần mà em đã dùng lệnh SCC đó cho bác xem mà, nhưng nó còn lỗi nhỏ em đã nói lần trước rồi, đó là vị trí của các giá trị ghi kthước nó ko đc hợp lý.

Còn về bản vẽ của em thì thực ra nó là bản vẽ của nước ngoài họ muốn bản vẽ đó ko đc thay đổi nên họ cố tình đổi tất cả.

Em up lisp đó để bác xem, lisp này em dùng thì tốt, chỉ mỗi tội vị trí giá trị kthước nó ko tốt thôi

;;;-------------------------------------------------------------
(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 C:SCC( / ss ssd L k e d dtype dt k0 newdtype);;;SCale Constant
(setq
ss (ssget)
ssd (ssget "p" '((0 . "DIMENSION")))
L (ss2ent ss)
)
(command "scale" ss "" pause (setq k (getreal "\nScale factor:")))
;;;(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 ssd (progn
(setq
e (ssname ssd 0)
d (entget e)
dtype (cdr (assoc 3 d))
dt (tblsearch "dimstyle" dtype)
k0 (cdr (assoc 144 dt))
newdtype (strcat dtype "x" (rtos k))
)
(setvar "dimlfac" (/ k0 k))

(setvar "dimdli" (* k (cdr (assoc 43 dt))))
(setvar "dimexe" (* k (cdr (assoc 44 dt))))
(setvar "dimexo" (* k (cdr (assoc 42 dt))))
(setvar "dimasz" (* k (cdr (assoc 41 dt))))
(setvar "dimcen" (* k (cdr (assoc 141 dt))))
(setvar "dimtxt" (* k (cdr (assoc 140 dt))))
(setvar "dimgap" (* k (cdr (assoc 147 dt))))

(if (tblsearch "dimstyle" newdtype)
(command "dimstyle" "r" newdtype)
(command "dimstyle" "s" newdtype)
)
(command "dimstyle" "a" ssd "")
))
(princ)
)
;;;-------------------------------------------------------------

  • 0
Úi Trời!!!!!!!!!!!!!!!

#20 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 07 March 2009 - 09:56 AM

Chào bác Phanthanhbinh.

Cái lisp bác mới up lên này nó ko scale như ý muốn của em, mà có thể là em ko dùng đc (em dùng thì nó như cái lisp đầu tiên em up lên). Em đã theo lời bác và chỉnh cái lisp đó đc rồi, lần trước em up bản vẽ đó lên có cả phần mà em đã dùng lệnh SCC đó cho bác xem mà, nhưng nó còn lỗi nhỏ em đã nói lần trước rồi, đó là vị trí của các giá trị ghi kthước nó ko đc hợp lý.

Còn về bản vẽ của em thì thực ra nó là bản vẽ của nước ngoài họ muốn bản vẽ đó ko đc thay đổi nên họ cố tình đổi tất cả.

Em up lisp đó để bác xem, lisp này em dùng thì tốt, chỉ mỗi tội vị trí giá trị kthước nó ko tốt thôi

Chào bạn Úi Trời!
Ssg đã thấy topic này từ hôm nó mới mở ra, cả cái lisp SCC nguyên thuỷ cũng là của ssg. Nhưng xin nói thật, mình không thích dạng lisp này lắm, hôm làm cái SCC cũng vì "chiều ý" của bạn nào đó thôi.
Lý do: Ssg luôn luôn ủng hộ cách vẽ theo kích thước thật của đối tượng. Khi cần thể hiện nhiều tỷ lệ trong 1 bản vẽ thì dùng layout. Các thao tác scale hình rồi sửa dim là việc làm không khuyến khích.
Có lẽ mình quá cực đoan chăng? Trên thực tế thì có khi mình không thích nhưng vẫn phải làm, chẳng hạn như phải edit lại bản vẽ có sẵn của ai đó. Họ thiết lập bản vẽ không theo ý mình, lung tung loạn xạ cả lên, trong khi sếp cứ gọi điện "sao lâu thế..."!
Về cái lisp bạn vừa post cuối cùng. Theo nhận định của ssg thì vấn đề vị trí đặt dim, nếu bạn chạy SCC với Scale Factor>1 kết quả sẽ đẹp như bản gốc. Còn nếu Scale Factor < 1 thì... bó tay!
Ssg cũng đã làm việc với nhiều bản vẽ có 2 hệ đơn vị song song Metric và Inch, cũng như phải chuyển đổi qua lại giữa 2 hệ đơn vị này. Nếu bản vẽ gốc họ không "độ chế" dim thì trong quá trình xử lý, ssg không cần bất kỳ một trình lisp nào cả, chỉ dùng thuần các tính năng có sẵn của Acad thôi.
Bạn có thể post lại cho ssg xem bản vẽ gốc (còn "origin", chưa động tay động chân vào) và nêu lại ý muốn thực sự của bạn là gì. Biết đâu ssg sẽ có vài ý gì đó hợp lý hơn chăng...
Chúc bạn hoàn thành tốt công việc!
  • 0