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

Hướng dãn code hatch trong lisp

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

Chào các bạn,

MÌnh muốn viết code hatch 1 vùng giới hạn bởi các đoạn thẳng nhưng không biết viết ntn, mong các bạn hướng dẫn giúp! Cám ơn các bạn.

Chương trình của mình đại ý như sau:

Quote

  (entmakex (list (cons 0 "LINE") (cons 10 P1) (cons 11 P2)))
  (entmakex (list (cons 0 "LINE") (cons 10 P2) (cons 11 P3)))
  (entmakex (list (cons 0 "LINE") (cons 10 P3) (cons 11 P4)))
  (entmakex (list (cons 0 "LINE") (cons 10 P4) (cons 11 P1)))

 

;;; Code hatch vùng được tạo bởi 4 line (hoặc pline) trên.

 

 

  • 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, nguyenkienAgr đã nói:

Chào các bạn,

MÌnh muốn viết code hatch 1 vùng giới hạn bởi các đoạn thẳng nhưng không biết viết ntn, mong các bạn hướng dẫn giúp! Cám ơn các bạn.

 Chương trình của mình đại ý như sau:

 

Có 3 cách hatch.

Cách 1: đơn giản nhất là dùng (command "Bhatch"  "s" ss "")

Cách 2 Dùng objectArx

(vla-AddHatch Object PatternType  PatternName  Associativity  HatchObjectType )

Cách 3 dùng entmake (khó vler)

Bạn phải kiểm soát cực kỳ tốt các mã dxf cho các loop

91 số lượng loop

92 biểu thị loop là giới hạn trong hay ngoài của hatch

93 biểu thị số lượng edge trong loop

72 73 dành cho các đoạn pline, line, arc theo đúng trình tự

Sau đó còn cần kiểm soát cấu hình của hatch mỗi loại hatch cần 1 cấu hình khác nhau (giống như linetype mệt ẻ)

Và entmake. 

 

 

  • 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

 

6 giờ trước, tannguyen291 đã nói:

Có 3 cách hatch.

Cách 1: đơn giản nhất là dùng (command "Bhatch"  "s" ss "")

Cách 2 Dùng objectArx

(vla-AddHatch Object PatternType  PatternName  Associativity  HatchObjectType )

Cách 3 dùng entmake (khó vler)

Bạn phải kiểm soát cực kỳ tốt các mã dxf cho các loop

91 số lượng loop

92 biểu thị loop là giới hạn trong hay ngoài của hatch

93 biểu thị số lượng edge trong loop

72 73 dành cho các đoạn pline, line, arc theo đúng trình tự

Sau đó còn cần kiểm soát cấu hình của hatch mỗi loại hatch cần 1 cấu hình khác nhau (giống như linetype mệt ẻ)

Và entmake. 

 

 

Cám ơn bạn đã chỉ dẫn. Nhưng thực sự mình chỉ biết ít về lisp thôi. Bạn có thể cho 1 ví dụ về 1 trong 3 cách trên giúp mình được không? 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í dụ cách 1 cho dễ :))

(setq lst

   (list  (entmakex (list (cons 0 "LINE") (cons 10 P1) (cons 11 P2)))
        (entmakex (list (cons 0 "LINE") (cons 10 P2) (cons 11 P3)))
        (entmakex (list (cons 0 "LINE") (cons 10 P3) (cons 11 P4)))
        (entmakex (list (cons 0 "LINE") (cons 10 P4) (cons 11 P1)))

    )

)

(foreach item in lst

    (setq ss (ssadd item ss))

)

(command "bhatch" "s" ss "")

 

  • 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 10/8/2023 tại 11:34, nguyenkienAgr đã nói:

Chào các bạn,

MÌnh muốn viết code hatch 1 vùng giới hạn bởi các đoạn thẳng nhưng không biết viết ntn, mong các bạn hướng dẫn giúp! Cám ơn các bạn.

Chương trình của mình đại ý như sau:

 

Sao bạn không tận dụng hàm boundary có vẻ đơn giản hơn để tạo đường bao. Sau đó Hatch:  (vla-setPattern obj acHatchPatternTypePreDefined pattern)

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

Ví dụ cách 1 cho dễ :))

(setq lst

   (list  (entmakex (list (cons 0 "LINE") (cons 10 P1) (cons 11 P2)))
        (entmakex (list (cons 0 "LINE") (cons 10 P2) (cons 11 P3)))
        (entmakex (list (cons 0 "LINE") (cons 10 P3) (cons 11 P4)))
        (entmakex (list (cons 0 "LINE") (cons 10 P4) (cons 11 P1)))

    )

)

(foreach item in lst

    (setq ss (ssadd item ss))

)

(command "bhatch" "s" ss "")

 

 

Từ gợi ý của bạn mình đã làm được. Cám ơn bạn rất nhiều!

 

Quote

(defun C:ZZ ()
  (setq    P1 (list 0 0)
    P2 (list 0 100)
    P3 (list 100 100)
    P4 (list 100 0)
    P5 (list 50 50)
  ) ;_ E_of_setq
  (setq    LST (list (entmakex (list (cons 0 "LINE") (cons 10 P1) (cons 11 P2)))          
          (entmakex (list (cons 0 "LINE") (cons 10 P2) (cons 11 P3)))
          (entmakex (list (cons 0 "LINE") (cons 10 P3) (cons 11 P4)))
          (entmakex (list (cons 0 "LINE") (cons 10 P4) (cons 11 P1)))
        ) ;_ E_of_list
  ) ;_ E_of_setq
  (setq SS (ssadd))
  (foreach ITEM LST 
    (ssadd ITEM SS)
  ) ;_ E_of_foreach
  (setvar "HPNAME" "SOLID")
  (command "bhatch" "s" SS "" "")
) ;_ E_of_defun

 

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

Sao bạn không tận dụng hàm boundary có vẻ đơn giản hơn để tạo đường bao. Sau đó Hatch:  (vla-setPattern obj acHatchPatternTypePreDefined pattern)

Mình ko thạo các lệnh vla- bạn ạ, nhưng mình sẽ lưu lại để ng cứu. 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

Chào các bạn,

Vẫn phải nhờ các bạn giúp vụ hatch này:

- Lisp dưới đây chỉ chạy đúng khi gọi lệnh lần thứ 2 trở đi, lần thứ 1 luôn báo lỗi "Valid hatch boundary not found."

(defun C:xx ()
  (setq	LST (list
	      (command ".pline" (list 0 0) (list 100 100) (list 100 250) (list 0 300) (list 0 100) "")
	      (entmakex (list (cons 0 "LINE") (cons 10 (list 0 150)) (cons 11 (list 300 150))))	       
	      (entmakex (list (cons 0 "LINE") (cons 10 (list 0 200)) (cons 11 (list 300 200))))
	      (entmakex (list (cons 0 "LINE") (cons 10 (list 200 300)) (cons 11 (list 200 0))))
	    ) ;_ E_of_list
  ) ;_ E_of_setq

  (setvar "HPNAME" "SOLID")
  (command "_.boundary" (list 150 180) "")
  (command "bhatch" (list 150 180) "")

) ;_ E_of_defun

Mình không hiểu lỗi do đâu? Nhờ các bạn sửa giúp, cám ơn các 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 tìm trên cadviet hàm tạo pline từ tập hợp các tọa độ. Tạo xong pline thì hatch chọn đối tượng last là xong.

  • 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 14/8/2023 tại 10:02, duy782006 đã nói:

Bạn tìm trên cadviet hàm tạo pline từ tập hợp các tọa độ. Tạo xong pline thì hatch chọn đối tượng last là xong.

 

Cám ơn bạn gợi ý. Để mình tìm thử xem.

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 15/8/2023 tại 15:28, limfx đã nói:

Mình chưa biết đối tượng bạn định hatch là gì?

Là các vùng kín tạo bởi các line và polyline 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

Mình nghĩ rằng bạn nên mua sách học lại từ đầu về ngôn ngữ lập trình 

Đừng học mẹo kiểu vậy. Không ai muốn dạy kiểu nửa mùa như vậy đâu bạn à.

(defun C:xx ()
  (setq	LST (list ;;;; tạo cái lst này để làm gì
	      (command ".pline" (list 0 0) (list 100 100) (list 100 250) (list 0 300) (list 0 100) "") ;;; đây là cái gì tại sao đưa vào lst
	      (entmakex (list (cons 0 "LINE") (cons 10 (list 0 150)) (cons 11 (list 300 150))))	       
	      (entmakex (list (cons 0 "LINE") (cons 10 (list 0 200)) (cons 11 (list 300 200))))
	      (entmakex (list (cons 0 "LINE") (cons 10 (list 200 300)) (cons 11 (list 200 0))))
	    ) ;_ E_of_list
  ) ;_ E_of_setq

  (setvar "HPNAME" "SOLID")
  (command "_.boundary" (list 150 180) "") ;;;; boundary này để làm gì
  (command "bhatch" (list 150 180) "") ;;; cad có đang viewport vào khu vực này không ???? lệnh bhatch này có đợi boundary không hay là chạy cùng lúc.

) ;_ E_of_defun

 

  • 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

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  

×