Chuyển đến nội dung
Diễn đàn CADViet
utmap

[Đã xong] lisp Hatch (gạch, bê tông, kính) - hay

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

Cũng phải tìm cách nào để tính diện tích và xử lý tách nó ra chứ nhỉ. Mình thử "nắm" cạnh của nó ở chỗ trùng đỉnh kéo ra thì đc một hatch bình thường, tuy nhiên nó đã khác tọa độ chu vi và diện tích.

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ẫn dùng -HATCHEDIT, chọn recreate Boundary => polyline

explode polyline

hatch với các đối tượng đã explode (với HPSEPARATE=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

Kiểm tra DXF 71.

Cũng chưa chính xác lắm đâu bác. Đối với những Hatch tính đc DT thường thì nó =1.

Mình gặp TH Hatch ban đầu kg tính dc DT =0, dxf 71 =0. Nhưng khi nắm cạnh cái hatch này (vị trí trùng đỉnh) kéo ra nó sẽ tính đc diện tích nhưng code 71 vẫn =0

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

Thế thì lên đời tí:

(vlax-get-property (vlax-ename->vla-object (car (entsel))) 'AssociativeHatch)

:vlax-true nếu Associative

:vlax-false nếu non-Associative

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

Thế thì lên đời tí:

(vlax-get-property (vlax-ename->vla-object (car (entsel))) 'AssociativeHatch)

:vlax-true nếu Associative

:vlax-false nếu non-Associative

Vẫn vậy bác ơi. Cả 2 TH đều tra về vlax-false nhưng trong đó 1 cái có diện tích: http://www.cadviet.com/upfiles/4/37170_vd5_1.dwg

:vlax-false là trị kiểu gì vậy bác. Nếu muốn từ nó trả về  T hay nil thì làm sao

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ôi đang nói tới Associative hay không. Còn việc có S hay không thì bạn dùng của ndtnv ở bên kia mà kiểm tra. Bạn có thể gởi file mà kiểm tra nó tốn time lên xem thử.

  • 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

Trước đây mình ít phải đụng tới hatch, nay mới cần. Có 1 số hatch kg hiểu sao kg có diện tích, mình kg rõ nguyên nhân, mỗi lần đề cập tới có bạn lại nói đén non-Associative thì chịu, làm mình cứ nghĩ việc thiếu đg bao làm "mất" diện tích, thì ra kg phải như vậy. Cám ơn, do mình mất tập trung làm mất thời gian 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

Nếu DXF 97 = 0 thì chắc chắn là không có diện tích, Hatch có thể đươc tạo từ Boundary hở :)

Vẫn chưa đúng. Kiểm tra trên bản vẽ của TNM gởi lên: 2 hatch đều not_assoc và đều có dxf97=0 nhưng 1 em có S và 1 em không.

  • 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

DXF 73 không liên quan tới diện tích.

Kéo 1 node của hatch không có diện tích => DXF 73 = nil nhưng vẫn không có diện tích

  • 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

Lạ thật! Hatch "Solid" rõ ràng là ko tạo được từ Boundary hở nên DXF 73 = 1 và dĩ nhiên có DT (diện tích). Mà tạo Hatch bằng "ansi31"  từ Boundary hở thì DXF 73 = 0 và không có diện tích :wacko: .

Ko hiểu sao bản vẽ của TRUNGNGAMY lại có DXF 73 = 1 và không có DT ;  DXF 73 = 0 thì lại có DT. (DXF 97 = 0 chỉ cho biết là không có  đối tượng Boundary gốc)

Potay!

 
  • Vote tăng 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

Đã biết nguyên nhân có DT và không có DT khi Hatch "Solid" nhưng ko hiểu tại sao lại như thế :unsure: . Post bản vẽ các bạn tìm hiểu có cao kiến giải đáp dùm :D

http://www.cadviet.com/upfiles/4/127397_37170_vd5_2.dwg

  • 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

Ut sử dụng thử code sau :

 

(defun c:hb(/ ans ten sc ang dt)

(setvar "cmdecho" 0)

(initget "B G K")

(setq ans (getkword "\n Chon kieu hatch < B/G/K > :"))

(WHILE (setq dt (car(entsel "\n Chon doi tuong kin de hatch :")))

(if (= ans "B")

(progn

(setq ten "AR-CONC" sc 20.0 ang 0.0

ten2 "ANSI32" sc2 200.0 ang 0.0)

(lh dt ten sc ang)

(lh dt ten2 sc2 ang)

)

)

(if (= ans "G")

(progn

(setq ten "ANSI31" sc 400.0 ang 0.0)

(lh dt ten sc ang)

)

)

(if (= ans "K")

(progn

(setq ten "AR-RROOF" sc 500.0 ang 45.0)

(lh dt ten sc ang)

)

)

);WHILE

(princ)

)

(defun lh(dt name tle goc)

(if (vlax-curve-isClosed dt)

(progn

(vl-cmdf "hatch" "P" name tle goc "S" dt "")

)

(alert "\n Doi tuong khong kin")

 

);if

)

Bạn ơi: nếu mình muốn click vào một điểm trong vùng cần hatch rồi hatch chứ ko phải chọn vùng khép kín thì code như thế nào ?

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 20/5/2010 tại 14:40, Tue_NV đã nói:

Út sử dụng lại code sau :

Khi Khoang cach diem dau va cuoi cua doi tuong không vuot qua 5000

thì Lisp sẽ tự động hatch cho mình :

 

(defun c:hb(/ ans ten sc ang dt)

(setvar "cmdecho" 0)

(initget "B G K")

(setq ans (getkword "\n Chon kieu hatch :"))

(WHILE (setq dt (car(entsel "\n Chon doi tuong kin de hatch :")))

(if (= ans "B")

(progn

(setq ten "AR-CONC" sc 20.0 ang 0.0

ten2 "ANSI32" sc2 200.0 ang 0.0)

(lh dt ten sc ang)

(lh dt ten2 sc2 ang)

)

)

(if (= ans "G")

(progn

(setq ten "ANSI31" sc 400.0 ang 0.0)

(lh dt ten sc ang)

)

)

(if (= ans "K")

(progn

(setq ten "AR-RROOF" sc 500.0 ang 45.0)

(lh dt ten sc ang)

)

)

);WHILE

(princ)

)

(defun lh(dt name tle goc)

(setvar "hpgaptol" 5000.0)

(if (or (vlax-curve-isClosed dt)

(

(vlax-curve-getendpoint dt)

) (getvar "hpgaptol")

)

)

(progn

(vl-cmdf "hatch" "P" name tle goc "S" dt "")

)

(alert "\n Khoang cach diem dau va cuoi cua doi tuong vuot qua 5000")

);if

)

add sửa lại lisp dùm em để khi sử dung lisp hacth các vùng hacth được nối lại với nhau như khi sử dung lệnh hacth!

Untitled.png

CAD MAU 007.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

(defun c:hb(/ p dt ans ten sc ang dt)

(setvar "cmdecho" 0)

(if (not (tblsearch "LAYER" "I-Wall-hatch")) (vl-cmdf "layer" "n" "I-Wall-hatch" "C" "8" "I-Wall-hatch" "") )

(if (not (tblsearch "LAYER" "I-Fur-hatch")) (vl-cmdf "layer" "n" "I-Fur-hatch" "C" "9" "I-Fur-hatch" "") )

(initget "B G K")

(setq ans (getkword "\n Chon kieu hatch < B/G/K > :"))

(initget "P S")

(setq ansp (getkword "\n Chon kieu pick diem hay chon doi tuong < P/S > :"))

(setq p nil dt t)

;(WHILE (or (not p) (not dt)) (if (= ans "B")

(progn

(setq ten "AR-CONC" sc 20.0 ang 0.0 ten2 "ANSI32" sc2 200.0 ang 0.0)

(if (= ansp "P")

(progn

(while (setq p (getpoint "\n Chon 1 diem trong vung can hatch :"))

(if (lh1 p ten sc ang) (doi "I-Wall-hatch") ) (if (lh1 p ten2 sc2 ang) (doi "I-Wall-hatch")

)

)

)

(progn (princ "\n Chon doi tuong can hatch :")

(while (setq dt (ssget) ) (if (lh dt ten sc ang) (doi "I-Wall-hatch") )

(if (lh dt ten2 sc2 ang) (doi "I-Wall-hatch")

)

)

)

)

)

)

(if (= ans "G") (progn (setq ten "ANSI31" sc 400.0 ang 0.0)

(if (= ansp "P")

(progn (while (setq p (getpoint "\n Chon 1 diem trong vung can hatch :"))

(if (lh1 p ten sc ang) (doi "I-Wall-hatch")

)

)

)

(progn (princ "\n Chon doi tuong can hatch :") (while (setq dt (ssget) )

(if (lh dt ten sc ang) (doi "I-Wall-hatch")

)

)

)

)

)

)

(if (= ans "K") (progn (setq ten "AR-RROOF" sc 500.0 ang 45.0)

(if (= ansp "P")

(progn (while (setq p (getpoint "\n Chon 1 diem trong vung can hatch :"))

(if (lh1 p ten sc ang) (doi "I-Fur-hatch")

)

)

) (progn

(princ "\n Chon doi tuong can hatch :") (while (setq dt (ssget) )

(if (lh dt ten sc ang) (doi "I-Fur-hatch") ) ) ) ) ) )

;);WHILE (princ) )

;;;;;;;; (defun lh1(p name tle goc) ;(setvar "hpgaptol" 50.0) (vl-cmdf "bhatch" "P" name tle goc p "") )

;;;;;;;;;; (defun lh(dt name tle goc) ;(setvar "hpgaptol" 50.0) (vl-cmdf "bhatch" "P" name tle goc "S" dt "" "") )

(defun doi(la) (vl-cmdf "change" "L" "" "P" "LA" la "")

Lips của các bạn rất hay nhưng mình có góp ý 1 xíu các bạn có thể thay đổi thêm đc ko?

- Khi mình lựa chọn "Chọn 1 điểm trong vùng muốn hatch" là lips nó hatch luôn.

Cho nên mình muốn chọn nhiều điểm trong các vùng đối tượng khác nhau xong thì nó mới hatch, giống như mình thực hiện lệnh -Hatch vậy đó.

các bạn có thể bổ sung thêm đc ko ah?

  • 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 2/11/2019 tại 16:25, CaptainBlack đã nói:

(defun c:hb(/ p dt ans ten sc ang dt)

(setvar "cmdecho" 0)

(if (not (tblsearch "LAYER" "I-Wall-hatch")) (vl-cmdf "layer" "n" "I-Wall-hatch" "C" "8" "I-Wall-hatch" "") )

(if (not (tblsearch "LAYER" "I-Fur-hatch")) (vl-cmdf "layer" "n" "I-Fur-hatch" "C" "9" "I-Fur-hatch" "") )

(initget "B G K")

(setq ans (getkword "\n Chon kieu hatch < B/G/K > :"))

(initget "P S")

(setq ansp (getkword "\n Chon kieu pick diem hay chon doi tuong < P/S > :"))

(setq p nil dt t)

;(WHILE (or (not p) (not dt)) (if (= ans "B")

(progn

(setq ten "AR-CONC" sc 20.0 ang 0.0 ten2 "ANSI32" sc2 200.0 ang 0.0)

(if (= ansp "P")

(progn

(while (setq p (getpoint "\n Chon 1 diem trong vung can hatch :"))

(if (lh1 p ten sc ang) (doi "I-Wall-hatch") ) (if (lh1 p ten2 sc2 ang) (doi "I-Wall-hatch")

)

)

)

(progn (princ "\n Chon doi tuong can hatch :")

(while (setq dt (ssget) ) (if (lh dt ten sc ang) (doi "I-Wall-hatch") )

(if (lh dt ten2 sc2 ang) (doi "I-Wall-hatch")

)

)

)

)

)

)

(if (= ans "G") (progn (setq ten "ANSI31" sc 400.0 ang 0.0)

(if (= ansp "P")

(progn (while (setq p (getpoint "\n Chon 1 diem trong vung can hatch :"))

(if (lh1 p ten sc ang) (doi "I-Wall-hatch")

)

)

)

(progn (princ "\n Chon doi tuong can hatch :") (while (setq dt (ssget) )

(if (lh dt ten sc ang) (doi "I-Wall-hatch")

)

)

)

)

)

)

(if (= ans "K") (progn (setq ten "AR-RROOF" sc 500.0 ang 45.0)

(if (= ansp "P")

(progn (while (setq p (getpoint "\n Chon 1 diem trong vung can hatch :"))

(if (lh1 p ten sc ang) (doi "I-Fur-hatch")

)

)

) (progn

(princ "\n Chon doi tuong can hatch :") (while (setq dt (ssget) )

(if (lh dt ten sc ang) (doi "I-Fur-hatch") ) ) ) ) ) )

;);WHILE (princ) )

;;;;;;;; (defun lh1(p name tle goc) ;(setvar "hpgaptol" 50.0) (vl-cmdf "bhatch" "P" name tle goc p "") )

;;;;;;;;;; (defun lh(dt name tle goc) ;(setvar "hpgaptol" 50.0) (vl-cmdf "bhatch" "P" name tle goc "S" dt "" "") )

(defun doi(la) (vl-cmdf "change" "L" "" "P" "LA" la "")

Lips của các bạn rất hay nhưng mình có góp ý 1 xíu các bạn có thể thay đổi thêm đc ko?

- Khi mình lựa chọn "Chọn 1 điểm trong vùng muốn hatch" là lips nó hatch luôn.

Cho nên mình muốn chọn nhiều điểm trong các vùng đối tượng khác nhau xong thì nó mới hatch, giống như mình thực hiện lệnh -Hatch vậy đó.

các bạn có thể bổ sung thêm đc ko ah?

Mình cũng muons ý đồ giống bạn này, mong các bạn sửa giúp chỉ cần pick bình thườ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

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

×