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

cuongtk2

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

    441
  • Đã tham gia

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

  • Ngày trúng

    39

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


  1. ; Vậy phải dùng hàm entsel từng pline , sẽ lấy điểm pick dùng cho so sánh chọn mút nào để join

    (setq sel1 (entsel)

             pline1 (car sel1) diempick1 (cadr sel1))

    ; truy xuất startpoint , endpoint từ pline1 

    ; gán điểm p1 là mút gần điểm pick hơn

    (setq p1 (if (< distance diempick1 startpoint) (distance diempick1 endpoint)) startpoint endpoint))

    ; làm nốt với pline tiếp theo ra p2 , vẽ line p1 p2


  2. (setq ss (ssget '((0 . "LWPOLYLINE"))))
    (setq ss (ACET-SS-TO-LIST ss))

    (if (< (length ss) 2)
      (exit))

    (setq pl1 (car ss)
          pl2 (cadr ss))
    (setq ls1 (ACET-GEOM-PLINE-POINT-LIST pl1 0)
          ls2 (ACET-GEOM-PLINE-POINT-LIST pl2 0)
          pl1s (car ls1)
          pl1e (last ls1)
          pl2s (car ls2)
          pl2e (last ls2))
    (setq p3 (if (< (distance pl1s pl2s)
            (distance pl1e pl2s))
           pl1s pl1e)
          )
    (setq p4 (if (< (distance pl2s pl1s)
            (distance pl2e pl1s))
           pl2s pl2e)
          )
    (setq line1 (entmakex
              (list (cons 0 "line") (cons 10 p3) (cons 11 p4))))

    (command "pedit" pl1 "join" line1 pl2 "" "")

    • Vote tăng 2

  3. Mình sửa lại cho bạn đây nhé, trước vì không test kỹ nên bị như thế, vì biến toàn cục.

    (defun c:test    (/ ENT EXPORTFILE FILE FILE1 P1 PATH SS)
      (setq ss (ACET-SS-TO-LIST (ssget "x" '((0 . "*TEXT")))))
      (setq path (acet-ui-pickdir "Select directory" (getvar "dwgprefix")))

      (foreach n ss
        (progn
          (setq ent     (entget n)
            p1     (acet-dxf 10 ent)
            file (acet-dxf 1 ent)
          )
          (vl-cmdf "-boundary" p1 "")
          (setq exportFile (strcat path "\\" (VL-STRING-TRIM " " file)))
          (command "_.dxfout"
               exportFile
               "_entities"
               (entlast)
               ""
               "_version"
               "2007"
               6
          )
          (entdel (entlast))
        )

      )
    )


  4. Xuất ra các chi tiết thành dxf file bằng cách tạo boundary tại mỗi text position

    (defun c:test ()
      (setq ss (ACET-SS-TO-LIST (ssget "x" '((0 . "TEXT")))))

      (foreach n ss
        (progn
          (setq ent     (entget n)
            p1     (acet-dxf 10 ent)
            file (acet-dxf 1 ent)
          )
          (vl-cmdf "-boundary" p1 "")
          (setq acadObj (vlax-get-acad-object))
          (setq doc (vla-get-ActiveDocument acadObj))
          (setq file1 (VL-STRING-TRIM " " file))
          (setq path (acet-ui-pickdir "Select directory" (getvar "dwgprefix")))
          (setq exportFile (strcat path "\\" file1))
          ;; Adjust path to match your system

          ;; Create an empty selection set
          (setq sset (vla-Add (vla-get-SelectionSets doc) "TEST"))
          (vla-Select sset acSelectionSetLast)

          ;; Export the current drawing to the file specified above.
          (vla-Export doc exportFile "DXF" sset)

          (vla-Delete sset)
        )
      )
    )


  5. mô tả cách thực hiện:

    - đặt 1 điểm p1 làm nơi xác định giá trị X, lấy giá trị p1.X.

    - dùng 2 điểm p2, p3 để xác định 1 crossing window cho selection

    - tạo một Extens3d rồi add các điểm p2 p3 vào. Extens này dùng để xác định point_inside cho các vertext của curve

    - dùng vòng for để duyệt vertex của cuvre, nếu inside p2 p3 thì thay đổi giá trị X cho point đó (với Polyline)

    - tương tự startpoint, entpoint với Line

     

     

    myCommands.cs.txt

    • Like 1
×