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

(Góp ý) Chèn Block lên đỉnh PLine

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

20 phút trước, conghoa đã nói:

Các bác căng thẳng quá, phải ươm mầm để phát triển tài năng cho 4r chứ nhỉ :D.

 

Em lạc đề chút: AI giờ cũng phát triển, nên sẽ giúp ích rất nhiều cho các bạn thích lập trình. Các bác có chuyên môn ngó xem AI nó giải thích như này có đúng không nhé :)

 

Chức năng:
Code này tạo một lệnh AutoLISP có tên là IBB dùng để chèn khối (block) vào các điểm được định nghĩa bởi một polyline (đường nét).
Phân tích từng phần:
1.    (defun c:IBB () ... );end: Định nghĩa một lệnh AutoLISP có tên IBB (viết tắt của "Insert Block By Polyline").
2.    (setq modelSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))): Lấy đối tượng ModelSpace (không gian mô hình) của bản vẽ đang hoạt động.
3.    (setq block (car (entsel "\nSeclect block: "))): Yêu cầu người dùng chọn một khối bằng lệnh entsel, sau đó gán giá trị của khối được chọn cho biến block.
4.    (setq bo (vlax-ename->vla-object block)): Chuyển đổi tên khối block (dạng text) thành một đối tượng vla-object (object của Visual LISP Application Extension) và gán cho biến bo.
5.    (setq nameb (vlax-get bo 'EffectiveName)): Lấy tên hiệu quả (tên được sử dụng để chèn) của khối và gán cho biến nameb.
6.    (setq pl (car (entsel "\nSeclect pline: "))): Yêu cầu người dùng chọn một polyline bằng lệnh entsel và gán cho biến pl.
7.    (setq plo (vlax-ename->vla-object pl)): Chuyển đổi tên polyline pl thành đối tượng vla-object và gán cho biến plo.
8.    (repeat (setq n (1+ (fix (vlax-curve-getEndParam plo)))) ... ): Lấy số lượng điểm trên polyline bằng vlax-curve-getEndParam và tạo một danh sách lst chứa tọa độ của các điểm đó.
o    vlax-curve-getEndParam trả về tham số kết thúc của polyline.
o    fix lấy phần nguyên của tham số kết thúc.
o    1+ cộng 1 vào kết quả để tính số lượng điểm.
o    vlax-curve-getPointatparam plo n lấy điểm trên polyline tại tham số n.
o    cons thêm điểm lấy được vào đầu danh sách lst.
9.    (foreach li lst ... );foreach: Duyệt qua từng điểm li trong danh sách lst.
o    (vla-InsertBlock modelSpace (vlax-3d-point li) nameb 1 1 1 0): Chèn khối có tên nameb vào tọa độ của điểm li trong không gian mô hình modelSpace.
    vlax-3d-point li chuyển đổi điểm li thành đối tượng 3D.
    Các tham số 1, 1, 1, 0 là các tham số xoay và tỷ lệ của khối được chèn.
10.    (princ "limfx"): In ra màn hình dòng "limfx". Dòng này có thể được sử dụng để điều chỉnh lại vùng hiển thị của bản vẽ sau khi chèn khối.
Lưu ý:
•    Code này sử dụng các hàm vla- và vlax- để thao tác với đối tượng của Visual LISP Application Extension (VLA).
•    Code này có thể được điều chỉnh để thay đổi số lượng điểm trên polyline, các tham số xoay và tỷ lệ của khối được chèn.
Kết luận:
Code này cho thấy cách sử dụng AutoLISP để tự động chèn khối vào các điểm trên một polyline. Code này rất hữu ích trong việc tối ưu hóa quy trình thiết kế và tiết kiệm thời gian khi làm việc với khối trong AutoCAD.

Ku AI này kinh điển thiệt, nó phân tích rõ ràng, nếu nó ra đời sớm hơn đỡ phải nhọc óc mò lisp

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

@conghoa: cái này khá là hay, ủng hộ bạn lập 1 topic kiểu như "Dùng AI để viết lisp với diễn giải rõ ràng" để ace vào đó comment hay học hỏi (viết ké vào đây thì hơi lạc đề thật)

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

Ku AI này kinh điển thiệt, nó phân tích rõ ràng, nếu nó ra đời sớm hơn đỡ phải nhọc óc mò lisp

nghe nói cad 2025 bản trả phí có AI tích hợp, chắc chưa ngon đâu nhưng vài bản nữa thì không biết được. thời của mấy ông viết code dạo chắc sắp hết. :))

  • 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

(defun c:IBB () ... );end: Định nghĩa một lệnh AutoLISP có tên IBB (viết tắt của "Insert Block By Polyline")

Làm sao mà nó hiểu được cái từ viết tắc của tên lệnh luôn kìa 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

@Doan Van Ha em chỉ tranh thủ để định hướng cho chủ của topic này thôi bác :)

Còn về lisp AI nó đang bị ngu ngu, vì em có thử yêu cầu viết nhưng ko chạy dc. Về Lisp thì em chỉ biết dùng nên nhường chủ đề đó cho các bác chuyên 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
26 phút trước, conghoa đã nói:

em chỉ tranh thủ để định hướng cho chủ của topic này thôi bác :)

Còn về lisp AI nó đang bị ngu ngu, vì em có thử yêu cầu viết nhưng ko chạy dc. Về Lisp thì em chỉ biết dùng nên nhường chủ đề đó cho các bác chuyên môn!

Cảm ơn bác nha, nhờ có bác em mới thông não được các khúc mắc này vì thực sự rất khó để cho 1 pro có thể giải thích cho 1 con gà như em hiểu ra. Em cũng làm như bác có cop lên cho nó giải thích nó còn bảo dùng hàm white cho nó gọn @@, e cop lên cho các bác tham khảo. Em test thử thêm mấy bài toán thì nó làm được luôn :

(defun c:IBB ()
  (setq modelSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
  (setq block (vlax-ename->vla-object (car (entsel "\nSelect block: "))))
  (setq nameb (vlax-get block 'EffectiveName))
  (setq pl (vlax-ename->vla-object (car (entsel "\nSelect pline: "))))
  (setq n (fix (vlax-curve-getEndParam pl)))
  (while (>= n 0)
    (setq pt (vlax-curve-getPointatparam pl n))
    (vla-InsertBlock modelSpace (vlax-3d-point pt) nameb 1 1 1 0)
    (setq n (1- n))
  )
  (princ "limfx")
)

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

nghe nói cad 2025 bản trả phí có AI tích hợp, chắc chưa ngon đâu nhưng vài bản nữa thì không biết được. thời của mấy ông viết code dạo chắc sắp hết. :))

Có thể là nó làm mất việc mấy ông viết code dạo, nhưng còn lâu nó mới viết được những soft đồ sộ với liên kết nhiề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

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

×