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

[GIÚP ĐỠ] lisp về dải gạch lát sàn theo hatch

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

Ở đây có ai làm shop hoàn thiện chắc đã từng hatch vùng diện tích theo kích thước viên gạch ( 300x600 hoặc abc*def ) rồi. H mình có ý tưởng là vẽ thêm mạch gạch vào ( mạch gạch là 2mm). Khi hatch chúng ta có thể tùy chỉnh kích thước viên gạch rồi rải đều trong vùng diện tích lát sàn. ( có tùy biến lát chéo và lát vòng cung ). Không biết có cao thủ nào đi qua chỉ điểm được 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

Mình vẫn hay dùng là:

- Dùng hatch User Define

- Chọn Space là khoảng cách giữa 2 mạch gạch (vd 302 hoặc 602)

- Hatch mỗi chiều (dọc ngang) 1 loại hatch

- Chọn hatch origin là điểm bắt đầu (viên lát chuẩn)

  • Like 2

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
13 giờ trước, Nguyen Hoanh đã nói:

Mình vẫn hay dùng là:

- Dùng hatch User Define

- Chọn Space là khoảng cách giữa 2 mạch gạch (vd 302 hoặc 602)

- Hatch mỗi chiều (dọc ngang) 1 loại hatch

- Chọn hatch origin là điểm bắt đầu (viên lát chuẩn)

Mình cũng dùng cách này để hatch mà. nhưng vì mình muốn hatch nó thể hiện cả khoảng cách mạch gạch chứ ko phải để liền 1 nét như cậ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
17 phút trước, Nguyen Hoanh đã nói:

Bạn hatch 2 lần song song nhau, cách nhau (bằng cách chỉnh hatch origin) 2mm.

Mình thử rồi bạn ợi.. làm thế khoảng cách sẽ bị cộng dồn nên ko chính xá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
Vào lúc 2/5/2018 tại 23:57, Nguyen Hoanh đã nói:

Mình chưa hiểu cộng dồn là sao.

 

Bạn thử xem file cad thể hiện ý của mình:

 

viduhatch.dwg

file bản vẽ thể hiện đúng ý tưởng mình luôn mà sao mình ko làm được như  bạn nhỉ ? bạn có thể chỉ giáo mình không ? mình làm nãy h ko được file của bạ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 chất ở đây là có 4 hatch tất cả, nếu gọi góc dưới cùng bên trái của hình là góc 0,0 thì 4 đối tượng Hatch này là:

- Hatch ngang gốc 0,0; khoảng cách 302;

- Hatch dọc gốc 0,0; ; khoảng cách 602;

- Hatch ngang gốc 2,2; khoảng cách 302;

- Hathc dọc gốc 2,2; khoảng cách 602;

 

Bạn làm theo các bước này nhé:

1. Tạo đối tượng Hatch, mẫu hatch User Preference theo phương ngang, khoảng cách là 602, Chọn gốc tọa độ hatch là gốc phía dưới cùng bên trái.

2. Copy đối tượng vừa tạo ra tại đúng vị trí chính nó (bằng lệnh copy, chọn đối tượng, click một điểm bất kỳ, gõ "@" rồi enter)

3. Dùng lệnh Hatch edit để sửa góc thành 90 độ (theo phương dọc), và khoảng cách là 302.

4. Copy 2 đối tượng hatch vừa rồi tại đúng vị trí chính nó.

5. Dùng lệnh Hatch edit để sửa gốc của 2 hatch mới theo gốc 2,2

  • Like 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
13 phút trước, Nguyen Hoanh đã nói:

Bản chất ở đây là có 4 hatch tất cả, nếu gọi góc dưới cùng bên trái của hình là góc 0,0 thì 4 đối tượng Hatch này là:

- Hatch ngang gốc 0,0; khoảng cách 302;

- Hatch dọc gốc 0,0; ; khoảng cách 602;

- Hatch ngang gốc 2,2; khoảng cách 302;

- Hathc dọc gốc 2,2; khoảng cách 602;

 

Bạn làm theo các bước này nhé:

1. Tạo đối tượng Hatch, mẫu hatch User Preference theo phương ngang, khoảng cách là 602, Chọn gốc tọa độ hatch là gốc phía dưới cùng bên trái.

2. Copy đối tượng vừa tạo ra tại đúng vị trí chính nó (bằng lệnh copy, chọn đối tượng, click một điểm bất kỳ, gõ "@" rồi enter)

3. Dùng lệnh Hatch edit để sửa góc thành 90 độ (theo phương dọc), và khoảng cách là 302.

4. Copy 2 đối tượng hatch vừa rồi tại đúng vị trí chính nó.

5. Dùng lệnh Hatch edit để sửa gốc của 2 hatch mới theo gốc 2,2

Mình đã làm được rồi. cảm ơn bạn 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

Bạn nên tạo file hatch G602x302.pat với nội dung như thế này, nhớ Enter để xuống dòng khi type xong:

*G602x302, Op tuong 60x30 mach 2
0, 0,0, 0,302, 600,-2
0, 0,300, 0,302, 600,-2
90, 0,0, 0,602, 300,-2
90, 600,0, 0,602, 300,-2

 

Bạn có thể dễ dàng tạo hatch với nội dung như sau:

- *G602x302: tên hach phải trùng với tên file, sau dấu phẩy là ghi chú

- 90, 600,0, 0,602, 300,-2 có ý nghĩa :

 90, : góc vẽ

 600,0, :  điểm xuất phát

0,602, :  điểm nhắc lại  (hiểu như là ucs đã quay theo góc vẽ )

300,-2 :  chiều dài nét, khoảng hở

 

  • Like 1
  • 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

Nhân tiện cho mình hỏi, có bạn nào có lisp dim mà text thể hiện được ra được số lượng gạch và kích thước gạch không thế? Ví dụ mình có 1 đoạn dài 6030 (mm), kích thước 1 cạnh của viên gạch là 603, khi dim text hiện ra luôn được là 10x603=6030. Edit text với số lượng lớn thì lâu quá.

  • 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
2 giờ trước, quan le đã nói:

Nhân tiện cho mình hỏi, có bạn nào có lisp dim mà text thể hiện được ra được số lượng gạch và kích thước gạch không thế? Ví dụ mình có 1 đoạn dài 6030 (mm), kích thước 1 cạnh của viên gạch là 603, khi dim text hiện ra luôn được là 10x603=6030. Edit text với số lượng lớn thì lâu quá.

Có một cách để đỡ phải gõ lại trong khi chờ phương án khác:

 

Tạo 1 text field: Ax603=

 Trong đó giá trị  A là text field có công thức bên trong bằng giá trị Dim/603

Như trong hình minh họa thì số 50 là text field có công thức bằng giá trị Dim 30194/603 (số 50 được làm tròn)

 

sau khi có text này rồi thì bạn chỉ cần copy đến các vị trí dim cần ghi thêm số lượng gạch, nhấp đúp vào text field rồi gán lại giá trị Dim thành giá trí Dim mới là xong.

 

TT!

image.png

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
3 giờ trước, quan le đã nói:

Nhân tiện cho mình hỏi, có bạn nào có lisp dim mà text thể hiện được ra được số lượng gạch và kích thước gạch không thế? Ví dụ mình có 1 đoạn dài 6030 (mm), kích thước 1 cạnh của viên gạch là 603, khi dim text hiện ra luôn được là 10x603=6030. Edit text với số lượng lớn thì lâu quá.

Bác có thể ghi theo kiểu này hay thay đổi cho phù hợp với mì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
1 giờ trước, conghoa đã nói:

Có một cách để đỡ phải gõ lại trong khi chờ phương án khác:

 

Tạo 1 text field: Ax603=

 Trong đó giá trị  A là text field có công thức bên trong bằng giá trị Dim/603

Như trong hình minh họa thì số 50 là text field có công thức bằng giá trị Dim 30194/603 (số 50 được làm tròn)

 

sau khi có text này rồi thì bạn chỉ cần copy đến các vị trí dim cần ghi thêm số lượng gạch, nhấp đúp vào text field rồi gán lại giá trị Dim thành giá trí Dim mới là xong.

 

TT!

image.png

Cảm ơn bạn! Cách này mình cũng đã thử. Nhưng khối lượng nhiều cũng khá mất, và phải thêm bước chỉnh dim text cho cân đối với line của 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
1 giờ} trướ}c, ngokiet đã nói:

Bác có thể ghi theo kiểu này hay thay đổi cho phù hợp với mình

 

Cảm ơn bạn! Bản vẽ triển khai cho công ty Nhật, nên form này không được rồi bạ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
29 phút trước, quan le đã nói:

Cảm ơn bạn! Bản vẽ triển khai cho công ty Nhật, nên form này không được rồi bạn ạ. 

(defun c:d1 (/ p1 ent str)
 (if (not ct1) (or (setq ct1 (getreal "Nhap khoang chia: <100>")) (setq ct1 100.00)))
  (if (SETQ P1 (GETPOINT "Specify First Point")) (progn						   
  (command "DIMLINEAR" "_NON" p1 pause pause )
  (SETQ ENT (ENTLAST))
  (entmod (subst (cons 1 (strcat (itoa (fix (/ (cdr (assoc 42 (entget ent))) ct1)) ) "x" (rtos ct1 2 0) "=" "<>"))
		 (assoc 1 (entget ent)) (entget ent)))) (progn (setq ct1 nil) (c:d1)))(princ)
      )
(defun c:d2 (/ p1 p2 str)
 (if (not ct2) (or (setq ct2 (getreal "Nhap khoang chia: <100>")) (setq ct2 100.00)))
  (if (SETQ P1 (GETPOINT "Specify First Point")) (progn
(SETQ P2 (GETPOINT p1 "Specify Second Point")) (setq dis (distance p1 p2))
(setq str (strcat (itoa (fix (/ dis ct2))) "x" (rtos ct2 2 0) "=" "<>"))
  (command "DIMALIGNED" "_NON" p1 p2 "T" str pause )
  ) (progn (setq ct2 nil) (c:d2))) (princ)
    )

Viết nhanh cho bạn

  • Like 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
7 phút trước, Doan Nguyen Van đã nói:

(defun c:d1 (/ p1 ent str)
 (if (not ct1) (or (setq ct1 (getreal "Nhap khoang chia: <100>")) (setq ct1 100.00)))
  (if (SETQ P1 (GETPOINT "Specify First Point")) (progn						   
  (command "DIMLINEAR" "_NON" p1 pause pause )
  (SETQ ENT (ENTLAST))
  (entmod (subst (cons 1 (strcat (itoa (fix (/ (cdr (assoc 42 (entget ent))) ct1)) ) "x" (rtos ct1 2 0) "=" "<>"))
		 (assoc 1 (entget ent)) (entget ent)))) (progn (setq ct1 nil) (c:d1)))(princ)
      )
(defun c:d2 (/ p1 p2 str)
 (if (not ct2) (or (setq ct2 (getreal "Nhap khoang chia: <100>")) (setq ct2 100.00)))
  (if (SETQ P1 (GETPOINT "Specify First Point")) (progn
(SETQ P2 (GETPOINT p1 "Specify Second Point")) (setq dis (distance p1 p2))
(setq str (strcat (itoa (fix (/ dis ct2))) "x" (rtos ct2 2 0) "=" "<>"))
  (command "DIMALIGNED" "_NON" p1 p2 "T" str pause )
  ) (progn (setq ct2 nil) (c:d2))) (princ)
    )

Viết nhanh cho bạn

Đúng cái mình cần rồi. Cảm ơn bạn nhiều 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
48 phút trước, Doan Nguyen Van đã nói:

(defun c:d1 (/ p1 ent str)
 (if (not ct1) (or (setq ct1 (getreal "Nhap khoang chia: <100>")) (setq ct1 100.00)))
  (if (SETQ P1 (GETPOINT "Specify First Point")) (progn						   
  (command "DIMLINEAR" "_NON" p1 pause pause )
  (SETQ ENT (ENTLAST))
  (entmod (subst (cons 1 (strcat (itoa (fix (/ (cdr (assoc 42 (entget ent))) ct1)) ) "x" (rtos ct1 2 0) "=" "<>"))
		 (assoc 1 (entget ent)) (entget ent)))) (progn (setq ct1 nil) (c:d1)))(princ)
      )
(defun c:d2 (/ p1 p2 str)
 (if (not ct2) (or (setq ct2 (getreal "Nhap khoang chia: <100>")) (setq ct2 100.00)))
  (if (SETQ P1 (GETPOINT "Specify First Point")) (progn
(SETQ P2 (GETPOINT p1 "Specify Second Point")) (setq dis (distance p1 p2))
(setq str (strcat (itoa (fix (/ dis ct2))) "x" (rtos ct2 2 0) "=" "<>"))
  (command "DIMALIGNED" "_NON" p1 p2 "T" str pause )
  ) (progn (setq ct2 nil) (c:d2))) (princ)
    )

Viết nhanh cho bạn

Lệnh D2 đang bị lỗi về tính số lượng, bạn sửa giúp mình với. 

image.thumb.png.21c4c35254232f431f09e57e185c695a.png

Cảm ơn bạ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
16 phút trước, quan le đã nói:

Lệnh D2 đang bị lỗi về tính số lượng, bạn sửa giúp mình với. 

Cảm ơn bạn.

Có thể do khi ofset ra khoảng cách bị lệch đi 1 khoảng rất nhỏ, dẫn đến kết quả chia bị sai, để khắc phục tạm thời mình sửa như này:

(defun c:d2 (/ p1 p2 ent dis)
 (if (not ct2) (or (setq ct2 (getreal "Nhap khoang chia: <100>")) (setq ct2 100.00)))
  (if (SETQ P1 (GETPOINT "Specify First Point")) (progn
(SETQ P2 (GETPOINT p1 "Specify Second Point")) (setq dis (distance p1 p2))
(setq str (strcat (itoa (fix (+ 0.0001 (/ dis ct2)))) "x" (rtos ct2 2 0) "=" "<>"))
  (command "DIMALIGNED" "_NON" p1 p2 "T" str pause )
  ) (progn (setq ct2 nil) (c:d2))) (princ)
    )

 

  • Like 2

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
1 phút trước, ngokiet đã nói:

Bác dùng (rtos(/ dis ct2) 2 0) dễ. hơn mà. nó tự làm tròn.

Rtos nó sẽ làm tròn lên á bác, dẫn đến có thể sai kết quả ở 1 số trường hợp. VD (khoảng cách 175, khoảng chia 30 => số lượng  = 5.8333 = 6 sai) (điều này có thể thay đổi nếu chủ tus có logic về số lượng gạch theo kiểu khá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
12 phút trước, Doan Nguyen Van đã nói:

Có thể do khi ofset ra khoảng cách bị lệch đi 1 khoảng rất nhỏ, dẫn đến kết quả chia bị sai, để khắc phục tạm thời mình sửa như này:


(defun c:d2 (/ p1 p2 ent dis)
 (if (not ct2) (or (setq ct2 (getreal "Nhap khoang chia: <100>")) (setq ct2 100.00)))
  (if (SETQ P1 (GETPOINT "Specify First Point")) (progn
(SETQ P2 (GETPOINT p1 "Specify Second Point")) (setq dis (distance p1 p2))
(setq str (strcat (itoa (fix (+ 0.0001 (/ dis ct2)))) "x" (rtos ct2 2 0) "=" "<>"))
  (command "DIMALIGNED" "_NON" p1 p2 "T" str pause )
  ) (progn (setq ct2 nil) (c:d2))) (princ)
    )

 

Ngon rồi, cảm ơn bạn nhiều 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
4 phút trước, Doan Nguyen Van đã nói:

Rtos nó sẽ làm tròn lên á bác, dẫn đến có thể sai kết quả ở 1 số trường hợp. VD (khoảng cách 175, khoảng chia 30 => số lượng  = 5.8333 = 6 sai) (điều này có thể thay đổi nếu chủ tus có logic về số lượng gạch theo kiểu khác)

 

Do mình nghĩ trong trường hợp này để ghi kích thước chẳn nên mới góp ý như vậy. Nếu ko chẳn thì kiểu gì cũng sai.

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
1 phút trước, ngokiet đã nói:

Do mình nghĩ trong trường hợp này để ghi kích thước chẳn nên mới góp ý như vậy. Nếu ko chẳn thì kiểu gì cũng sai.

Đúng vậy á bác, tuy nhiên lấy số theo kiểu fix thì đỡ bị nhầm nhọt nhiều hơn, vì nó chỉ làm tròn xuống, còn Rtos lúc thì tròn lên lúc thì tròn xuống nên e bỏ qua

  • Like 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
Vào lúc 11/10/2019 tại 15:50, Doan Nguyen Van đã nói:

Đúng vậy á bác, tuy nhiên lấy số theo kiểu fix thì đỡ bị nhầm nhọt nhiều hơn, vì nó chỉ làm tròn xuống, còn Rtos lúc thì tròn lên lúc thì tròn xuống nên e bỏ qua

Bạn cho mình hỏi khi dùng Lisp chỉ hiện "khoảng cách chia lần đầu" lần sau không hiện khoảng cách chia mà khoảng cách chia là mặc định như lần đầu chọn

Vậy vào đâu để nhập lại khoảng cách chia bạn ơi?

Cám ơn bạ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
Vào lúc 16/5/2018 tại 15:08, cuongtk2 đã nói:

Bạn nên tạo file hatch G602x302.pat với nội dung như thế này, nhớ Enter để xuống dòng khi type xong:

*G602x302, Op tuong 60x30 mach 2
0, 0,0, 0,302, 600,-2
0, 0,300, 0,302, 600,-2
90, 0,0, 0,602, 300,-2
90, 600,0, 0,602, 300,-2

 

Bạn có thể dễ dàng tạo hatch với nội dung như sau:

- *G602x302: tên hach phải trùng với tên file, sau dấu phẩy là ghi chú

- 90, 600,0, 0,602, 300,-2 có ý nghĩa :

 90, : góc vẽ

 600,0, :  điểm xuất phát

0,602, :  điểm nhắc lại  (hiểu như là ucs đã quay theo góc vẽ )

300,-2 :  chiều dài nét, khoảng hở

 

 

Bạn có thể giải thích cho mình ý nghĩa từng dòng được không. Theo mình hiểu thì chỗ bạn giải thích nó là dòng cuối cùng ( của phần bôi đỏ)

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  

×