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

mdchuyen

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

    28
  • Đã tham gia

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

  • Ngày trúng

    4

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


  1. Mã căn đã bán ký hiệu khác với căn chưa bán ngay trên bản vẽ cad rồi ạ, Nếu thế thì dùng lệnh find của cad lọc xong đổi tên lớp là xong, mình đang hiểu là chỉ mới note trên excel giờ muốn đổi tên lớp trên cad (đổi lớp của khu đất bao quanh chứ không phải lớp của text)


  2. Do bạn không đưa bản vẽ và file excel nên mình chỉ đoán bản vẽ và file excel để làm thử, hướng tiếp cận của mình như sau:

    B1: Xuất các text mã căn ra .csv có kèm nội dung text và tọa độ

    B2: Dùng hàm Vlookup xử lý để chuyển các căn từ file excel của bạn đã có về cùng với file .csv mà cad xuất ra

    B3: Lọc chỉ giữ lại các căn đã bán trên file excel này (mình đang ký hiệu là DB)

    B4: xuất ngược lại cad (trước khi xuất xóa hết text mã căn đang có trên cad)

    B5: Đổi tên lớp thành lớp DB như hình mình đính kèm

    PS: Mình đã gửi tin nhắn để xin bản vẽ và file excel khi test không phải đoán để làm mà bạn không hồi trả lời 

    A26.jpg


  3. Vào lúc 25/3/2023 tại 21:35, VoHoan đã nói:

    Nhờ bác nào viết giúp hàm con mà đầu vào cho 1 điểm P nằm ngoài đường pline pl, tìm điểm N là chân đoạn thẳng vuông góc từ P đến pl, nếu có nhiều điểm N thì chọn điểm mà chiều dài đoạn PN là nhỏ nhất.

    Xin cảm ơn!.

    Bạn tham khảo nhé

    ppl.lsp


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

    Dùng lisp của bác Tien2005 từ phiên bản đầu tiên, đến phiên bản cuối cùng 2022 v1.1. Rất tốt, nhưng lại không có in layout. Muốn in hàng loạt layout thì phải tạo sheetset hoặc Publish. 

    Còn lisp của bác NTH2024 hôm nay vừa cài thử, thì về giao diện và tính năng tương tự như bác Biet ve cad, có in layout

    Nói chung là nếu như các bác chỉ in ở Model, thì lisp mpl của bác tien2005 hoàn hảo. Nhưng nếu cần in layout nhanh thì bắt buộc phải mua lisp thôi.

     

    P/s: vừa dùng lisp của bác NTH2024, tính năng in ấn đều ngon, nhưng hình như không lưu được setting in ấn (hoặc do mới dùng vài lần chưa mò được hết tính năng). Bác thêm được tự động lưu lại setting thì ổn áp

    Bác dùng không đúng bản rồi. Lisp bác tiến có in layout mà


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

    Hi các bạn.

    Nhờ các bạn giúp phát triển lisp có sẵn ( file kèm theo) để chọn được nhiều đối tượng cùng 1 lúc và xóa block bị trùng. có video đính kèm.

     

     

    Drawing2.dwg

    isb tha block att theo nut kem theo lenh attout va attin.lsp

    Bạn rải block với mục đích làm gì (VD để lấy tọa độ hay sao?) với lisp rải đối tượng trên diễn đàn cũng rất nhiều rồi chỉ là bạn không chịu tìm kiếm thôi


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

    Có rồi thì có rồi nhiều, nhưng mỗi kiểu bản vẽ lại phải sửa lisp cho phù hợp. Như lisp của bác lấy điểm chèn của text làm điểm tính toán thì không đúng với bản vẽ của thớt là lấy giao điểm cùa 2 đg làm điểm tính toán. Mỗi lisp trên cv đều phải sửa lại cho từng trường hợp mới dùng đc bác @mdchuyenơi.

    em nghĩ mình đang hiểu đúng ý của chủ thớt đấy ạ. Vì thỉnh thoảng em cũng cần nội suy như thế khi biết 2 cao độ mình nội suy cao độ nằm trên đường nối 2 text cao độ này bác ạ.

    • Like 1

  7. 1 phút trước, Doan Van Ha đã nói:

    Bạn nên mô tả rõ ràng chứ mở bản vẽ ra mà zoom qua lại hơi khổ

    dạ : cụ thể bản vẽ có nhiều đường PL khép kín bên trong có chưa các đối tượng (text, mtext, block, pline hở, line ) và nhiều đối tượng khác nằm ngoài các PL khép kín đó. Giờ Cháu mong muốn có 1 lisp để quét toàn bộ dạng cửa sổ. Kết quả nó chọn các đối tượng chỉ trong các pl khép kín để mình có thể di chuyển hoặc copy ạ


  8. 9 giờ trước, vuhoach đã nói:

    Tọa độ XY em đánh ví dụ thôi bác. Còn yêu cầu có thể như bác mdchuyen đã nói. Xin lỗi vì topic em viết chưa được rõ ý. 

     

    Bài toán em cần giải quyết xin được trích dẫn lời bác mdchuyen "bản vẽ có 2 loại block ( block tĩnh và block thuộc tính ) tại mỗi vị trí bạn ấy cần lấy tọa độ điểm base point của block tĩnh và kèm tên của block att là ghi chú cho mỗi block tĩnh gần nó"

     

    Để giải quyết bài toán đó nếu có 1 lisp mà trực tiếp giải quyết được bài toán thì tuyệt vời.

     

    Còn nếu không thể giải quyết như trên thì như tiêu đề topic em xin nhờ các bác viết 1 lisp có thể move các block thuộc tính đến các point nằm gần đó (các point này thì được tạo ra bằng cách dùng 1 lisp khác (đã có) convert các block tĩnh kia mà thành)

     

     

     

     

     

    Mình đã hiểu và biết hướng giải quyết đối với bản vẽ bạn gửi từ lisp bạn có đã gửi tin nhắn riêng cho bạn nhưng không thấy bạn trả lời

    • Like 1

  9. 1 giờ} trướ}c, anti lazy đã nói:

    Đến lần thứ 5 thì cũng chưa rõ yêu cầu thế nào vì tọa độ XY trong bảng cũng không đúng với thực tế mà đánh bậy chứng tỏ chưa nghiêm túc. Do đối với bv giao thông X, Y hay hoán đổi cho nhau 

    Mình cố hiểu được là bản vẽ có 2 loại block ( block tĩnh và block thuộc tính ) tại mỗi vị trí bạn ấy cần lấy tọa độ điểm base point của block tĩnh và kèm tên của block att là ghi chú cho mỗi block tĩnh gần nó.  


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

    Đúng rồi bác, nhưng lisp xuất tọa độ thông thường phải ghi tên điểm thủ công, hoặc đánh stt tự động nhưng stt này không khớp với tên điểm đã có. Vì vậy mà em muốn trên để công việc tự động cao hơn 

    Vậy thì bản thân lisp bác đang có là thực hiện được rồi. bác move text về tâm block (chính là point ) sau đó bác xuất tọa độ block và xuất tọa độ text: sau đó bác xử lý trên excel là được mà


  11. 8 giờ trước, vuhoach đã nói:

    Chào các bác, bài toán của mình như này: Mình cần xuất tọa độ của các block đèn kèm tên của nó. Như hình bên dưới là các cột đèn kèm tên của nó (tên đèn là block attribute), mình đã có lisp chuyển các đèn kia thành point, và lisp move text tới point (đính kèm bên dưới cho anh em nào cần). Nhưng do block tên đèn của mình bên trong gồm cả text lẫn attribute, dùng lệnh burst của cad có thể chuyển các attribute trong block thành text nhưng sau khi thực hiện lệnh này thì bị lẫn cả text cần lấy tọa độ lẫn text rác. Mình có thể xử lý, lọc được để lấy tọa độ text mong muốn nhưng rất mất công. Vì vậy mình muốn có một lisp có thể move thẳng block tới point để thao tác nhanh gọn hơn. Khi đó bài toàn xuất tọa độ đối tượng kèm tên sẽ đơn giản hơn rất nhiều: dùng 1 lisp chuyển block đèn kia thành point (mình đã có) -> dùng lisp đang nhờ các bạn viết move block tên đèn vào các point vừa tạo(hoặc chỉnh sửa lisp mình đính kèm) -> xuất tọa độ các block atrribute tên đèn (lisp này cũng đã có).

     

    PS: lisp move text to point đính kèm là của Lee-Mac

    image.png.d4e36775500bc9cd82c7447c15b3346e.png

    txt2pt MOVE TEXT TO POINT.LSP

    Vẫn không hiểu ý cụ lắm. Có phải cụ muốn xuất tọa độ (base point) của block kèm text nằm gần block ra bảng excel không?


  12. 20 giờ trước, traichoi85 đã nói:

    Chào các bạn.

    Hiện nay mình có 1 dự án khoảng 500 lô nhà. file đã có số lô. mà mình muốn thêm trong mỗi lô là 1 block ( để mình làm block thuộc tính). nếu làm thủ công thì rất lâu, và phương án của mình thì sửa liên tục. Nên nhờ các bạn giúp dùm, nếu được các bạn có thể giúp thêm là xoay block theo hướng lô đất luôn.  (có file đính kèm và video hỏi đính kèm)

    file youtube: https://youtu.be/xZdQ5gw2coA

    file 

    chuyen dt Thanh block.dwg

    Gửi bạn bản vẽ mình đưa vào block att kèm theo các thông số Lô, số thự tự và diện tích mỗi ô đất

    chuyen dt Thanh block (1).dwg


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

    Hi các bác. 
    Cho em hỏi, em có 1 thư viện block thuộc tính. trong ruột thì đầy đủ các att: TENLODAT, DIENTICH, MATDO, MATCATDUONG, TENBLOCK. nhưng khi thể hiện thì chỉ có TENLODAT, DIENTICH, MATDO. 
    Vậy block này làm sao mình ẩn được 2 giá trị MATCATDUONG, TENBLOCK. 
    CÓ FILE ĐÍNH KÈM. MONG CÁC PHẢN HỒI CỦA CÁC BÁC, EM CÁM ƠN

    hoicadviet.dwg

    MUON HOI.jpg

    Bạn kick chuột phải, chọn vào mục block editor sau đó bạn chọn tag cần ẩn rồi vào mục Misc trong propertis lựa chọn invisible chuyển "No" thành "yes". xong thoát khỏi block thực hiện lệnh batman chon sys là ok

    • Like 1

  14. Vào lúc 19/9/2022 tại 14:54, cuongtk2 đã nói:

    Mô tả : Lấy 1 đường pline tham chiếu, Offset thêm 1 đường pline về phía hướng chọn. Kiểu chọn sẽ là WindowPolygon cho tập hợp các đỉnh của 2 pline.

    
    (defun c:seloffset ( / D ENT ENT1 ENT2 ENT3 OB OB1 OB2 PENT PT PT1 PT2 PTS PTS1 SS)
    (defun pline_points (e / pts)
      (setq pts (mapcar 'cdr
                    (vl-remove-if-not
                      (function (lambda (pt) (= (car pt) 10)))
                      (entget e)
                    )
                )
          )
      )
    
    (setq pent (entsel "\nPick pline")
          ent (car pent)
          pt (cadr pent) 
          )
    (setq ob (vlax-ename->vla-object ent)
          pt1 (vlax-curve-getclosestpointto ob pt t))
    (setq pt2 (getpoint "\nHuong offset:" pt1)
          d (distance pt1 pt2))
    (vla-Offset ob d)
    (setq ent1 (entlast))
    
    (vla-Offset ob (- d))
    (setq ent2 (entlast))
    
    (setq ob1 (vlax-ename->vla-object ent1)
          ob2 (vlax-ename->vla-object ent2))
    (setq ent3  (if (< (distance pt2 (vlax-curve-getclosestpointto ob1 pt2 t))
                      (distance pt2 (vlax-curve-getclosestpointto ob2 pt2 t))
                      )
                 ent1
                 ent2))
    (setq pts (pline_points ent)
          pts1 (REVERSE(pline_points ent3))
          pts (append pts pts1))
    (setq ss (ssget "WP" pts))
    (entdel ent1)
    (entdel ent2)
     (command "select" ss "")     
          )

     

    Bác có thể sửa nó nhận theo điểm tâm của block không ạ?


  15. 20 giờ trước, thiep đã nói:
    
    ;| LISP  FIELD SUM DIMENSIONS TO A TEXT|;
    (defun DXF (code en) (cdr (assoc code (entget en))))
    (defun getIDobject (obj)
        (if (vlax-method-applicable-p *util* 'GetObjectIdString)
            (vla-GetObjectIdString *util* obj :vlax-false)
            (itoa (vla-get-ObjectId obj))
        )
    )
    (defun c:fdt (/ ApCad    ActDoc   *Model*  *util*       ssdim
                    ent_T    Obj_Text tz       po       ent-lst  len      n
                    Obj_DIM  str      rowtypes objTab acm prec
                   )
        (vl-load-com)
        (command "undo" "be")
        (defun *error* (msg)
            (and doc (_EndUndo doc))
            (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
                (princ (strcat "\n** Error: " msg " **"))
            )
            (acet-sysvar-restore)
            (command "undo" "en")
            (princ)
        )
        (if (< (substr (getvar "ACADVER") 1 2) "15")
            (progn
                (acet-ui-message
                    (strcat
                        "Lisp này ch\U+1EC9 ch\U+1EA1y \U+0111\U+01B0\U+1EE3c t\U+1EEB autoCad 2007 tr\U+1EDF lên."
                        "\nB\U+1EA1n nên nâng c\U+1EA5p autoCad và có menu Express"
                    )
                    "Warning"
                    4144
                )
                (exit)
            )
        )
        (acet-sysvar-set '("cmdecho" 0 "osmode" 0 "dimpost" "."))
        (setq ApCad   (vlax-get-acad-object)
              ActDoc  (vla-get-ActiveDocument ApCad)
              *Model* (vla-get-ModelSpace ActDoc)
              *util*  (vla-get-Utility ActDoc)
        )
        
        (setq acm (vla-GetInterfaceObject
                      ApCad
                      (strcat "AutoCAD.AcCmColor." (substr (getvar 'acadver) 1 2))
                  )
        )
        (acet-ui-status "Select DIMENSIONs" "Prompt")
        (setq ssdim (ssget '((0 . "DIMENSION"))))
        (acet-ui-status)
        (while (OR (NOT (setq ent_T
                                 (car (entsel "\nPick a Text object for set sum dimensions"))
                        )
                   )
                   (NOT (eq (DXF 0 ent_T) "TEXT"))
               )
            (prompt "\nPick not right TEXT object, please pick again")
        )
        (setq Obj_Text (vlax-ename->vla-object ent_T))
        (setq tz (dxf 40 ent_T))
        (setq po (getvar "Extmin")
              po (list (- (car po) (* tz 20)) (cadr po) 0.0)
        )
        (if (null (setq prec (getint (acet-str-format
                                         "\nEnter number of decimal places: <%1> "
                                         (itoa (getvar "useri1"))
                                     )
                             )
                  )
            )
            (setq prec (getvar "useri1"))
        )
        (setvar "useri1" prec)
        (if ssdim
            (progn
                (setq ent-lst (acet-ss-to-list ssdim))
                (setq len (length ent-lst))
                (setq objTab (vla-AddTable *Model*
                                           (vlax-3D-point po)
                                           len
                                           1
                                           (* tz 3.5)
                                           (* tz 8)
                             )
                )
                (vla-put-layer objTab (vla-get-layer Obj_Text))
                
                (vla-setrgb acm 0 0 0)
                (vla-put-truecolor objTab  acm)
    
                (setq n 0)
                (foreach entD ent-lst
                    (setq Obj_DIM (vlax-ename->vla-object entD))
                    (if (eq (vla-get-TextOverride Obj_DIM) "")
                        (vla-setText
                            objTab
                            n
                            0
                            (acet-str-format
                                "%<\\AcObjProp Object(%<\\_ObjId %1>%).%3 \\f \"%llu2%pr%2%\">%"
                                (getIDobject Obj_DIM)
                                (itoa prec)
                                "Measurement"
                            )
                        )
                        (vla-setText
                            objTab
                            n
                            0
                            (acet-str-format
                                "%<\\AcObjProp Object(%<\\_ObjId %1>%).%2>%"
                                (getIDobject Obj_DIM)
                                "TextOverride"
                            )
                        )
                    )
                    (setq n (+ n 1))
                )
                (setq str
                         (acet-str-format
                             "%<\\AcExpr (Table(%<\\_ObjId %1>%).Evaluate(Sum(A1:A%2))) \\f \"%lu2%pr%3\">%"
                             (getIDobject objTab)
                             (itoa len)
                             (itoa prec)
                         )
                )
                (vla-put-TextString Obj_Text str)
            )
        )
        (vla-put-Visible objTab acfalse)
        (ACET-SYSVAR-RESTORE)
        (command "undo" "en")
        (princ "ok")
        (PRINC)
    )

    Lisp tính tổng các text dimension, tạo field giá trị tổng đưa vào 1 đối tượng TEXT có sẵn. Text dimension có thể bị chỉnh sửa hay không bị chỉnh sửa cũng được cộng. Khi 1 hay nhiều dimension thay đổi thì text tổng cũng thay đổi.

    Bác ơi em test với những dim sửa text rồi thì không được, Cũng bài toán như vậy bác có thể sửa thay đối tượng Dim bằng (text, length hoặc area) được không ạ


  16. Nhờ các bác trong diễn đàn sửa giúp em lisp sau theo yêu cầu công việc

    1. lisp hiện tại đang ở chế độ chọn điểm pic điểm để tính diện tích em muốn chuyển sang dạng chọn cửa sổ ( mong muốn gom nhiều đối tượng tính 1 thao tác)

    2. Kết quả lisp tính ra rất nhiều số sau dấu phẩy, em muốn sửa thành có lựa chon 2,3 số (lưu ý chỉ khai báo thông số này 1 lần khi áp lisp)

    3. Kết quả ghi ra trong mục thay thế text có sẵn trên bản vẽ thì tự đổi màu và đổi tên lớp text thay thế so với text gốc

    AS.LSP

×