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

Biet ve CAD

Thành viên
  • Số lượng nội dung

    474
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    71

Bài đăng được đăng bởi Biet ve CAD


  1. 40 phút trước, Duong Nhat Duy đã nói:

    Cảm ơn bạn nhé, nhưng vẫn không phải ý mình :((

    Hàm addPageSetup là hàm thêm 1 pagesetup mới.

    Hàm sát với ý mình nhất là hàm SetCurrentPageSetup, ví dụ:

    • cadvietlisp.lsp
      lisp help
    •  
    
    (SetCurrentPageSetup (vla-get-activedocument (vlax-get-acad-object)) "Setup2"

    Hàm này chuyển Page setup về "Setup2", ý mình muốn chuyển về None, mình đã thử đổi số thành None, "", nil nhưng vẫn ko đc :((

    Bạn dùng hàm này nhé:

    Xóa toàn bộ các setup ko muốn ở layout đi ( sau khi xóa setup layout tự mặc định về none)

    ;;; (deleteAllPageSetupsinlist <AcadDocument> <PageSetupName>)
    ;;; (deleteAllPageSetupsinlist (vla-get-activedocument (vlax-get-acad-object)) 
    	'("In mau 1" "In mau 2"))
    (defun deleteAllPageSetupsinlist (doc names)
      (vlax-for pc (vla-get-plotconfigurations doc)
        (if (member (vla-get-name pc) names)
          (vla-delete pc)
        )
      )
    )

    Có thể dùng hàm này để xóa tất cả setup luôn

    ;;; (deleteAllPageSetups <AcadDocument>)
    ;;; (deleteAllPageSetups (vla-get-activedocument (vlax-get-acad-object)))
    (defun deleteAllPageSetups (doc)
      (vlax-for pc (vla-get-plotconfigurations doc)
        (vla-delete pc)
      )
    )

     

    • Vote tăng 1

  2. 1 giờ} trướ}c, haiha90 đã nói:

    chuẩn rồi bác ạ!cảm ơn bác nhiều!với cho em hỏi có thể thêm chức năng chọn các vành khăn có cùng đường kính trong và ngoài giống nhau không hả bác  nghĩa là các hình vành khăn giống nhau ý ạ?

    (defun C:T1( / e ssd x y d d0 d4 d2)
      (sssetfirst nil nil)
      (setq ssd (ssadd)
    	e (car(entsel "\nPick Donut mau:"))
    	)
      (vla-getboundingbox (vlax-ename->vla-object e) 'x 'y)
      (setq d0(distance (vlax-safearray->list x)(vlax-safearray->list y))
    	d2 (cdr (assoc 41 (entget e)))
    	)
    (foreach e (acet-ss-to-list (ssget '((0 . "*POLYLINE")(70 . 1)(42 . 1.0))))
      (vla-getboundingbox (vlax-ename->vla-object e) 'x 'y)
      (setq d(distance (vlax-safearray->list x)(vlax-safearray->list y))
    	d4 (cdr (assoc 41 (entget e)))
    	)
      (if (and (equal d  d0) (equal d2  d4)) (ssadd e ssd) )
      )
      (sssetfirst nil ssd)
      )

    Đây bạn

    • Like 1

  3. 4 phút trước, naturooo đã nói:

    Em thêm vào như đoạn code bên dưới nhưng vẫn phải ấn enter nó mới chạy tiếp được anh ạ!

    • cadvietlisp.lsp
      lisp help
    •  
    
     ......
          (vpsel "W")
          (if (setq ss (ssget (list (cons 0 "INSERT") (cons 2 "DDOC,DDOC1,CD,CD1,CD2,CD3,MC0"))))
          (progn      
          (sssetfirst nil ss)
          (c:BUP)
          )
    

     

    Do lệnh (C:BUP) của bạn chắc có hàm ssget và chọn luôn cái ss kia nên phải enter

    • Like 1

  4. 1 giờ} trướ}c, Doan Nguyen Van đã nói:

    Cái này chỉ kiểm tra được đa tuyến đóng và có object đầu tiên trong đa tuyến là ARC có cung 180 độ 

     

    new block.dwg

    Mục tiêu của mình là đáp ứng đúng đề bài đặt ra, chủ top thấy ok vậy là được rùi ^^. Donut là lwpolylile thì có dxf 42 là 1.0, cái này là quan trọng nhất


  5. 19 phút trước, naturooo đã nói:

    Các bác cho em hỏi đoạn code sau:

    • cadvietlisp.lsp
      lisp help
    •  
    
    (sssetfirst nil (ssget (list (cons 0 "INSERT") (cons 2 "blockname1,blockname2,blockname3"))))

    Nếu vùng chọn không có các block có tên trong list trên thì bỏ qua để thực hiện các lệnh tiếp theo thì bổ sung code như thế nào ạ.

    Em cảm ơn ạ!

    (if (setq ss (ssget (list (cons 0 "INSERT") (cons 2 "blockname1,blockname2,blockname3"))))
    (sssetfirst nil ss)
    )

    đây bạn

    • Vote tăng 1

  6. Do các đối tượng của bạn đã bị gán thuộc tính CONSTRAINTINFER, nên khi rê chuột vào nó xuất hiện, bạn tham khảo lệnh này để biết thêm thông tin

    Bạn gõ lệnh CONSTRAINTINFER đặt về 0 để tắt

    Gõ lệnh DELCONSTRAINT , xong chọn các đối tượng đã bị gán để xóa nó là hết

    • Like 1

  7. 3 giờ trước, Doan Van Ha đã nói:

    2 hình này đều được vẽ trên 2 file đều ở Cad2007 đó mà!

    Các bác ạ, ko lỗi gì đâu ạ ^^

    do thuộc tính region là miền, nên có 2 mặt trái phải

    Với cad 2007 thì mặt trái sẽ ko nhìn thấy, còn cad đời cao thì cho ra màu tối hơn chút so với màu mặt phải ( mặt nhìn thấy )

    các bác dùng lệnh 3dorbit xoay là biết ngay

    • Like 1

  8. Vào lúc 6/5/2020 tại 17:05, hongoanh93 đã nói:

    Hay quá, đúng ý cái em cần, cảm ơn anh trai nhiều nhiều :) hihi

    Mà mạn phép cho em hỏi ngoài lề tí ạ, làm sao để ghi chữ tiếng việt có dấu trong Lisp ạ, mong anh giúp, cảm ơn

    P/s: Một ngày like, Vote không biết mấy lần mà hết Like, Vote được cho anh rồi, thôi để mai anh nhé, thông cảm nha anh, hj

    Bạn tham khảo lisp này nhé

    https://www.cadviet.com/forum/topic/178328-lisp-lưu-tên-các-lệnh-lisp/

     


  9. 17 phút trước, vanlam6408 đã nói:

    hi,không phức tạp thế đâu bác ơi,mà như thế cũng chưa liệt kê được hết các trường hợp tạo ra một hình có dạng hình chữ nhật ,cũng như các hình mà em vẽ không nhất thiết có dạng hình chữ nhật ,nó có thể có 5,6...cạnh,có cung tròn....Nhưng mình không quan tâm đến cách vẽ nó bác ạ,chỉ làm sao xét thấy hình hiện tại là polyline có  điểm đầu và điểm cuối của  đường pline này mà nó trùng nhau thì tô màu vàng cho khỏi sót thôi ạ.

    Mà bác bảo nét cảm ơn là nút vote đấy hả bác?

     

    bạn dùng lệnh OVERKILL trước để lisp chạy hiệu quả hơn nhé

    M2-M3.lsp


  10. Chà chà, đọc đến đây mới biết lý do bạn yêu cầu phân biệt HCN được tạo từ lệnh Rectang, và Pline

    1 = HCN tạo  = Rectang có 4 cạnh, 4 đỉnh, và close

    2 = HCN tạo = Pline - pick 4 điểm, với tùy chọn "C" là tương đương lệnh Rectang

    3 = HCN tạo = Pline - pick 5 điểm, không close

    4 = HCN tạo = Pline - pick 5 điểm, với tùy chọn "C" là có 5 điểm, 5 cạnh, trong đó 1 canh = 0

    Vậy bạn đang cần phân biệt 1,2 với 3 4 đúng ko ?


  11. 9 phút trước, vanlam6408 đã nói:

    bác biet ve cad cảm ơn bác,em làm được rồi ạ.tuy nhiên em chưa hiểu lắm chỗ bác nói nếu nhập vào 4 thì các polyline chữ nhật đều giữ nguyên ,còn lại đều được chuyển,nhưng em thấy nếu nhập vào số cạnh là 4 thì không thấy có điều gì xảy ra bác ạ,nghĩa là tất cả đều giữ nguyên màu như cũ.

    Ngoài ra,nhân đây em muốn nhờ các bác viết giúp thêm em lệnh M3 có chức năng đổi màu vàng các polyline có điểm đầu và điểm cuối trùng nhau được không ạ?Vì với bản vẽ lúc em gửi đi em thường dùng lệnh region hoặc ractang để vẽ đa giác nhưng khi bản vẽ gửi về yêu cầu chỉnh sửa lại có cả các polyline không kín nhưng có điểm đầu và điểm cuối trùng nhau  trông như các polyline kín thật.Thì em muốn các bác giúp em cái lisp này nữa để em thủ sẵn,nếu mà gặp trường hợp này có thể dùng tiếp lisp M3 này để đổi màu chúng luôn.

    Em rất biết ơn các bác ,đặc biệt là bác và các bác Duong Nhat Duy, Doan Nguyen Van đã lưu ý vấn đề của em và trực tiếp nhiệt tình code giúp em ạ!

    Em cũng mới tham gia diễn đàn thì cũng chưa biết rõ về quy định của diễn đàn,bác cho em hỏi trên diễn đàn nếu muốn thể hiện cảm ơn các bác thì có thể nhấn vào nút Like hay chỗ nào ạ?

    1. Do bạn lúc thì polyline, lúc thì là region ( mà bản vẽ chả thấy region đâu ^^) nên bác @duy782006 nói cũng đúng, trước sau phải nhất quản để lisp chạy đúng ý đồ, các bác viết lisp cũng ko phải đoán già đoán non

    2. Nếu lisp chạy ứng ý thì bạn chỉ cần nói cảm ơn thui, để biết là lisp đã chạy đúng ^^

    3. "nhập vào số cạnh là 4 thì không thấy có điều gì xảy ra bác ạ,nghĩa là tất cả đều giữ nguyên màu như cũ" do bản vẽ bạn ko có polyline 4 cạnh ( ko tính HCN )bạn thử vẽ hình chữ nhật và hình vuông rồi nhập là 4 xem

    4. tại sao lại phải là pline kín à bạn , hay là nếu ko phải pline kín thì tự động chuyển qua màu khác, màu đen chẳng hạn ^^


  12. 13 phút trước, vanlam6408 đã nói:

    hi,dạ em cảm ơn bác biet ve cad nhiều  ạ!nhưng không hiểu sao nó vẫn chưa chuyên màu các polyline nào dù nhập số cạnh là bao nhiêu bác ạ.

    Chà chà, ^^, mình chạy trên file bạn vẫn ok mà

    với bản vẽ bạn, bạn cho tất cả sang 1 màu nào đó ( màu blue chẳng hạn ), rồi dùng lisp mình, khi hỏi chọn số cạnh thì nhập 6 chẳng hạn ^^, thì tất cả các polyline có 6 cạnh sẽ chuyển qua màu vàng

    Tương tự các cạnh khác

    nhớ là pline kín đấy nhé

    • Like 1

  13. 17 giờ trước, vanlam6408 đã nói:

    dạ hoàn toàn đúng như anh đã nói ạ....

     

     

    Bạn tải lisp này nhé, sửa trên gợi ý lisp của bạn @Doan Nguyen Van ở trên

    Lisp sẽ chuyển các polyline sang màu vàng theo đúng số cạnh được nhập vào ( polyline kín, cạnh nhập vào > 2)

    Nếu nhập cạnh là 4 thì tất cả các polyline chữ nhật giữ nguyên, còn lại đều được chuyển

    M2.lsp

    • Like 1

  14. 1 giờ} trướ}c, nhimret đã nói:

    xin hỏi mọi người, tôi muốn làm 1 lisp về chuyển layer hiện hành về layer của 1 đối tượng. 

    Trong cad có lệnh -layer --> Set --> chọn đối tượng --> cad chuyển layer về layer đối tượng.

    lisp như sau: 

    
    (defun c:11 (/ ss1) (setq ss1 (ssget)) (command "-layer" "s" "" ss1 ""))

    Không biết lỗi chỗ nào mà lúc thực hiện thì cad báo lỗi, trong khi cũng dòng lisp tương tự thế này đối với các lệnh khác thì lại được

    Nhờ các bác chỉ hộ lỗi sai

    Cám ơn nhiều.

     

    Bạn thử dòng này xem

    (defun c:11 (/ ss1) (setq ss1 (cdr(assoc 8 (entget (car (entsel "select object:")))))) (command "-layer" "S"  ss1 ""))

    • Like 1

  15. 36 phút trước, vanlam6408 đã nói:

    biet ve CAD việc phân biệt được region và rectang không biết cad quản lí thông tin 2 loại đối tượng này có gì khác biệt không chứ em thấy trong thẻ properties với lệnh filters đều không có nên viết lisp phân phân biệt được 2 loại này chắc cũng khó ạ

    Nếu bạn nêu rõ vấn đề là phân biệt rectang và polyline, hay rectang và region thì các bạn sửa lại chút xíu lisp là được, còn lệnh rectang hay pline đều tạo ra đối tượng là polyline, nên ko có cách nào phân biệt được bạn à

×