Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
ui_troi_2005

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

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

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.

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

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

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

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

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

 

1-1.jpg

Bản vẽ với tỉ lệ 1/25.4

2-1.jpg

3-1.jpg

4-1.jpg

 

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

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 ơ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.com/forum/index.php?sho...=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

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

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)

)

;;;-------------------------------------------------------------

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

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ể!

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

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

 

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.

  • Vote tăng 3

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

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.

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

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

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

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

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

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
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.com/file/90101346/b21cf...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.

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
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.com/file/90101346/b21cf...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.com/upfiles/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.

  • 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

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

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

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

Chào bạn Ui_troi_2005,

Rất cảm ơn bạn đã test cai lisp mình gửi. Nhờ đó mình đã phát hiện ra chỗ chưa đúng của nó.

Thực ra đây là cái lisp cũ mà mình chỉ thay đổi cái cách lấy biến hệ thống dimlfac thôi. Nhưng cái sai là ở chỗ lisp ban đầu lấy dimlfac của chình cái dim được lựa chọn, cò lisp cải tiến lại đi lấy cái dimlfac hiện hành của bản vẽ. Mà trên bản vẽ của bạn lại có nhiều dimstyle với các dimlfac khác nhau bạn ạ. Do đó nếu như cái dim bạn chọn có dimstyle trùng với dimstyle hiện hành thì OK nhưng nếu không phải vậy thì có vấn đề. Vậy nên túm lại là mình định cải tiến lisp cho gọn nhưng hóa ra cải lùi vì mình chưa hiểu đúng mục đích của bác SSG khi lấy dimlfac bằng cái cách của bác ấy.

Rất mong bạn thông cảm vì trình độ của mình chưa đầy đủ.

Về vị trí đặt dim thì quả thật đúng như bác SSg đã nói, mình cũng thấy nó hơi khó vì khi thử nó thấy được (xem hình mình đã post gửi bạn với tỷ lệ scale là 0.5) nhưng chả hiểu vì sao khi bạn làm nó lại thành như vậy.

Có lẽ bác ssg đã ra tay thì gạo sẽ xay thành cám thôi bạn ạ. Mình cũng sẽ tìm hiểu thêm và nếu thấy gì mới sẽ post lên để cùng trao đổi. Hiện tại mình vẫn chưa có giải pháp cho vấn đề này.

Chào bạn và chúc bạn vui.

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

 

Chào bác ssg, rất vui mừng khi đc bác cùng tham gia topic này.

Nói về lisp thì em không biết nhiều, chỉ biết dùng. Cái lisp em cũng không biết nó tốt xấu đến đâu, nhưng em thấy nó hợp với công việc của mình hiện tại, có thể nó không tốt ở phần nào đó nhưng trong công việc thì cũng phải sử dụng vì hiện tại nó hiệu quả nhất.

Thực ra ai vẽ cad cũng vậy thôi bác ạ, đều thích vẽ với kthước thật với tỉ lệ 1:1, nhưng trong công việc không thể thích là được và buộc người tkế phái linh hoạt.

Còn về bản vẽ thì em đã up ở trên rồi http://www.4shared.com/file/90101346/b21cf...676_tl_1-4.html, và đã ghi rõ trong đó BV gốc, đó là bản vẽ họ gửi cho mình, họ đã thay đổi lungtung hết nên mình phải chỉnh sửa lại theo vật mẫu và gửi lại cho họ duyệt được thì tiến hành SX. Còn các BV khác là do mình TK theo vật mẫu nên trước khi ghi các kthước mình SC trước với tỉ lệ 10/254 và đặt chế độ hiển thị cả Mét và Inch rồi mới tiến hành ghi kthước.

 

Mong các bác chỉ giáo thêm.

 

Em xin chân thành cảm ơn, chúc mọi nguời luôn vui với công việ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
Chào bác ssg, rất vui mừng khi đc bác cùng tham gia topic này.

Nói về lisp thì em không biết nhiều, chỉ biết dùng. Cái lisp em cũng không biết nó tốt xấu đến đâu, nhưng em thấy nó hợp với công việc của mình hiện tại, có thể nó không tốt ở phần nào đó nhưng trong công việc thì cũng phải sử dụng vì hiện tại nó hiệu quả nhất.

Thực ra ai vẽ cad cũng vậy thôi bác ạ, đều thích vẽ với kthước thật với tỉ lệ 1:1, nhưng trong công việc không thể thích là được và buộc người tkế phái linh hoạt.

Còn về bản vẽ thì em đã up ở trên rồi http://www.4shared.com/file/90101346/b21cf...676_tl_1-4.html, và đã ghi rõ trong đó BV gốc, đó là bản vẽ họ gửi cho mình, họ đã thay đổi lungtung hết nên mình phải chỉnh sửa lại theo vật mẫu và gửi lại cho họ duyệt được thì tiến hành SX. Còn các BV khác là do mình TK theo vật mẫu nên trước khi ghi các kthước mình SC trước với tỉ lệ 10/254 và đặt chế độ hiển thị cả Mét và Inch rồi mới tiến hành ghi kthước.

 

Mong các bác chỉ giáo thêm.

 

Em xin chân thành cảm ơn, chúc mọi nguời luôn vui với công việc.

Xin lỗi vì ssg không nói rõ nên bạn chưa hiểu hết ý. Cái ssg cần là file *.dwg nguyên thuỷ của người ta gởi, bạn chưa hề làm bất cứ thao tác gì trên nó. File *.dwg với cái gọi là "bản vẽ" khác nhau nhiều lắm. Khi nói đến "bản vẽ", người ta thường có xu hướng cho rằng chỉ là tập hợp các hình vẽ, đường nét, kích thước... đang hiển thị. Nhưng với file *.dwg thì ngoài những cái nhìn thấy bằng mắt, nó còn ẩn chứa bên trong nhiều thứ khác nữa, chẳng hạn như các thiết lập dimstyle, textstyle, units... Những cái "vô hình" đó rất quan trọng đối với lập trình.

Phiền bạn post lại nhé. Bạn có thể dùng ngay tính năng upload của CadViet, không cần dùng 4shared.

Ngoài ra, ssg xin hỏi thêm một chút, kết quả mà bạn gởi lại cho người ta duyệt là bản in trên giấy hay bắt buộc phải là file *.dwg?

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
Xin lỗi vì ssg không nói rõ nên bạn chưa hiểu hết ý. Cái ssg cần là file *.dwg nguyên thuỷ của người ta gởi, bạn chưa hề làm bất cứ thao tác gì trên nó. File *.dwg với cái gọi là "bản vẽ" khác nhau nhiều lắm. Khi nói đến "bản vẽ", người ta thường có xu hướng cho rằng chỉ là tập hợp các hình vẽ, đường nét, kích thước... đang hiển thị. Nhưng với file *.dwg thì ngoài những cái nhìn thấy bằng mắt, nó còn ẩn chứa bên trong nhiều thứ khác nữa, chẳng hạn như các thiết lập dimstyle, textstyle, units... Những cái "vô hình" đó rất quan trọng đối với lập trình.

Phiền bạn post lại nhé. Bạn có thể dùng ngay tính năng upload của CadViet, không cần dùng 4shared.

Ngoài ra, ssg xin hỏi thêm một chút, kết quả mà bạn gởi lại cho người ta duyệt là bản in trên giấy hay bắt buộc phải là file *.dwg?

 

Chào bác SSG.

 

Em up file lên bác ktra giúp và có gì xin bác hãy báo cho em được biết thêm.

http://www.cadviet.com/upfiles/5013676_SH3.dwg

Em xin cảm ơ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
Chào bác SSG.

 

Em up file lên bác ktra giúp và có gì xin bác hãy báo cho em được biết thêm.

http://www.cadviet.com/upfiles/5013676_SH3.dwg

Em xin cảm ơn.

Bạn dùng tạm lisp này xem thử có ổn không.

Lưu ý: mỗi lần chạy lệnh SCC, các đối tượng được chọn phải có cùng 1 kiểu dimstyle

 

;;;-------------------------------------------------------------
(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 upd_dim( ssd)
(setq
   e (ssname ssd 0)
   d (entget e)
   dtype (cdr (assoc 3 d))
   dt (tblsearch "dimstyle" dtype)
   k0 (cdr (assoc 144 dt))
   ks (cdr (assoc 40 dt))
   newdtype (strcat dtype "x" (rtos k))
)
(command "dimstyle" "r" dtype)
(setvar "dimlfac" (/ k0 k))
(setvar "dimscale" (* ks k))
(if (tblsearch "dimstyle" newdtype)
   (command "dimstyle" "r" newdtype)
   (command "dimstyle" "s" newdtype)
)
(command "dimstyle" "a" ssd "")
)
;;;-------------------------------------------------------------
(defun C:SCC( / ss ssd L p k ks e d dtype dt k0 newdtype)
(setq
   ss (ssget)
   ssd (ssget "p" '((0 . "DIMENSION")))
   L (ss2ent ss)
   p (getpoint "\nDiem chuan:")
   k (getreal "\nScale factor:")
)
(if (> k 1)
   (progn (command "scale" ss "" p k) (if ssd (upd_dim ssd)))
   (progn (if ssd (upd_dim ssd)) (command "scale" ss "" p k))
)
(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

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  

×