Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Lisp chia đường polyline


  • Please log in to reply
10 replies to this topic

#1 phuongkq

phuongkq

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 25 February 2014 - 11:18 PM

Kính nhờ các cao thủ viết cho mình một Lisp có thể chia đường polyline bất kỳ thành các đoạn có chiều dài bằng nhau, trừ đoạn cuối cùng. 

* cụ thể:

 

- Chọn chiều dài sẽ chia, ví dụ chọn số là 250,

- chọn đường polyline cần chia. (một hoặc nhiều đường)

- trường hợp chiều dài polyline được chọn bé hơn chiều dài nhập thì thông báo cho biết là "chiều dài polyline bé hơn chiều dài nhập, không thực hiện thao tác! - Chọn lại chiều dài nhập hoặc chọn đường poline khác". Đối với các đối tượng thỏa mãn thì vẫn thực hiện thao tác như thường!

- trong trường hợp chiều dài polyline đủ để thực hiện phép chia thì sẽ có thông báo ra: số đoạn được chia, và chiều dài đoạn lẻ cuối cùng. ví dụ Polyline có chiều dài là 1113 và chiều dài nhập vào là 250 thì thông báo thành công, kết quả là chia được 4 đoạn, chiều dài đoạn cuối còn lại là 113.

- Tại mỗi điểm ngắt bằng chiều dài nhập sẽ là điểm endpoint mới của polyline, trên polyline sau khi chia sẽ chỉ có các điểm này và có chèn một ký hiệu đánh dấu tại mỗi endpoint là một block đánh dấu nào đó (block này có để dễ nhận ra điểm đánh dấu hoặc để sửa nếu cần thiết).

 

Minh đã tham khảo qua bài viết này:

http://www.cadviet.c...-dai-khac-nhau/

nhưng thứ nhất là không chạy, và nếu chạy cũng khác với yêu cầu của mình!

Thanks sự giúp đỡ của cả nhà!

 


  • 0

#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 26 February 2014 - 09:57 AM

1.Bạn muốn ngắt pline thành từng khúc hay để nguyên pline và chỉ chèn block vào thôi?

2.Có cần xác định điểm đầu pline hay đầu nào cũng được?

3.Ten block là gì?


  • 0

#3 phuongkq

phuongkq

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 February 2014 - 12:03 PM

Cảm ơn bạn Tot77 đã quan tâm tới yêu cầu của mình. 

- Polyline có vẫn giữ nguyên không thay đổi

- Có cần xác định điểm đầu chứ bạn vì còn cần biết đoạn cuối cùng cơ ạ

- Chỉ cần Block thôi, điểm chèn block vào đúng điểm endpoint được tạo ra, còn tên block tuỳ ý 


  • 0

#4 Hoan1111

Hoan1111

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2587 Bài viết
Điểm đánh giá: 692 (tốt)

Đã gửi 27 February 2014 - 01:16 PM

Kính nhờ các cao thủ viết cho mình một Lisp có thể chia đường polyline bất kỳ thành các đoạn có chiều dài bằng nhau, trừ đoạn cuối cùng. 

* cụ thể:

 

- Chọn chiều dài sẽ chia, ví dụ chọn số là 250,

- chọn đường polyline cần chia. (một hoặc nhiều đường)

- trường hợp chiều dài polyline được chọn bé hơn chiều dài nhập thì thông báo cho biết là "chiều dài polyline bé hơn chiều dài nhập, không thực hiện thao tác! - Chọn lại chiều dài nhập hoặc chọn đường poline khác". Đối với các đối tượng thỏa mãn thì vẫn thực hiện thao tác như thường!

- trong trường hợp chiều dài polyline đủ để thực hiện phép chia thì sẽ có thông báo ra: số đoạn được chia, và chiều dài đoạn lẻ cuối cùng. ví dụ Polyline có chiều dài là 1113 và chiều dài nhập vào là 250 thì thông báo thành công, kết quả là chia được 4 đoạn, chiều dài đoạn cuối còn lại là 113.

- Tại mỗi điểm ngắt bằng chiều dài nhập sẽ là điểm endpoint mới của polyline, trên polyline sau khi chia sẽ chỉ có các điểm này và có chèn một ký hiệu đánh dấu tại mỗi endpoint là một block đánh dấu nào đó (block này có để dễ nhận ra điểm đánh dấu hoặc để sửa nếu cần thiết).

 

Minh đã tham khảo qua bài viết này:

http://www.cadviet.c...-dai-khac-nhau/

nhưng thứ nhất là không chạy, và nếu chạy cũng khác với yêu cầu của mình!

Thanks sự giúp đỡ của cả nhà!

 

Theo như văn tả cảnh của anh thì cái của anh có thể làm thủ công được bằng cách  chia chèn block theo lệnh ME

Xem bài viết số #2 của anh Hiệp  trong cái này: http://www.cadviet.c...hia-duong-cong/


  • -1

66 Câu Phật Học Cho Cuộc Sống : http://ngocchinh.com...-cho-cuoc-song/

Gió đưa cây cải về trời / Rau răm ở lại chịu lời đắng cay...

 

 


#5 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 27 February 2014 - 04:22 PM

Bạn thử cái này xem, nó đo theo dài cung chứ không phải dài dây cung.

 

http://www.cadviet.c...7168_tmp1_9.lsp


  • 0

#6 phuongkq

phuongkq

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 03 March 2014 - 02:35 PM

Bạn thử cái này xem, nó đo theo dài cung chứ không phải dài dây cung.

 

http://www.cadviet.c...7168_tmp1_9.lsp

Trước tiên cám ơn bạn Tot77

Lisp này của bạn chưa hoàn chỉnh, khi  mình thực hiện chỉ thông báo ra các số điểm chia và đoạn cuối cùng dài bao nhiêu, chứ chưa tạo ra các điểm endpoin tương ứng với từng đoạn chia, và chưa chèn block vào các điểm đó được! Bạn có thể cải tiến nó được không?


  • 0

#7 phuongkq

phuongkq

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 03 March 2014 - 02:50 PM

Theo như văn tả cảnh của anh thì cái của anh có thể làm thủ công được bằng cách  chia chèn block theo lệnh ME

Xem bài viết số #2 của anh Hiệp  trong cái này: http://www.cadviet.c...hia-duong-cong/

Dạ nếu như làm thủ công thì em chia thủ công cho nó nhanh ạ! vì ngoài ra em còn muốn tạo endpoint và chỉ muốn giữ lại các điểm endpoint ở đúng đoạn cần chia nữa cơ ạ! theo lệnh ME thì em tìm mỏi mắt chẳng biết điểm chia nó tạo ra ở đâu nữa!


  • 0

#8 hvl_tedi

hvl_tedi

    Chưa sử dụng CAD

  • Members
  • Pip
  • 4 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 03 March 2014 - 04:32 PM

Bạn thu dùng lisp này xem đúng ý bạn không nhé.

- Command: DivL

- Lưu ý: Trước khi chạy Bạn tạo 2 Block để chèn vào điểm đầu và điểm cuối đoạn chia với tên là "STA-Point" và "END-Point" hoạc bạn có thể chèn block tên nào đó thì bạn có thể sủa trực tiếp tên Block vào lisp.


  • 0

#9 hvl_tedi

hvl_tedi

    Chưa sử dụng CAD

  • Members
  • Pip
  • 4 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 03 March 2014 - 04:33 PM

http://www.cadviet.c.../125838_hep.lsp


  • 0

#10 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 03 March 2014 - 08:19 PM

1.Mỗi pline chỉ có 1 startpoint và 1 endpoint mà thôi, trừ phi ban cắt pline thành từng khúc thì mỗi khúc đó sẽ có 1 endpoint riêng. Có thể bạn hiểu endpoint theo nghĩa là chèn vào vị trí đó 1 point chăng?

 

2. Trong lisp có một cái block ten là "tenblock" , vì tôi không biết block bạn muốn chèn tên gì, bạn có thể thay "tenblock" bằng tên cái block của bạn. Chú ý là block đó phải có trong bản vẽ hoặc trong đường dẫn Options -> Files -> Support file search path.

 

Cụ thể thì bạn nên gửi 1 bản vẽ nhỏ có 1 pline, 1 block, hình trước khi chạy lisp, sau khi chạy lisp, thì sẽ rõ ý của bạn hơn.


  • 1

#11 Hoan1111

Hoan1111

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2587 Bài viết
Điểm đánh giá: 692 (tốt)

Đã gửi 26 April 2014 - 03:20 PM

Theo như văn tả cảnh của anh thì cái của anh có thể làm thủ công được bằng cách  chia chèn block theo lệnh ME

Xem bài viết số #2 của anh Hiệp  trong cái này: http://www.cadviet.c...hia-duong-cong/

 

Dạ nếu như làm thủ công thì em chia thủ công cho nó nhanh ạ! vì ngoài ra em còn muốn tạo endpoint và chỉ muốn giữ lại các điểm endpoint ở đúng đoạn cần chia nữa cơ ạ! theo lệnh ME thì em tìm mỏi mắt chẳng biết điểm chia nó tạo ra ở đâu nữa!

 

 

 

Anh có thể xài lisp của bác Ketxu:

 

;; free lisp from cadviet.com
(defun c:vtx () ;main
(vl-load-com)
(initget "t b T B")
(setq ans (getkword "Th\U+00EAm hay b\U+1EDBt vextex ? [T / B]"))
(cond ((or(= ans "t")(= ans "T")(not ans))(addvtx))
        (T (delvtx))
)
)

(defun addvtx    (/    err  AcDoc     pl      ob   pk   pa     ap   typ  org
         ucs  ocs  pt    sp   ep      co   no   p1     p2   pt   ce
         a1   a2   bu    pw   wi      nw
        )
  (setq    m:err    *error*
    *error*    err
    AcDoc    (vla-get-activeDocument (vlax-get-acad-object))
    os (getvar "osmode")
    
  )

  (while (and
       (setq pl (entsel "\nCh\U+1ECDn ph\U+00E2n \U+0111o\U+1EA1n mu\U+1ED1n add th\U+00EAm vertex : "))
       (setq ob (vlax-ename->vla-object (car pl)))
       (setq typ (vla-get-Objectname ob))
       
     )
    (if    (or (= typ "AcDbPolyline")
        (and (member typ '("AcDb2dPolyline" "AcDb3dPolyline"))
         (= 0 (vla-get-Type ob))
        )
    )
      (progn
    (vla-StartUndoMark AcDoc)
    (setq pk
           (if (= typ "AcDb3dPolyline")
         (trans (osnap (cadr pl) "_nea") 1 0)
         (vlax-curve-getClosestPointToProjection
           ob
           (trans (cadr pl) 1 0)
           (mapcar '-
               (trans (getvar "VIEWDIR") 1 0)
               (trans '(0 0 0) 1 0)
           )
         )
           )
    )
    (setq ap (/ (* (getvar "APERTURE")
               (getvar "VIEWSIZE")
            )
            (cadr (getvar "SCREENSIZE"))
         )
    )
    (if (= typ "AcDbPolyline")
      (setq co (split-list (vlax-get ob 'Coordinates) 2))
      (setq co (split-list (vlax-get ob 'Coordinates) 3))
    )
    (cond
      ((equal pk (vlax-curve-getStartPoint ob) ap)
       (setq pa 0)
       (if (= (vla-get-Closed ob) :vlax-false)
         (setq sp (vlax-curve-getStartPoint ob)
           ep nil
         )
         (setq ep nil
           sp nil
         )
       )
      )
      ((equal pk (vlax-curve-getEndPoint ob) ap)
       (setq pa (1- (length co)))
       (if (= (vla-get-Closed ob) :vlax-false)
         (setq ep (vlax-curve-getEndPoint ob)
           sp nil
         )
         (setq ep nil
           sp nil
         )
       )
      )
      (T
       (setq pa (atoi (rtos (vlax-curve-getParamAtPoint ob pk) 2))
         ep nil
         sp nil
       )
      )
    )
    (if (and (/= typ "AcDb3dPolyline")
         (or
           (not    (equal (trans '(0 0 1) 1 0 T)
                   (setq no (vlax-get ob 'Normal))
                   1e-9
            )
           )
           (and    (= typ "AcDbPolyline")
            (/= 0 (vla-get-Elevation ob))
           )
           (and (= typ "AcDb2dPolyline") (/= 0 (caddar co)))
         )
        )
      (progn
        (setq ucs (vla-add
            (vla-get-UserCoordinateSystems AcDoc)
            (vlax-3d-point (setq org (getvar "UCSORG")))
            (vlax-3d-point (mapcar '+ org (getvar "UCSXDIR")))
            (vlax-3d-point (mapcar '+ org (getvar "UCSYDIR")))
            "addvtxUCS"
              )
          ocs (vla-add
            (vla-get-UserCoordinateSystems AcDoc)
            (vlax-3d-Point
              (setq org (vlax-curve-getStartPoint ob))
            )
            (vlax-3d-Point
              (mapcar '+ org (trans '(1 0 0) no 0))
            )
            (vlax-3d-Point
              (mapcar '+ org (trans '(0 1 0) no 0))
            )
            "addvtxOCS"
              )
        )
        (vla-put-activeUCS AcDoc ocs)
      )
    )
    (if (setq
          pt
           (getpoint (trans (vlax-curve-getPointAtParam ob pa) 0 1)
             "\nPick \U+0111i\U+1EC3m th\U+00EAm vertex : "
           )
        )
      (progn
        (and ep (setq pa (- (length co) 2)))
        (if    (/= typ "AcDb3dPolyline")
          (progn
        (setq p1 (trans (vlax-curve-getPointAtParam ob pa) 0 no)
              pt (trans pt 1 no)
              p2 (trans    (vlax-curve-getPointAtParam ob (1+ pa))
                0
                no
             )
        )
        (cond
          ((and ep (/= 0 (vla-getBulge ob pa)))
           ((lambda (a)
              (setq
            bu
             (list (cons (1+ (fix pa)) (/ (sin a) (cos a))))
              )
            )
             (/
               (- (angle p2 pt)
              (+ (angle p2 p1)
                 (* 2 (atan (vla-getBulge ob pa)))
                 pi
              )
               )
               2.0
             )
           )
          )
          ((and sp (/= 0 (vla-getBulge ob pa)))
           ((lambda (a)
              (setq
            bu (list (cons 0 (/ (sin a) (cos a))))
              )
            )
             (/
               (- (+ (angle p1 p2)
                 (* -2 (atan (vla-getBulge ob pa)))
                 pi
              )
              (angle p1 pt)
               )
               2.0
             )
           )
          )
          (T
           (setq
             ce    ((lambda (mid1 mid2)
               (inters mid1
                   (polar mid1
                      (+ (angle p1 pt) (/ pi 2))
                      1.0
                   )
                   mid2
                   (polar mid2
                      (+ (angle pt p2) (/ pi 2))
                      1.0
                   )
                   nil
               )
             )
              (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.0))
                  p1
                  pt
              )
              (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.0))
                  pt
                  p2
              )
            )
           )
           (if (or (= 0 (vla-getBulge ob pa)) (null ce))
             (setq a1 0.0
               a2 0.0
             )
             (if (< pi
                (ang<2pi (- (angle pt p2) (angle p1 pt)))
                (* 2 pi)
             )
               (setq a1    (- (ang<2pi (- (angle ce p1) (angle ce pt)))
                )
                 a2    (- (ang<2pi (- (angle ce pt) (angle ce p2)))
                )
               )
               (setq a1    (ang<2pi (- (angle ce pt) (angle ce p1)))
                 a2    (ang<2pi (- (angle ce p2) (angle ce pt)))
               )
             )
           )
           (setq bu
              (list    (cons pa (/ (sin (/ a1 4.0)) (cos (/ a1 4.0))))
                (cons (1+ (fix pa))
                      (/ (sin (/ a2 4.0)) (cos (/ a2 4.0)))
                )
              )
           )
          )
        )
        (vla-getWidth ob pa 'sw 'ew)
        (cond
          ((equal pk (vlax-curve-getStartPoint ob) ap)
           (setq
             pw    (+ sw
               (/ (* (distance p1 pt) (- ew sw))
                  (+ (distance pt p1) (distance p1 p2))
               )
            )
           )
          )
          ((equal pk (vlax-curve-getEndPoint ob) ap)
           (setq
             pw    (+ sw
               (/ (* (distance p1 p2) (- ew sw))
                  (+ (distance pt p2) (distance p1 p2))
               )
            )
           )
          )
          (T
           (setq
             pw    (+ sw
               (/ (* (distance p1 pt) (- ew sw))
                  (+ (distance p1 pt) (distance pt p2))
               )
            )
           )
          )
        )
        (setq wi (list (list pa sw pw) (list (1+ pa) pw ew))
              nw (1+ pa)
        )
        (repeat    (- (fix (vlax-curve-getEndParam ob)) (1+ pa))
          (vla-getWidth ob nw 'sw 'ew)
          (setq wi (cons (list (setq nw (1+ nw)) sw ew) wi))
        )
          )
        )
        (cond
          ((= typ "AcDbPolyline")
           (setq pt (list (car pt) (cadr pt)))
          )
          ((= typ "AcDb3dPolyline") (setq pt (trans pt 1 0)))
        )
        (or sp (setq pa (1+ pa)))
        (cond
          (sp (setq co (cons pt co)))
          (ep (setq co (append co (list pt))))
          (T
           (setq co    (append    (sublist co 0 pa)
                (cons pt (sublist co pa nil))
            )
           )
          )
        )
        (or
          (= typ "AcDb3dPolyline")
          (while (<= (setq pa (1+ pa)) (vlax-curve-getEndParam ob))
        (setq bu (cons (cons pa (vla-getBulge ob (1- pa))) bu))
          )
        )
        (vlax-put ob 'Coordinates (apply 'append co))
        (or    (= typ "AcDb3dPolyline")
        (and
          (mapcar '(lambda (x) (vla-setBulge ob (car x) (cdr x)))
              bu
          )
          (mapcar '(lambda (x)
                 (vla-setWidth ob (car x) (cadr x) (caddr x))
               )
              wi
          )
        )
        )
        (and ucs (vla-put-activeUCS AcDoc ucs))
        (vla-EndUndoMark AcDoc)
      )
    )
      )
      (progn
    
    (alert "Ch\U+1ECDn sai \U+0111\U+1ED1i t\U+01B0\U+1EE3ng!")
    (exit)
      )
    )
  )
    (and ocs (vla-delete ocs) (setq ocs nil))
  (setq    *error*    m:err
    m:err nil
  )
  (princ)
)

(defun DelVtx    (/ err os pt ent typ plst par blst n wlst)
  (vl-load-com)
  (setq    m:err    *error*
    *error*    err
    os    (getvar "OSMODE")
      )
  (setvar "OSMODE" 1)
  (while (setq pt
        (getpoint
          "\nCh\U+1ECDn vertex c\U+1EA7n x\U+00F3a :"
        )
     )
    (if    (and
      (setq    ent (ssget pt
               '((-4 . "<OR")
                 (0 . "LWPOLYLINE")
                 (-4 . "<AND")
                 (0 . "POLYLINE")
                 (-4 . "<NOT")
                 (-4 . "&")
                 (70 . 118)
                 (-4 . "NOT>")
                 (-4 . "AND>")
                 (-4 . "OR>")
                )
            )
      )
      (setq ent (vlax-ename->vla-object (ssname ent 0)))
      (setq typ (vla-get-ObjectName ent))
    )
      (if
    (and
      (setq    plst (if (= typ "AcDbPolyline")
               (split-list (vlax-get ent 'Coordinates) 2)
               (split-list (vlax-get ent 'Coordinates) 3)
             )
      )
      (< 2 (length plst))
    )
     (progn
       (vla-StartUndoMark
         (vla-get-ActiveDocument (vlax-get-acad-object))
       )
       (setq pt   (trans pt 1 0)
         par  (cond
            ((equal pt (vlax-curve-getStartPoint ent) 1e-9)
             0
            )
            ((equal pt (vlax-curve-getEndPoint ent) 1e-9)
             (1- (length plst))
            )
            (T
             (atoi (rtos (vlax-curve-getParamAtPoint ent pt) 2)
             )
            )
              )
         blst nil
         wlst nil
         n    0
       )
       (if (/= typ "AcDb3dPolyline")
         (progn
           (repeat (length plst)
         (if (/= n par)
           (setq
             blst
              (cons (cons (length blst) (vla-getBulge ent n))
                blst
              )
           )
         )
         (setq n (1+ n))
           )
           (if (/= 0 par)
         (progn
           (vla-getWidth ent (1- par) 'swid1 'ewid1)
           (vla-getWidth ent par 'swid2 'ewid2)
           (setq wlst (cons (list (1- par) swid1 ewid2) wlst))
         )
           )
           (repeat
         (- (setq n (1- (fix (vlax-curve-getEndParam ent))))
            par
         )
          (vla-getWidth ent n 'swid 'ewid)
          (setq
            wlst (cons (list (setq n (1- n)) swid ewid) wlst)
          )
           )
         )
       )
       (vlax-put ent
             'Coordinates
             (apply 'append (vl-remove (nth par plst) plst))
       )
       (or (= typ "AcDb3dPolyline")
           (and
         (mapcar '(lambda (x) (vla-setBulge ent (car x) (cdr x)))
             blst
         )
         (mapcar '(lambda (x)
                (vla-setWidth ent (car x) (cadr x) (caddr x))
              )
             wlst
         )
           )
       )
       (vla-EndUndoMark
         (vla-get-ActiveDocument (vlax-get-acad-object))
       )
     )
     (progn
       (alert "\nKh\U+00F4ng th\U+1EC3 x\U+00F3a \U+0111\U+01B0\U+1EE3c, Pline n\U+00E0y ch\U+1EC9 c\U+00F3 1 ph\U+00E2n \U+0111o\U+1EA1n!")
       (exit)
     )
      )
      (progn
    (alert "Ch\U+1ECDn sai \U+0111\U+1ED1i t\U+01B0\U+1EE3ng!")
    (exit)
      )
    )
  )
  (setvar "OSMODE" os)
  (setq    *error*    m:err
    m:err nil
  )
  (princ)
)

;;; SUBLIST Return a sub-list
;;;
;;; Arguments
;;; lst : a list
;;; start : start index for the sub-list (first item = 0)
;;; leng : sub-list length (or nil)
;;;
;;; Examples :
;;; (sublist '(1 2 3 4 5 6) 2 2) -> (3 4)
;;; (sublist '(1 2 3 4 5 6) 2 nil) -> (3 4 5 6)

(defun sublist (lst start leng / n r)
  (if (or (not leng) (< (- (length lst) start) leng))
    (setq leng (- (length lst) start))
  )
  (setq n (+ start leng))
  (repeat leng
    (setq r (cons (nth (setq n (1- n)) lst) r))
  )
)

;; SPLIT-LIST Split a list into sub-lists
;; Arguments
;; - lst : the list to be splited
;; - num : an integer, the number of items of sub-lists
;; Examples :
;; (split-list '(1 2 3 4 5 6 7 8) 2) -> ((1 2) (3 4) (5 6) (7 8))
;; (split-list '(1 2 3 4 5 6 7 8) 3) -> ((1 2 3) (4 5 6) (7 8))

(defun split-list (lst n)
  (if lst
    (cons (sublist lst 0 n)
      (split-list (sublist lst n nil) n)
    )
  )
)

;;; ANG<2PI
;; Transform any angle (in radians) into its equivalent between 0 and 2*pi

(defun ang<2pi (ang)
  (if (and (<= 0 ang) (< ang (* 2 pi)))
    ang
    (ang<2pi (rem (+ ang (* 2 pi)) (* 2 pi)))
  )
)


(defun err (msg)
    (if    (or
      (= msg "Function cancelled")
      (= msg "quit / exit abort")
    )
      (princ)
      (princ (strcat "\nError: " msg))
    )
    (vla-EndUndoMark
      (vla-get-ActiveDocument (vlax-get-acad-object))
    )
    (setvar "OSMODE" os)
    (setq *error* m:err
      m:err    nil
    )
  )
 


  • 0

66 Câu Phật Học Cho Cuộc Sống : http://ngocchinh.com...-cho-cuoc-song/

Gió đưa cây cải về trời / Rau răm ở lại chịu lời đắng cay...