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

tannguyen291

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

    467
  • Đã tham gia

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

  • Ngày trúng

    44

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


  1. chèn block att nếu sử dụng entmake sẽ không tạo attribute trong block. (nếu muốn dùng cách này cần thêm lệnh attsync trong command.)

    để tối ưu nên dùng vla:

    (vla-InsertBlock Object<vla-object> InsertionPoint<variant:xyz> Name<string> Xscale?<double> Yscale?<double> Zscale?<double> Rotation?<double> Password?<variant>)

    • Like 1

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

    @tannguyen291 Em làm rất đúng. Tặng em 1 hàm có thể có íchc

    
    (defun CurveGetAngleAtDist (object dist / param VEC X Y)
    (setq param (vlax-curve-getParamAtDist object dist)
       vec (vlax-curve-getFirstDeriv object param)
          x (nth 0 vec)
          y (nth 1 vec))
    (if (/= x 0) (atan (/ y x)) (if (> y 0) (* PI 0.5)(* PI -0.5) )
      )
      )

     

    Tks bác. hàm này có thể giảm thiểu một số tính toán thừa của em. 


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

    @tannguyen291 Em phát biểu đúng về việc chia càng nhiều khoảng thì càng chính xác. Nhưng về bản chất  spline và pline khác nhau về độ bẻ cong tại node, một bên là knode, một bên là bulge. Cho nên việc chia đều khoảng cách spline với 20 điểm có thể không chính xác bằng chia không đều với 5 điểm.

    Lisp của em là chia không đều mà. space này chỉ đơn giản là timming để dò tìm thôi. :)) quan trọng còn có dòng này nữa: (equal ck2 0 0.02) tính toán gần đúng cho bulge. giảm xuống mới tạo ra nhiều điểm hơn.


  4. 9 giờ trước, Lee123 đã nói:

    lips bác này chỉ chạy được các đường spline đơn giản thôi, các đường phúc tạp thì nó xoay đến mùa quýt luôn.

    Lisp của mình là ước tính. nên độ chính xác không cao. :)) ngoài ra nếu bạn biết về lisp thì có thể sửa variable space và giá trị so sánh bulge tại dòng 2 và dòng 9 để phù hợp với nhu cầu. (đây là giá trị đánh giá từng bước. càng nhỏ càng lâu càng chính xác, càng lớn các nhanh càng thiếu chính xác). như vậy sẽ đáp ứng được công việc của bạn.


  5. Nếu để viết chương trình như vậy. đầu tiên nghĩ đến giải đố sudoku và giải mã password. thuật toán backtracking. nhưng sudoku chỉ có 9 số, giải mã password thì cũng chỉ có mấy chục ký tự được sắp xếp vào vị trí xác định (ô trống). còn chơi xếp hình này đã nhiều hình còn xoay. ví dụ loop xoay 1 độ thì cũng 360D x số lượng hình - ôi mẹ khiếp luôn. chưa kể vị trí ô trống cũng không xác định. tức là có vô số vị trí để xếp hình. đại khái random mấy ngàn lần không được thì dừng chứ thuật toán này không tìm được phương án tối ưu nhất đâu ạ. :))


  6. Để viết được cái lisp này thì bạn xếp mấy cái hình bằng tay có lẽ sẽ nhanh hơn gấp 1.000 lần.

    Tốt nhất là nên dùng phần mềm khác có sẵn tính năng như vậy

    bạn có biết để kiểm tra point inside polygon đối với lisp đã là 1 cực hình rồi không. đây là một đối tượng đa giác. đã thế lại còn xoay để tìm kiếm vị trí phù hợp

    Nếu thực sự muốn 1 lisp như vậy có lẽ cần phải trả phí. chứ viết chơi chơi cái này thì mất công đấy :))

    • Like 1

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

    Dạ bác e tập tành, không có tương tác với ai nên vẫn đang đọc thêm một số hàm trong các tài liệu và hỏi trên Ai. Còn trên diễn đàn thì e có gửi lên để xin ý kiến thêm để hiểu hơn ạ. E vẫn đang tập tành thôi bác, cảm ơn bác đã góp ý ạ

    Nếu bạn muốn học về lisp nên học bài bản theo thứ tự

    1. AutoLISP Core Functions: các lệnh căn bản

    2. Express Tools Library: các lệnh có trong thư viện express tool.

    3. ActiveX Library Functions: thư viện VLa, VLax.

    Nếu muốn học linh tinh thì tùy vào độ thông minh của bạn.

    • Like 1

  8. 21 giờ trước, phuoc98 đã nói:

    Chẳng là e có tập tành viết một em Lisp để dùng thử, nhưng khi load vào thì nhập lệnh trong cad lại không hiện. Em up lên nhờ các bác xem giúp em với ạ. Em cảm ơn.

    LLL.lsp

    cái này giống như AI viết lisp chứ không giống người viết. :))

    chả có ai tập tành viết mà hiểu biết đến Vlax. đã biết đến vlax mà còn viết ra những hàm không có định nghĩa (vlax-put-text là cái gì).  đã thế đóng ngoặc mở ngoặc lung tung bậy.

    19 giờ trước, vietduc147258 đã nói:

    Hạn chế tiếng việt có dấu trong lisp.

    cad 2021 trở lên đã hỗ trợ Unicode.

    • Like 1
    • Vote tăng 1

  9. Em đã test lại với file của bác hà. thấy kết quả khác rất nhiều 

    Autocad 2025 - I7 9700

    File cad không còn nên em tạo file cad mới 2394 point

    Lisp run từ vscode:  6.1370 secs.

    Load Lisp : 6.2790 secs.

    Load FAS4:  1.0150 secs.

    Load VLX - fas4:  1.0030 secs.

    Load FAS5: 0.7090 secs.

    Load VLX - fas5:  0.9620 secs.

    Em thấy sẽ không thua gì VBA, .NET


  10. Máy tính của bạn đời thấp quá rồi chạy chi chả giật.

    Cpu nhiều nhân chỉ dùng để chạy đa nhiệm hoặc render. đối với hầu hết các tác vụ đều dùng đơn nhân. bây giời xung nhịp đã tầm 4-5ghz rồi cái cpu của bạn chỉ có 2.5ghz

    Máy này h render cũng hơi yếu, để làm máy chủ cho công ty thôi chứ vẽ gì nữa.

     


  11. mã này có thể chạy được với các hình dạng giống bản vẽ. chữa rõ với các hình dạng khác hoạt động được đến đâu :((

    (defun c:test (/ sel ss lst eng pt ntx ang lstss )
      (setq 
        sel (ssget '((0 . "LINE")))
        ss (acet-ss-to-list sel)
        pt (getpoint "\nStart Point:")
        lst (mapcar 
              '(lambda (x / a b) 
                 (setq
                   a (cdr (assoc 10 (entget x))) 
                   b (cdr (assoc 11 (entget x)))
                 )
                 (if (< (distance a pt) (distance b pt)) a b)
               )
              ss
            )
        ntx (car (vl-sort-i lst '(lambda (a b) (< (distance a pt) (distance b pt)))))
        ptx (if (eq (nth ntx lst) (cdr (assoc 10 (entget (nth ntx ss)))))
              (cdr (assoc 11 (entget (nth ntx ss))))
              (cdr (assoc 10 (entget (nth ntx ss))))
            )
        ss (list (nth ntx ss))
        lst (list (nth ntx lst))
        ang (angle (car lst) ptx)
      )
      (acet-ss-zoom-extents sel)
      (while (and
               (setq lstss (ssget "F" (list (car lst) ptx )'((0 . "LINE"))))
               (setq lstss (acet-ss-to-list lstss))
               (setq lstss (vl-remove-if '(lambda (x) (member x ss)) lstss))
             )
        (setq 
          eng (list (cdr (assoc 10 (entget (car lstss)))) (cdr (assoc 11 (entget (car lstss)))))
          ntx (inters ptx (car lst) (car eng) (cadr eng) nil)
          ss (cons (car lstss) ss)
          lst (cons ntx lst)
        )
        (if (minusp (cos (- (angle ntx (car eng)) ang)))
          (setq ptx (cadr eng))
          (setq ptx (car eng))
        )
        (setq ang (angle (car lst) ptx))
      )
      (setq lst (reverse (cons ptx lst)))
      (entmakex
          (append
              (list
                 '(000 . "LWPOLYLINE")
                 '(100 . "AcDbEntity")
                 '(100 . "AcDbPolyline")
                  (cons 90 (length lst))
                 '(070 . 1)
              )
              (mapcar '(lambda ( x ) (list 10 (car x)(cadr x) )) lst)
          )
      )
      (princ)
    )

     

    • Like 1

  12. tải lisp convexhull về rồi thêm đoạn mã này nữa mới chạy được 

    (defun c:test (/ ss lst )
      (setq 
        ss (acet-ss-to-list (ssget '((0 . "LINE"))))
        lst (mapcar '(lambda (x) (list (cdr (assoc 10 (entget x))) (cdr (assoc 11 (entget x)))) ) ss)
        lst (LM:ConvexHull (apply 'append lst))
      )
      (entmakex
          (append
              (list
                 '(000 . "LWPOLYLINE")
                 '(100 . "AcDbEntity")
                 '(100 . "AcDbPolyline")
                  (cons 90 (length lst))
                 '(070 . 1)
              )
              (mapcar '(lambda ( x ) (list 10 (car x)(cadr x) )) lst)
          )
      )
    )

     


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

    Cẩm ơn a tannguyen291 và amateurday: Thêm kiểm tra góc giữa 2 đường nữa là OK. Thanks!

    Kiểm tra nhiều thế làm gì chỉ đơn giản là tính tan(alpha) bằng nhau là xong mà. 

    ngay từ đầu mình thấy bài đơn giản nên không định trả lời. không ngờ gây khó mọi người đến vậy.

    image.png.d3ad49ad37da871e967d0203de2367ac.png

    từ p1 p2 thì có rất nhiều cách để tìm ra px1 và px2.


  14. 22 phút trước, NTHAHT đã nói:

    Theo mình biết, một số khách hàng họ có nhu cầu file cuối cùng ở dạng vector để đưa lên web (... có thể convert từ file *.dwg ), yêu cầu màu sắc cụ thể.

    nếu theo nhu cầu đó thì viết 1 lisp convert index ra true. nhanh hơn đỡ phải chọn đi chọn lại nhiều lần. màu sắc tương tự, bác thấy sao. :)


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

    Sao bạn biết không đúng?

    Em cũng không hiểu true color để làm gì vì mình quản lý nét in bằng index color. 

    việc màu gần nhau có thể hơi khác một chút nhưng với công nghệ máy in thông thường khi in ra cũng không nhận biết được.

    không biết các ngành khác thế nào chứ ngành quy hoạch em đang làm thì có thông tư 04/2022 đã định rõ màu cho từng loại layer được sử dụng. nên cũng không nhất thiết phải true color làm gì.

×