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

ndtnv

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

    528
  • Đã tham gia

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

  • Ngày trúng

    43

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


  1. Vào lúc 29/7/2021 tại 09:53, Nguyen hai 289 đã nói:

    Hi anh chị, anh chị cho em hỏi chút, có cách nào mà text trong block không bị đảo lộn khi dùng lệnh đối xứng MI block đó không ạ ?

    Em cảm ơn anh chị ạ.!

    Dùng Attribute thay cho text

    https://knowledge.autodesk.com/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/Preventing-text-in-blocks-from-being-mirrored-with-block.html


  2. Khi chiều xoay p1,p2,p3 là CW nhưng p11,p21,p31 là CCW hoặc ngược lại

    thì ss2 align 3D nên DXF 210 /= (0 0 1) => Lỗi text

    Giải pháp:

    Cách 1. Đổi DXF 210 về (0 0 1)

    Cách 2. Nên làm mặc dù phức tạp hơn:

    Bỏ p3, p31 và thay bằng "" trong lệnh ALIGN

    Sau đó hỏi MIRROR ss2 Y/N ? hoặc Y/N/Undo ?

    Nếu Y thì MIRROR ss2 qua line qua p11 và vuông góc p11, p21

    • Like 1

  3. Ví dụ 2 dòng sau đều gán a = 2

    (setq a 2)
    (set 'a 2)

    Tuy nhiên hàm set chậm hơn nhưng cho phép by reference, hàm setq chỉ cho phép by value

    VD hàm swap 2 biến :

    (defun Swap (ru rv / w) (setq w (eval ru)) (set ru (eval rv)) (set rv w))

        (setq a 1 b 2)
        (swap 'a 'b)

    • Like 2

  4. Các DIMENSION có chân dim (POINT) hoặc text... nằm hoàn toàn trong windown có 2 điểm góc là p1 và p2 nhưng các thành phần khác của DIM (text, line, extension còn lại... ) nằm ngoài màn hình

    Các đối tượng có nhiều đối tượng con khác như BLOCK... nếu 1 phần nằm hoàn toàn trong p1p2, các phần còn lại nằm ngoài màn hình cũng bị chọn

     


  5. Tôi thấy cách làm trên có vẽ ngược quy trình.

    Chiều dài cạnh tam giác tính được từ các node chứ trong thực tế khó có trường hợp cạnh => node

    trừ khi các tam giác = nhau hoặc có thể tổ hợp các đa giác thành hình hoàn chỉnh như quả bóng

    Theo cách của các chương trình kết cấu, từ bảng tọa độ node và bảng danh sách các tam giác với các đỉnh tương ứng

    => vẽ tự động hoàn toàn là dễ nhất


  6. Có thể cải tiến tốc độ và độ chính xác bằng phép chia nhị phân.

    Xem đường cong kín là đường cong hở có điểm đầu = cuối

    1. Tìm đường tròn qua tất cả các đỉnh

    2. Nếu là đường cong, tìm gđ với đường tròn, nếu có 0 hoặc 1 gđ: đường cong nằm trong.

     a. Nếu 2 gđ: xét tđ đoạn cong nếu nằm trong chứng tỏ 2 gđ tiếp xúc đường tròn, nếu nằm ngoài tìm đường tròn mới bao trung điểm của đoạn cong.

     b. Nếu có nhiều gđ, xét từng đoạn 2 gđ kề nhau, nếu trung điểm nằm trong: đoạn đó nằm trong đường tròn.Nếu trung điểm nằm ngoài, xét như a.

          Sau đó tìm đường tròn bao trung điểm các đoạn

    3. Lặp lại bước 2 đến độ chính xác cần thiết

     


  7. Cao kiến thì không dám, nhưng làm không theo lệ là ĐC // TN thì bên A chưa chắc chấp nhận.

    Tốt nhất là đợi quocmanh04tt online hoặc gửi mail đến Quocmanh04trungtiet@gmail.com rồi xin hoặc trả 1 ít phí vì lisp của bạn ấy đã được chấp nhận.

    Cách của bạn là ngoại suy thì ĐC không // TN như lệ thường nên có khả năng bên A không chịu.

    Nếu gấp thì đợi DuongTrungHuy đi công tác về chỉnh lisp hoặc kêu bên KS nói điểm vô lý để họ sửa vì họ ăn tiền để làm việc này

    • Like 1

  8. Xem kỹ bản vẽ thì thấy khảo sát địa chất quá lụi:

    - Copy đường TN => đường đc

    - Đường TN vẽ từ kq đo đạc nên chính xác 2 số lẻ (cm). Đường ĐC chính xác trên 8 số lẻ: công nghệ nano chăng?

    - Sau khi thi công, đường đc lại song song với nền đường : vô lý.

    Có lẽ bạn và quocmanh04tt thuê cùng 1 cty khảo sát.

    Theo cách làm thì trong phạm vi đường

    - Trong video bạn quocmanh04tt nội suy đường ĐC cũ. Nhưng không có bản vẽ nên không rõ mc 3 và 7 đường ĐC dưới làm theo cách nào

    - Trong bản vẽ letu_cds ngoại suy đường ĐC cũ theo bên trái và phải mc cọc H6, nhưng 2 m/c kia thì không theo tiêu chí này.

    Nếu xác định rõ cách làm, bản vẽ đưa lên có DIM nên chỉ cần quét 1 lần là xong

     

    • Like 1

  9. Tôi chỉ sửa lỗi vòng lặp, còn kết quả khi không có dxf 11 ra thế nào thì bạn tự sửa

    
    (if (setq ss (ssget '((0 . "TEXT"))))
        (progn
            (setq ssl (acet-ss-to-list ss))
        (setq ssl (vl-sort ssl '(lambda (x y) ( > (caddr (assoc 11 (entget x))) (caddr (assoc 11 (entget y)))))))
    ;;;         (setq h (cdr(assoc 40 (entget (car ssl)))))
    ;;;           i 1 p0 p1 )
          (foreach dt ssl
    ;;;               (command "text" "j" "mc" (list (+ (car p0) (* 3 h)) (- (cadr p0) h)) h 0 (cdr (assoc 1 (entget dt))))
    ;;;               (command "rectangle" p0 (list (+ (car p0) (* 6 h)) (- (cadr p0) (* 2 h))))
    ;;;               (setq p0 (list (+ (car p0) (* 6 h)) (cadr p0)))
          (setq str (strcat str "\t"
                      (cdr(assoc 1 (entget dt))) "\n"))  
          );;;foreach
      (SetClipBoardText str)
            )
    ;;;      (setq p1 (list (car p1) (- (cadr p1) (* 2 h))))
    )
    
    

  10. 14 giờ trước, dungpham01 đã nói:

    cho em hỏi chuyển (vlax-ename->vla-object) rồi dùng (vlax-get obj '...) thì có nhanh hơn entget không ạ

    Muốn biết hàm nào nhanh thì cứ viết hàm test. Vẽ 1 circle

    (defun test (n / el eg o t0 t1 t2)
        (setq el (entlast))
        (setq t0 (getvar "MILLISECS"))
        (repeat n
            (setq eg (entget el))
            (dxf 10 eg))
        (setq t1 (getvar "MILLISECS"))
        (repeat n
            (setq o (vlax-ename->vla-object el))
            (vla-get-Center o))
        (setq t2 (getvar "MILLISECS"))
        (list (- t1 t0) (- t2 t1) (/ (- t1 t0 0.0) (- t2 t1)))
    )
    (test 50000)
    
    

    Test trên máy tôi, hàm entget+dxf nhanh hơn khoảng trên 10%

    Nếu cho (setq eg (entget el)) và  (setq o (vlax-ename->vla-object el)) ra trên dòng  (setq t0 (getvar "MILLISECS"))

    hàm dxf nhanh hơn vla-get-Center khoảng 25-30 lần

     


  11. Có lẽ hàm dxf có chứa entget nên chạy chậm, trong khi đó acet-dxf không chứa entget.

    Nếu sửa như sau:

    (defun dxf (k e) (cdr (assoc k e))) 

    Tạo 1 đối tượng có dxf 10

    (setq el (entget(entlast)))
    
    (defun test (n / t0 t1 t2)
        (setq t0 (getvar "MILLISECS"))
        (repeat n (dxf 10 el))
        (setq t1 (getvar "MILLISECS"))
        (repeat n (acet-dxf 10 el))
        (setq t2 (getvar "MILLISECS"))
        (list (- t1 t0) (- t2 t1) (/ (- t1 t0 0.0) (- t2 t1)))
    )
    (test 1000000)
    
    

    Sau đó đổi vị trí cho dxf nằm sau acet-dxf

    test thử trong cả 2 trường hợp dxf vẫn nhanh hơn acet-dxf

    • Like 2

  12. Dùng command cho 2d

    
    (command ".pline";start "pline" command
         (repeat (length pt-list);repeat for each point
           (command (nth cnt pt-list));enter current point
           (setq cnt (1+ cnt));counter to next point
           "";return value to close "pline" command
         );end point repeat
    );end command
    
    

    nếu 3d point phải đổi về ucs mới

    Dùng entmake (2D)

    
    (entmakex    (append    '((0 . "LWPOLYLINE")    (100 . "AcDbEntity")    (100 . "AcDbPolyline"))
            (list (cons 90 (length pt-list)) (cons 70 isclose))     (mapcar ''((x) (cons 10 x)) pt-list))    )
    
    

    • Like 1
×