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

vietduc147258

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

    196
  • Đã tham gia

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

  • Ngày trúng

    20

Bài đăng được đăng bởi vietduc147258


  1. 3 giờ trước, DNcouples đã nói:

    lúc đầu mình dùng đc lisp trên, nhưng 1 hồi nó tự nhảy về layer khác, ko theo layer mình set.
    mình load lại lisp thì nó báo lỗi như vậy, reset máy các kiểu vẫn bị.

    thử load lisp mới của bạn vẫn bị :(

    Thử các lisp sau.

    Layer direct của leemac. Hoặc lisp trong bài viết này

    • Like 1

  2. 4 giờ trước, DNcouples đã nói:

    bạn ơi mình dùng thì nó báo lỗi thế này ko biết xử lý ntn, cảm ơn bạn:
     error: no function definition: SETVAR\ \ \

    Thấy lisp không có gì sai cả. mà không hiểu sao báo lỗi này luôn.

    nếu cad mới thử coi có lệnh DIMLAYER. nếu có thì khỏi cần đến lisp này.

    không thì thử cái này:

    (defun c:DL ( / old *error* msg)
     (defun *error*(msg)
        (princ "Error: ") (princ msg) 
         (setvar 'clayer old) (princ))

        (setq old (getvar 'clayer))
        (setvar 'clayer "DIM")
        (command "_dimlinear")
        (while (= 1 (logand 1 (getvar 'cmdactive)))
            (command "\\")
        )
        (setvar 'clayer old)
        (princ)
    )

    • Like 1

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

    Bên trên mình có ghi rõ là dùng Lisp Replace Block chứ ko phải công cụ có sẵn.

    Bạn đọc để tham khảo :)

     

    Giai thich lisp Rename Block - Leemac.doc

    Cám ơn bạn đã nhiệt tình giúp đỡ.

    Giải thích lisp rất rõ ràng. Nhưng sửa được lisp thì phải học hỏi nhiều nữa.

    Thay vì sửa chắc sẽ kết hợp 1 lisp chọn Block cùng tên - > Rename Block - Leemac -> Replace Block sẽ dễ hơn

    • Like 1

  4. 2 giờ trước, limfx đã nói:

    Bạn thử thêm vòng lặp foreach vào  lisp cụ LeeMac sau khi ssget quét chọn vùng  để coppy và đổi tên từng đối tượng si!

    Thank! Ước gì có thể hiểu được lisp của Lee mac. Để tìm hiểu thử foreach xem sao. Chưa học cái đó.

    1 giờ trước, conghoa đã nói:

    Có một cách đơn giản hơn một chút mà ko cần copy qua lại. 

    - Dùng lisp của Leemac để đổi tên 1 block trong nhóm Block2

    - Dùng thêm 1 lisp Replace Blocks (thay để block đã đổi tên cho các block còn lại của nhóm Block2)

     

    :D

    Thank! Chức năng Replace Block trong Express nó thay thế toàn bộ luôn, chứ không thay riêng 1 vùng được. Với lại không hỗ trợ pick chọn Block động nữa.

    Nhờ gợi ý thì có kiếm được cái lisp này dùng đỡ.

    https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/find-and-replace-group-of-blocks-that-are-selected/m-p/4333482#M313227


  5. Các bác trong diễn đàn cho mình hỏi chút. Là có cách nào để phân biệt được DiametricDimension với AlignedDimension trong lisp để áp dụng cho trường hợp thêm ký tự Ø như trên không? Vì lấy cái assoc 100 nó toàn ra (100 . "AcDbDimension") như nhau thôi. Nên nếu để thêm chữ Ø vào thì khi Dim cho đường tròn sẽ bị thừa kí tự Ø


  6. Xin chào các anh chị, các bạn trong diễn đàn. Tôi có 1 vấn đề nhờ mọi người trong diễn đàn giúp.

    Đó là đổi tên 1 nhóm Block cùng tên được quét chọn mà vẫn giữ lại tên của Block của vùng không được chọn.

    Bình thường tôi muốn đổi tên 1 Block như thế thì dùng lisp của lee-mac https://www.lee-mac.com/copyblock.html.

    Nhưng Lisp này chỉ đổi được tên 1 Block thôi. Tại Block của nhóm sau có cách bố trí và hình dạng gần giống Block trước (tầng 1, tầng 2, hay phương án 1, phương án 2...).

    Bình thường tôi sẽ copy nhóm Block muốn đồi tên sang file cad trống rồi đổi tên. Sau đó copy lại về sửa.

    Cách này hơi bất tiện chút nên bạn nào có cách khác tốt hơn chỉ giúp tôi với.

    Xin cám ơn!

    image.png.5a1dbea54c290469119766ef17ffbf38.png


  7. Cái trị số dung sai trong lisp này đâu có đúng. Với lại chỉ hỗ trợ Đk dưới 80.

    Dùng lisp của bác @Doan Van Ha hỗ trợ tới 400. Nhưng có nhược điểm là Dim hình tròn sẽ bị dư thêm chữ Ø

    Sửa lại lisp bạn gửi rồi. 

    Nhưng giữ nguyên lỗi ban đầu là khi Dim đường thẳng sẽ không có chữ Ø

     

    (defun c:hh7(/ ob num n chk entl dimtol ds)
    	(princ "\\n  Chon Dim  : ")(princ)
    	(setq ob (ssget (list (cons 0 "DIMENSION") )))
    	(setq num (sslength ob))
    	(setq n 0)
    	(while (ssname ob n)
    	(setq chk (ssname ob n))
    	(setq ent1 (entget chk))
    	(setq dimtol (cdr (assoc 42 ent1)))
    	(setq chk (cdr (assoc 1 ent1)))
    					(cond
    						((<= dimtol 3) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.001^0;}") )
    						((<= dimtol 6) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.012^0;}") )
    						((<= dimtol 10) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.015^ 0;}") )
    						((<= dimtol 18) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.018^ 0;}") )
    						((<= dimtol 30) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.021^ 0;}") )
    						((<= dimtol 50) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.025^ 0;}") )
    						((<= dimtol 80) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.003^ 0;}") )
    						((<= dimtol 120) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.035^ 0;}") )
    						((<= dimtol 180) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.04^ 0;}") )
    						((<= dimtol 250) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.046^ 0;}") )
    						((<= dimtol 315) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.052^ 0;}") )
    						((<= dimtol 400) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.057^ 0;}") )
    						((<= dimtol 450) (setq ds   "<>{}{\\H0.71x;\\C92;\\S+0.063^ 0;}") )					
    						(princ "Done")(princ)
    					)
    		
    (entmod (subst (cons 1 ds) (assoc 1 ent1) ent1))(princ)
    (setq n (1+ n))
    )
    )

     


  8. Vào lúc 27/5/2024 tại 21:15, NgocCham03 đã nói:

    Con chào các cô các chú trong nhóm, con đang muốn vẽ tâm đường tròn theo điểm point. kích thước đường tròn thì theo text có số sẵn trong bản vẽ
    Cho con hỏi là có cách nào vẽ nhanh hơn không. Con đang vẽ lệnh C thủ công ạ 

     

     

    Nhờ giúp đỡ mà không nói rõ gì cả. Rốt cuộc là vẽ đường tròn theo text màu đỏ hay text màu xanh. Nhìn qua thì tưởng text màu đỏ. Nhưng mò đến vùng dữ liệu thì mới biết là nằm trong text màu xanh. Đưa cả Cad với PDF nhưng cuối cùng cũng không hiểu gì luôn á

    • Vote tăng 1

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

    Chắc cũng còn lâu nữa. Doanh nghiệp lớn thì có thể, doanh nghiệp nhỏ thì chưa chắc. Có chiêu là cấp laptop cho nhân viên. Khi kiểm tra thì là máy tính cá nhân thôi chứ không phải máy của doanh nghiệp. 

    Với tình hình kinh tế như hiện tại thì việc dùng phần mềm lậu còn dài dài.

    Việt Nam mình có Vinacad mới ra. Không biết đã ai trải nghiệm chưa. Cái này theo hướng xây dựng nên cơ khí như mình không thử 

    https://vina-cad.com/


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

    Mình cũng thấy thế, nên cách tạo block hợp với yêu cầu mà lại nhanh thì nên dùng cách này:

    1. Chọn đối tượng cần làm Block rồi: Ctrl + C 

    2. Ctrl + Shift + V

    3. Chèn vào vị trí cần :)

    Cách này nhanh nhất. 

    Nhược điểm là mặc dù tên tạo ra ngẫu nhiên nhưng vẫn bị trùng tên khi copy sang block khác.

    Cái tên nhìn không được cảm tình cho lắm.

    Nhưng được cái tên nó gom về 1 chỗ cũng tiện. Khi Rename chọn A&C* là được cả đám rồi.

    Lisp này nguyên bản thì tên là Newblock+ rất đễ trùng tên. Lấy tên file thì hạn chế bớt nhưng tên block lại dài quá..

    Nói chũng cũng khó hoàn hảo lắm


  11. Chủ đề này vậy mà kéo dài quá. Cái này là tạo Block tự động. Hay dùng cho các block không quan trọng lắm. Ngay cả cái tên còn không quan trọng thì lo gì đến điểm chèn.

    Nếu một block quan trọng thì sẽ làm thủ công rồi. Lúc đó thì mới xét xem điểm chèn ở đâu là phù hợp.

    Tôi không dùng lisp này, chỉ góp ý chút vậy thôi.


  12. 2 giờ trước, mr.thanh2610 đã nói:

    Cảm ơn bài viết, mình có thể nhờ bạn chỉnh sửa tự tạo block điểm chèn tự động tại tâm của Block không ạ, không cần pick điểm, cảm ơn

    Làm sao xác định được tâm của những đối tượng đã chọn. Thậm chí còn chưa nói đến khái nệm đó. Tâm của một polyline khép kín thì có. Với lại thêm 1 cái pick chuột không mất thời gian lắm đâu


  13. Vào lúc 20/12/2017 tại 11:13, Danh Cong đã nói:

    Kết hợp lisp  theo  cách đổi trục và vẽ hình chữ nhật:

     

    (defun c:test2 ()
    (command "cmdecho" 0)
        (defun *Error* (msg)
        (command "ucs" "p")
        (princ msg))
      (prompt "\nChon 2 diem theo huong ve HCN: ")
      (command "ucs" pause pause "")

      (prompt "\nVe HCN:")
      (command "rectang" pause pause)
      (command "ucs" "p")
      (princ))

    ý tưởng đơn giản mà hay. Nhưng hơi cảm thấy hụt hẫng vì pick xong 2 điểm rồi mà chưa thấy hcn đâu cả.

    Có sửa lại chút tận dụng điểm pick thứ nhất.

    (defun c:test2 ()
    (command "cmdecho" 0)
        (defun *Error* (msg)
        (command "ucs" "p")
        (princ msg))
      (prompt "\nChon 2 diem theo huong ve HCN: ")
      (command "ucs" pause pause "")

      (prompt "\nVe HCN:")
      (command "rectang" "0,0" pause)
      (command "ucs" "p")
      (princ))

     

    Cái lisp này hình như có bẫy lỗi rồi nhưng khi thoát ra giữa chừng vẫn không về lại UCS cũ được. Do mới tìm hiểu về lisp nên không biết khắc phục lỗi này


  14. Vào lúc 20/12/2017 tại 09:15, kienxd04 đã nói:

    Xin chào các bạn

    Hiện tại công việc của mình là phải vẽ hình chữ nhật rồi phải xoay hình chữ nhật theo phương ý muốn (vì mặt bằng cần xoay nhiều hướng) nên mình cần sự giúp đỡ của các bạn viết lisp vẽ hình chữ nhật rồi nó tự xoay theo phương bất kỳ (giống như ve hình chữ nhật trong sketchup vậy)

    Rất mong sự giúp đỡ của các bạn rành về lisp

    Xin cảm ơn.

    Thử cái này nhé. Suy nghĩ đơn giản thôi nên viết đơn giản vậy thôi. 

    Nhược điểm là chiều dài, chiều rộng của HCN phụ thuộc vào điểm thứ 3 thôi. 

    (defun c:cnn (/ pt1 pt2)
        (setq    pt1    (getpoint "\nChon diem dau:"))
        (setq    pt2    (getpoint pt1 "\nChon goc nghieng:"))
    (command "_.rectang" pt1 "R" pt2 Pause)
    (command "_.rectang" "0,0" "R" 0 \)
    )

    • Like 1

  15. Thử cái này:

     

    (defun c:QB (/ selectionset insertionpoint number Blockname)
      ;;; Tharwat 11. May. 2012 ;;
      (if (and (setq selectionset (ssget "_:L"))
               (setq insertionpoint (getpoint "\n Specify insertion point :"))
          )
        (progn
          (setq bname (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4)))
          (setq number    1
                Blockname (strcat bname (itoa number))
          )
          (while (tblsearch "BLOCK" Blockname)
            (setq Blockname
                   (strcat bname (itoa (setq number (1+ number))))
            )
          )
          (command "_.-Block" Blockname insertionpoint selectionset "")
          (command "_.-insert" Blockname insertionpoint "" "" "")
        )
        (princ)
      )
      (princ)
    )

    • Like 1
    • Vote tăng 1
×