15.11.2013 06:50    

alirizasahin
Birçok arkadaşın işine yarayabileceğine inandığım bir lispi paylaşıyorum.
(lee-mac.com'dan alıntı)
KOD:

Kod:

;;-------------=={ Length Between Intersections }==-----------;;
;;                                                            ;;
;;  Displays the length of segments of a curve divided at     ;;
;;  intersections with other objects.                         ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Version 1.4    -    26-04-2011                            ;;
;;------------------------------------------------------------;;

(defun c:IntLen ( / *error* _iscurveobject e )

  (defun *error* ( msg )
    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
        (princ (strcat "\n** Error: " msg " **")))
    (princ)
  )

  (defun _IsCurveObject ( entity / param )
    (and
      (not
        (vl-catch-all-error-p
          (setq param
            (vl-catch-all-apply 'vlax-curve-getendparam (list entity))
          )
        )
      )
      param
    )
  )

  (if (= 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (getvar 'CLAYER))))))
    (princ "\n--> Current Layer Locked.") 
    (while
      (progn (setvar 'ERRNO 0) (setq e (car (entsel)))
        (cond
          (
            (= 7 (getvar 'ERRNO))

            (princ "\n--> Missed, Try again.")
          )
          (
            (eq 'ENAME (type e))

            (if (_iscurveobject e)
              (LM:IntersectionLengths e)
              (princ "\n--> Invalid Object Selected.")
            )
            t
          )
        )
      )
    )
  )
  (princ)
)

;;------------------------------------------------------------;;

(defun c:IntLenM ( / *error* ss i )

  (defun *error* ( msg )
    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
        (princ (strcat "\n** Error: " msg " **")))
    (princ)
  )

  (if (= 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (getvar 'CLAYER))))))
    (princ "\n--> Current Layer Locked.")
    (if (setq ss (ssget '((0 . "ARC,CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE"))))
      (repeat (setq i (sslength ss))
        (LM:IntersectionLengths (ssname ss (setq i (1- i))))
      )
    )
  )

  (princ)
)

;;------------------------------------------------------------;;

(defun LM:IntersectionLengths

  ( e  ;; Entity name
   
    / *error* _startundo _endundo _groupbynum _sortbyparam _makereadable _isannotative _uniquefuzz
      a acspc c d d1 d2 da e i l ll m o ss ta to ts ur x y
  )

  (setq acdoc (cond ( acdoc ) ( (vla-get-activedocument (vlax-get-acad-object)) ))
        acspc (vlax-get-property acdoc (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace))
  )

  (defun *error* ( msg )
    (if acdoc (_EndUndo acdoc))
    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
        (princ (strcat "\n** Error: " msg " **")))
    (princ)
  )

  (defun _StartUndo ( doc ) (_EndUndo doc)
    (vla-StartUndoMark doc)
  )

  (defun _EndUndo ( doc )
    (if (= 8 (logand 8 (getvar 'UNDOCTL))) (vla-EndUndoMark doc))
  )

  (defun _GroupByNum ( l n / r)
    (if l
      (cons
        (reverse (repeat n (setq r (cons (car l) r) l (cdr l)) r))
        (_GroupByNum l n)
      )
    )
  )

  (defun _SortbyParam ( e l )
    (vl-sort l '(lambda ( a b ) (< (vlax-curve-getParamatPoint e a) (vlax-curve-getParamatPoint e b))))
  )

  (defun _MakeReadable ( a )
    (
      (lambda ( a )
        (cond
          ( (and (> a (/ pi 2)) (<= a pi))

            (- a pi)
          )
          ( (and (> a pi) (<= a (/ (* 3 pi) 2)))

            (+ a pi)
          )
          ( a )
        )
      )
      (rem a (* 2 pi))
    )
  )

  (defun _isAnnotative ( style / object annotx )
    (and
      (setq object (tblobjname "STYLE" style))
      (setq annotx (cadr (assoc -3 (entget object '("AcadAnnotative")))))
      (= 1 (cdr (assoc 1070 (reverse annotx))))
    )
  )

  (defun _uniquefuzz ( lst fuzz )
    (if lst
      (cons (car lst)
        (_uniquefuzz
          (vl-remove-if '(lambda ( x ) (equal x (car lst) fuzz)) (cdr lst)) fuzz
        )
      )
    )
  )

  (setq ts
    (/ (getvar 'textsize)
      (if (_isAnnotative (getvar 'textstyle))
        (cond ( (getvar 'cannoscalevalue) ) ( 1.0 )) 1.0
      )
    )
  )

  (_StartUndo acdoc)
 
  (vla-getBoundingBox (setq o (vlax-ename->vla-object e)) 'll 'ur)

  (mapcar '(lambda ( x ) (set x (vlax-safearray->list (eval x)))) '(ll ur))

  (if
    (setq l
      (_sortbyparam e
        (_uniquefuzz
          (apply 'append
            (repeat
              (setq i
                (sslength
                  (ssdel e
                    (setq ss
                      (ssget "_C" (trans ur 0 1) (trans ll 0 1) '((0 . "ARC,CIRCLE,ELLIPSE,*LINE")))
                    )
                  )
                )
              )
              (setq l
                (cons
                  (_groupbynum
                    (vlax-invoke o 'intersectwith
                      (vlax-ename->vla-object (ssname ss (setq i (1- i)))) acextendnone
                    )
                    3
                  )
                  l
                )
              )
            )
          )
          1e-8
        )
      )
    )
    (if (not (vlax-curve-isClosed e))
      (progn
        (or
          (equal (vlax-curve-getStartParam e) (vlax-curve-getParamatPoint e (car l)) 0.001)
          (setq l (cons (vlax-curve-getStartPoint e) l))
        )
        (or
          (equal (vlax-curve-getEndParam e) (vlax-curve-getParamatPoint e (last l)) 0.001)
          (setq l (append l (list (vlax-curve-getEndPoint e))))
        )
      )
      (setq c l)
    )
    (if (vlax-curve-isClosed e)
      (setq l (list (vlax-curve-getStartPoint e)) c l)
      (setq l (list (vlax-curve-getStartPoint e) (vlax-curve-getEndPoint e)))
    )
  )

  (while (cadr l) (setq x (car l) y (cadr l) l (cdr l))
    (setq m
      (vlax-curve-getPointatDist e
        (/ (+ (vlax-curve-getDistatPoint e y) (vlax-curve-getDistAtPoint e x)) 2.)
      )
    )
    (setq d
      (abs
        (- (vlax-curve-getDistatPoint e y) (vlax-curve-getDistAtPoint e x))
      )
    )
    (setq a
      (angle '(0. 0. 0.)
        (vlax-curve-getFirstDeriv e (vlax-curve-getParamatPoint e m))
      )
    )
    (setq ta (_makereadable a))

    (setq to (vla-AddText acspc (rtos d) (vlax-3D-point '(0. 0. 0.)) ts))
    (vla-put-Alignment to acAlignmentMiddleCenter)
    (vla-put-TextAlignmentPoint to (vlax-3D-point (polar m (+ ta (/ pi 2.)) (* 1.1 ts))))
    (vla-put-rotation to ta)   
  )
 
  (if (vlax-curve-isclosed e)
    (progn
      (if (= 1 (length c)) (setq c (append c c)))
      (setq d
        (+
          (setq d1 (vlax-curve-getDistatPoint e (car c)))
          (setq d2 (- (vlax-curve-getdistatparam e (vlax-curve-getendparam e)) (vlax-curve-getdistatpoint e (last c))))
        )
      )                 
      (setq m
        (vlax-curve-getPointatDist e
          (if (< d1 (setq da (/ (+ d1 d2) 2.)))
            (setq da (- (vlax-curve-getdistatparam e (vlax-curve-getendparam e)) (- da d1)))
            (setq da (- da d2))
          )
        )
      )
      (setq a
        (angle '(0. 0. 0.)
          (vlax-curve-getFirstDeriv e (vlax-curve-getParamatPoint e m))
        )
      )
      (setq ta (_makereadable a))

      (setq to (vla-AddText acspc (rtos d) (vlax-3D-point '(0. 0. 0.)) ts))
      (vla-put-Alignment to acAlignmentMiddleCenter)
      (vla-put-TextAlignmentPoint to (vlax-3D-point (polar m (+ ta (/ pi 2.)) (* 1.1 ts))))
      (vla-put-rotation to ta)
    )
  )

  (_EndUndo acdoc)
  (princ)
)

;;------------------------------------------------------------;;

(vl-load-com)
(princ)
(princ "\n:: IntLen.lsp | Version 1.4 | © Lee Mac 2011 www.lee-mac.com ::")
(princ "\n:: Type "IntLen" or "IntLenM" to Invoke ::")
(princ)

;;------------------------------------------------------------;;
;;                         End of File                        ;;
;;------------------------------------------------------------;;

ehya (15.11.2013 15:41 GMT)

15.11.2013 06:53    

alirizasahin
Yönetici arkadaşlarım, başka bir siteden kaynak göstererek lisp paylaşmak sıkıntı yaratır mı?

> 1 <
Copyright © 2004-2022 SQL: 0.924 saniye - Sorgu: 47 - Ortalama: 0.01965 saniye