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

Bee

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

    546
  • Đã tham gia

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

  • Ngày trúng

    37

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


  1. 55 phút trước, tavantoan12 đã nói:

    Bác đang hiểu nhầm từ " NGANG " của em rồi. Em muốn nói là góc xoay của cái Mleader nó không khớp với cái ucs hiện hành. Không liên quan gì ortho đâu ạ

    121.png

    Đã hiểu.

    Chủ thớt chỉ cần thay dòng là chuyển tọa độ center Circle chẵn bên WCS sang UCS rồi vẽ mleader theo điểm này là xong.

    (command "mleader" "h" p1 pause 0 (strcat "T" (rtos n 2 0)))

    bằng

    (command "mleader" "h" (trans p1 0 1) pause 0 (strcat "T" (rtos n 2 0)))

    • Vote tăng 1

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

    May quá bác bắt đầu hiểu ý em rồi, cám ơn bác đã kiên nhẫn.

    Với câu hỏi của bác thì: Do tính chất công việc em buộc phải làm tròn tọa độ ở wcs , làm tròn của em là từ số thứ 4 sau dấu phẩy sẽ đưa nó về 0 chính về thế mới có dòng (setq p1 (list (atof (rtos (car p) 2 3)) (atof (rtos (cadr p) 2 3)) 0)) này đó bác, không phải làm tròn kiểu luprec đâu ( cái này chỉ về mặt hiển thị thôi chứ bản chất nó không làm tròn)

    Theo video của bác, nếu bác đưa về wcs , để luprec 7 thì tọa độ của bác sẽ không có dạng xx,xxx0000 (đây là điều em muốn)

    Mình chỉnh 1 chút chủ thớt test nhé.

    (defun c:dt  (/ p p1 center n clayer osmode)
      (setvar "cmdecho" 0)
      (setq clayer (getvar "clayer")
            osmode (getvar "osmode")
            )
      (setvar "ORTHOMODE" 1)
    ;;;  (command "ucs" "w")
      (command "clayer" "8 ???")
      (command "cmleaderstyle" "1")
      (prompt "\n Ch?n v? trí di?m T ")
      (setq n 0)
      (while
        (setq p (getpoint))
         (setq n (1+ n))
         (setq p1 (list (atof (rtos (car p) 2 3)) (atof (rtos (cadr p) 2 3)) 0))
         (setvar "osmode" 0)
         (command "circle" p1 0.05)
         (command "line" (polar p1 0 0.05) (polar p1 pi 0.05) "")
         (command "rotate" "l" "" p1 "c" 90 "")
     ;(command "ucs" "p")
         (command "mleader" "h" p1 pause 0 (strcat "T" (rtos n 2 0)))
         (setvar "osmode" osmode)
         )
    ;;;  (command "ucs" "p")
      (command "clayer" clayer)
      (princ)
      )

     

    • Vote tăng 1

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

    Như tiêu đề, mình đang có một khung tên được scale không theo một tỷ lệ nào.

    Giờ mình muốn đưa chúng vừa khít với viewport bên layout (đã thiết lập khổ A3) thì phải làm thế nào?
    Ai biết xin chỉ giúp với.
    Mình xin cảm ơn


     

    ảnh.png

    Chui vào vport, gõ lệnh zoom window, bắt end point 2 điểm chéo nhau rectang màu đỏ là sẽ zoom đúng rectang đỏ. ^_^


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

    Bác Bee xem điểm T1 em đang tọa sẽ rõ: điểm đó sau khi đưa về UCS world thì nó đang được làm tròn 3 số sau dấu phẩy, nhưng sau khí ucs nó sẽ ko đc làm làm ( đó làm điều em muốn)

    Bài toán cần giải là làm cho cái Mleader ngang ra sau khi ucs ý

    Không hiểu lắm ý 1 là sau 3 dấu phẩy.

    Ý 2 là Mleader ngang thì chỉ cần bật ortho là ngang mà:

    https://uphinh.org/image/9JBPbl

    • Vote tăng 1

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

    Chào các bác, em có tự tạo được 1 lisp theo nhưng vẫn còn 1 điểm chưa ưng ý nghĩ mãi không ra. Nhờ các cao thủ giúp đỡ ạ

    - Bản vẽ của em được trình bày theo đường ucs trong file dwg em đính kèm.

    - Em muốn tạo 1 leader và vòng tròn tại các point màu vàng ( ví trí điểm đặt của leader và tâm vòng trong là tọa độ sau khi làm tròn lấy 3 số sau dấu phẩy và ở ucs world)

    ***** Vấn đề của em là sau sau khi tạo leader thì nó lại tạo ở tọa độ world nên nó bị nghiêng, em muốn nó được tạo theo đường ucs của mình.

    Bên dưới là lisp của em

     

    (defun c:DT (/ p p1 center n clayer osmode)

      (setvar "cmdecho" 0)

      (setq clayer (getvar "clayer")

            osmode (getvar "osmode")

      )

      (command "ucs" "w")

      (command "clayer" "8 平面図")

      (command "cmleaderstyle" "引き出し線1")

      (prompt "\n Chọn vị trí điểm T ")

      (setq n 0)

      (while 

        (setq p (getpoint))

        (setq n (1+ n))

        (setq p1 (list (atof (rtos (car p) 2 3)) (atof (rtos (cadr p) 2 3)) 0))

        (setvar "osmode" 0)

        (command "circle" p1 0.05)

        (command "line" (polar p1 0 0.05) (polar p1 pi 0.05) "")

        (command "rotate" "l" "" p1 "c" 90 "")

        ;(command "ucs" "p")

        (command "mleader" "h" p1 pause 0 (strcat "T" (rtos n 2 0)))

        (setvar "osmode" osmode)

      

      

      )

      (command "ucs" "p")

      (command "clayer" clayer)

      (princ)

      

      

    ) 

    HELP.dwg

    Không biết đúng ý chủ thớt ko nhỉ. Nếu đúng thì khi thao tác vẫn ở trong ucs thì thao tác bình thường với chế độ ortho là off và bỏ dòng  (command "ucs" "w") là đc mà nhỉ ! ^_^

    test1.gif

    • Vote tăng 1

  6. 3 giờ trước, emhoccad đã nói:

    E làm phiền bác lần cuối,  mong bác trợ giúp

    Vẫn là xử lý bock đó giờ em muốn thay đổi thêm phần chiều dài các đoạn có màu xanh đó.

    Có 2 điểm là giao nhau và điểm tự do,

    bên nào tự do thì kéo dài hoặc ngắn điểm đó để tổng chiều dài cả đoạn là 150mm.

     

    image.thumb.png.953b10ec0f34d79f03ba33d893fca66b.png

    Block mau+doi chieu dai.dwg

    Nếu chỉ còn 1 block thì chỉnh tay sẽ nhanh hơn viết lisp. Nếu muốn tổng quát hơn thì gửi bản vẽ cụ thể vì có rất nhiều trường hợp khác xảy ra. Viết xong block này lại phát sinh cái khác thì nó vô cùng lắm. Sẽ phải làm vài cái vòng lặp 1 line màu 4 với các đối tượng còn lại line màu xanh 3 chứ không còn đơn giản như thay màu nữa đâu chủ thớt nhé. Nếu muốn nhiều hơn nữa thì có thể inbox mình.

     


  7. 26 phút trước, emhoccad đã nói:

    Có duy nhất cái Block này viền ngoài màu Green nó có layer "Outline" ko đổi sang được Layer màu trắng bác ah. 

     

    Bác giúp e sửa lisp cứ màu xanh là chuyển hết sang layer "0" nhé

     

    image.png.e9442684f43627011592652109a2c961.png

    Block mau.dwg

    Đổi về Layer 0 thì nó lại theo màu layer 4.

    (defun c:test  (/ ss e blk doc)
      (setq doc (vla-get-activedocument (vlax-get-acad-object)))
      (if
        (setq ss (ssget ":L" '((0 . "INSERT"))))
         (repeat (setq i (sslength ss))
           (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
           (setq blk (vla-item (vla-get-blocks doc) (vla-get-effectivename e)))
           (vlax-for x  blk
             (cond
               ((= (vlax-get x 'layer) "2")
                (vla-put-layer x "4")
                )
               ((= (vlax-get x 'layer) "3")
                (vla-put-layer x "7")
                )
               ((= (vlax-get x 'Color) 3)
                (vla-put-color x 256)
                (vla-put-layer x "0")
                )           
               )         
             )
           )
         )
      (vla-regen doc acallviewports)
      (princ)
      )

     


  8. 7 giờ trước, emhoccad đã nói:

    E đang có rất nhiều Bloc cần đổi màu đối tượng bên trong nó.

    cần lisp đổi các màu như sau:

    - màu xanh --> trắng

    - màu vàng--> màu xanh nước biển

    Sau khi đổi xong Block (Cad ko cho đổi tên giống nhau trong cùng bản vẽ) vẫn giữ được tên như cũ, ảnh minh họa và file bản vẽ tham khảo

     

     

     

    E cảm ơn các bác ah.

     

     

    ảnh.png

    doimaublock.dwg

    Hàng về chủ thớt test nhé. ^_^

    (defun c:test  (/ ss e blk doc)
      (setq doc (vla-get-activedocument (vlax-get-acad-object)))
      (if
        (setq ss (ssget ":L" '((0 . "INSERT"))))
         (repeat (setq i (sslength ss))
           (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
           (setq blk (vla-item (vla-get-blocks doc) (vla-get-effectivename e)))
           (vlax-for x  blk
             (cond
               ((= (vlax-get x 'layer) "2")
                (vla-put-layer x "4")
                )
               ((= (vlax-get x 'layer) "3")
                (vla-put-layer x "7")
                )
               
               )         
             )
           )
         )
      (vla-regen doc acallviewports)
      (princ)
      )

     

    • Like 1

  9. Vào lúc 28/6/2021 tại 00:57, Huyminer đã nói:

    Chào mọi người!

    Hiện giờ mình đang viết 1 đoạn mã VBA phục vụ công việc.

    Mình gặp vấn đề sắp xếp thứ tự các điểm ngẫu nhiên

    có hình minh họa phía dưới

    Mình đang sắp xếp bằng phương pháp x+y và xếp từ lớn tới nhỏ nhưng không được như ý lắm

    Mọi người có thể giúp mình sắp xếp, đánh số các điểm theo tứ tự từ trên xuống dưới, phải qua trái được không?

    Mình xếp như kia đoạn đầu đoạn cuối, nhưng khúc giữa lại bị lỗi

    Xin cảm ơn!

    Untitled.png

    Chủ thớt có thể thử cách xoay UCS, trans point sang UCS, sort theo UCS.


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

    Cho bạn cái này, của tác giả trong lisp. Tên lệnh Taborder.

    Bác Hạ dạo này vướng Covid nên hơi khó ở chút xíu. Toàn vào cmt dạng này. Hí hí. ^_^

    Nhiều nhóc mới lớn còn chưa biết gì sao biết đc nên đối với họ cứ cho qua đi bác Hạ.

    Ngứa mắt gãi hết sao đc. ^_^

    • Like 1
    • Vote giảm 1

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

    Mình cảm ơn bạn Bee nhiều, mình rất mừng. Bạn Bee gửi mình số TK, mình mời bạn ly cafe như đã hẹn ước.

    Sẵn bạn xem dùm mình vì sao sau khi tạo được Block, mình dùng lệnh LAYISO thì nó biến đâu mất tiêu, bạn giúp luôn phần này. Cảm ơn bạn

    Chủ thớt add zalo mình nhé: 0397100480


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

    Việc Block  block attribute thì mình cũng đang sử dụng, copy ra và sửa Text, nhưng mình gặp khó khăn nên mới nhờ giúp đỡ và nó không vô lý, vì mình

    đang cần nó. Bạn Bee hiểu dùm. Và ở đây mình không sửa Text

    Test cho chủ thớt. Creat block.rar

    Nếu đúng ý thì inbox mình cốc cafe  (theo trend)

     

    ^_^

    • Like 1

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

    Cảm ơn bạn Doan Van Ha góp ý. Có thể bạn chưa hiểu ý của mình. mình chỉ lấy ví dụ để thực hiện cho 3 cái điển hình, nhưng áp dụng thực tế thì số lượng sẽ nhiều hơn, mình thì không rành nên mới hỏi và nhờ giúp đỡ, ở đây mình không đề cập đến block  attribute, chỉ nhờ giúp đóng nó lại thành Block thôi và điểm Point của Block này nằm ở tâm của đường tròn. Nếu bạn có khả năng thì giúp mình công việc này. 

     

     

    Thực tế chẳng ai làm công tác trục này mà mỗi trục 1 block như vậy.

    1 là để nguyên text thế còn chỉnh sửa.

    2 là block attribute để còn chỉnh sửa (chỉ tạo block 1 lần còn lại copy ra chỉnh)

    Mọi người đều viết đc lisp cho chủ thớt nhưng nó vô lý nên ko muốn viết thôi. Nhiều khi trao đổi rõ ràng về cách vẽ trong CAD có khi nhanh hơn ngồi viết lisp. 

×