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

Nguyễn Hà Huy

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

    160
  • Đã tham gia

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

  • Ngày trúng

    18

Bài đăng được đăng bởi Nguyễn Hà Huy


  1. Vào lúc 18/3/2023 tại 15:05, tannguyen291 đã nói:

    Không phải chỉ đơn giản là tắt cái symbols mà là nhìn hình thức dimarc với dimangular nó khác nhau. nhìn dimangular rất đẹp. nên mình cũng muốn giúp.

    MÌnh viết cho bạn 1 cái lệnh DIM. DLA

    Đầu tiên chọn ARC trước.

    sau đó pick điểm 1 điểm 2 (dim ngược chiều kim đồng hồ nhé)

    pick vị trí chèn text dim

    sau đó các điểm 3 4 5 ... sẽ giống lệnh dimcontinue.

    dùng thử xem oke không.

    
    (defun c:DLA (/ asin arc p1 p2 p3 ent modelSpace txt)
      (defun asin (sine) (atan sine (sqrt (- 1 (expt sine 2)))))
      (setq 
        modelSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
        arc (entget (car (entsel "\nSelect Arc")))
        arc (list (cdr (assoc 10 arc)) (cdr (assoc 40 arc)))
        p1 (getpoint "\nStart Dim")
      )
      (while (setq p2 (getpoint p1 "\nDim continue"))
        (if p3
          (setq p3 (polar (car arc) (angle (car arc) (mapcar '(lambda (a b) (/ (+ a b) 2)) p1 p2)) (distance p3 (car arc))))
          (setq p3 (getpoint (mapcar '(lambda (a b) (/ (+ a b) 2)) p1 p2) "\nText Dim"))
        )
        (setq 
          txt (* (cadr arc) 2 (asin (/ (distance p1 p2) 2 (cadr arc))))
          txt (rtos txt 2 (getvar "DIMDEC"))
          ent (vla-adddim3pointangular modelSpace (vlax-3d-point (car arc)) (vlax-3d-point p1) (vlax-3d-point p2) (vlax-3d-point p3))
          ent (entget (vlax-vla-object->ename ent))
          ent (subst (cons 1 txt ) (assoc 1 ent) ent)
          p1 p2
        )
        (entmod ent)
      )
      (princ)
    )

    giphy.gif

    lisp chạy quá ngon luôn bác, em thử dim cùng chiều kim đồng hồ mà vẫn được bác ạ. Em dùng bao giờ có lỗi phát sinh gì thì bác lại giúp em với nhé <3 cảm ơn bác nhiều

    • Vote tăng 2
    • Vote giảm 1

  2. Vào lúc 18/3/2023 tại 14:45, Bee đã nói:

     

     

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

     

    ^_^

    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

    • Vote tăng 1
    • Vote giảm 1

  3. Vào lúc 18/3/2023 tại 11:28, tannguyen291 đã nói:

    Cái lisp của mình là chọn vào DIMARC nó đổi thành DIMANGULAR nhưng text là chiều dài của đường cong. 

    giphy.gif

    Không thể chọn trực tiếp dimangular được vì startpoint và endpont không tính được chiều dài đường cong.

    Em cảm ơn Bác đã giải đáp, do em dim bằng DIMARC thì phải cắt nhỏ từng cung một rồi dim lên rất mất thời gian và cực, em ko muốn làm việc với DIMARC vì nó tốn cônng, còn dim DIMANGULAR thì nó hỗ trợ pick điểm và dim DIMCONTINUE được lên mong bác giúp em có cách nào ko ạ

    • Vote tăng 1
    • Vote giảm 1

  4. 45 phút 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)
    )

     

    Cảm ơn bác đã giúp nhưng lisp đang ngược với mong muốn của em, em muốn dim toàn bộ bằng DIMANGULAR và đổi độ của nó từ kết quả của DIMARC ạ. Lisp đang chỉ xoá ký hiệu cong của dim DIMARC. Mong bác giúp

    • Vote tăng 1
    • Vote giảm 2

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

    • Vote tăng 1
    • Vote giảm 2
×