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

Bee

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

    553
  • Đã tham gia

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

  • Ngày trúng

    37

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


  1. 33 phút trước, Nguyễn Hà Huy đã nói:

    bác hiểu sai vấn đề rồi, trong seting đó chỉ tắt cái cung đấy thôi có đổi độ thành số của DIMANGULAR đâu, lisp của bác @tannguyen291 đang giúp em chuyển dim DIMARC sang DIMANGULAR, nhưng do dim DIMARC em phải cắt nhỏ cung ra để dim mất thời gian lên đang muốn các bác giúp loại dim DIMANGULAR nó có hỗ trợ DIMCONTINUE khi dim nó thuận tiện hơn

    Thay text dim thì ko còn update đc, edit dim là tối kỵ trong vẽ bản vẽ. Một khi khối lượng bản vẽ tăng lên và scale bản vẽ dim vẫn y nguyên thì rất khó kiểm soát hồ sơ. Nói chung là chỉ đẹp mà để lại hậu họa khôn lường. 

     

    ^_^

     


  2.  

    18 giờ trước, Nguyễn Hà Huy đã nói:

    Cho em hỏi cách đổi dim DIMANGULAR từ độ thành số hoặc viết giúp em lisp gán kết quả của DIMARC vào text của DIMANGULAR để em dim bản vẽ kèm theo bên dưới ạ. Cảm ơn mọi người đã quan tâm!

    Kien truc - Truong mam non Lien Phuong - demo.dwg

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

    Nhìn cái DIMARC cứ xấu xấu k đẹp bằng DIMANGULAR thật.

    LISP đổi dimarc thành dimangular và face giá trị bằng chiều dài cong.

    
    (defun c:RAL (/ ss i lst modelSpace txt obj dimsty layer )
      (setq 
        ss (ssget '((0 . "ARC_DIMENSION")))
        doc (vla-get-ActiveDocument (vlax-get-acad-object))
        modelSpace (vla-get-ModelSpace doc)
      )
      (repeat (setq i (sslength ss))
        (setq 
          i (1- i) 
          lst (entget (ssname ss i))
          dimsty (tblobjname "DIMSTYLE" (cdr (assoc 3 lst)))
          layer (cdr (assoc 8 lst))
        )
        (setvar "CLAYER" layer)
        (vla-put-activedimstyle doc (vlax-ename->vla-object dimsty))
        (setq
          txt (rtos (cdr (assoc 42 lst)) 2 (getvar "DIMDEC"))
          lst (list (cdr (assoc 15 lst)) (cdr (assoc 13 lst)) (cdr (assoc 14 lst)) (cdr (assoc 10 lst)))
          lst (cons modelSpace (mapcar 'vlax-3d-point lst))
          obj (entget (vlax-vla-object->ename (apply 'vla-adddim3pointangular lst)))
          obj (subst (cons 1 txt) (assoc 1 obj) obj)
        )
        (entmod obj)
        (entdel (ssname ss i))
      )
      (princ)
    )

     

     

    Gì mà cực lisp làm gì. Trong setting có đặt mà.  DIMSTYLE/ Symbols and Arrows/ Arc length symbol/ NONE

     

    ^_^

    • Vote tăng 1

  3. Vào lúc 7/3/2023 tại 08:58, KhuongPMDC đã nói:

     

    Mình tạo tài khoản để cảm ơn những suy nghĩ của bạn. 

     

     

    Có gì đâu bác.

    Em thấy mọi chuyện đều có cách giải quyết hợp lý.

    Chẳng qua họ chưa nghĩ thấu đáo nên muốn trao đổi cho thông suy nghĩ.

    Ko đủ chi phí mua đứt thì có thể thuê theo ngày, tháng, năm hoặc theo số lần để chi phí thấp hơn. Vẫn dùng được hợp lý mà chi phí cũng hợp lý. Chẳng qua họ ko đặt vấn đề thẳng thắn chỉ muốn "ăn không" của người khác nên cứ phải nói thẳng thôi.

     


  4. 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

  5. 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

  6. 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 đỏ. ^_^


  7. 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

  8. 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

  9. 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.

     


  10. 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)
      )

     


  11. 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

  12. 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.


  13. 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
×