_

[lisp] numeracja po ścieżce

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

[lisp] numeracja po ścieżce

Postprzez ziele_o2k » paź 12, 2018 23:32

Tak mnie naszło - może komuś się przyda :)
Kod: Zaznacz cały
(defun c:foo
    (   /
        vector comp
       
        num_path ss i e c lst str
    )
    (defun vector (p1 p2)
        (mapcar '(lambda (%1 %2) (- %2 %1) ) p1 p2 )
    )
    (defun comp (opr1 item1 opr2 item2)
        (if (equal (item2 a) (item2 b) 0.1);replace 0.1 with fuzz
            (opr1 (item1 a) (item1 b))
            (opr2 (item2 a) (item2 b))
        )
    )
    (setq num_path (car (entsel "\nSelect path: ")))
    (princ "\nSelect circles")
    (setq ss (ssget (list (cons 0 "CIRCLE"))))
    ;get list of circles center points
    (repeat (setq i (sslength ss))
        (setq e (ssname ss (setq i (1- i)))
              c (cdr (assoc 10 (entget e)))
        )
        (if lst
            (setq lst (cons c lst))
            (setq lst (list c))
        )
    )
    ;extend list of coordinates to other necessary data
    (setq lst
        (mapcar
            '(lambda (% /  tmp_1 tmp_2 vec_pt vec_path tmp_3 )
                (setq tmp_1 (vlax-curve-getClosestPointTo num_path %))
                (setq tmp_2 (vlax-curve-getParamAtPoint num_path tmp_1))
               
                (setq vec_pt (vector % tmp_1))
                (setq vec_path (vlax-curve-getfirstderiv num_path tmp_2))
                (if (minusp  (sin (- (angle '(0 0 0) vec_pt) (angle '(0 0 0) vec_path))))
                    (setq tmp_3 (distance tmp_1 %))
                    (setq tmp_3 (* -1 (distance tmp_1 %)))
                )
                (list tmp_2 tmp_3 %)
            )
            lst
        )
    )
    (setq lst
        (mapcar
            '(lambda (%) (nth % lst))
            (vl-sort-i
                lst
                '(lambda (a b) (comp < car > cadr))
            )
        )
    )
    (setq str 0)
    (foreach # lst
        (entmakex
            (list
                (cons 0 "TEXT")
                (cons 1 (itoa (setq str (1+ str))))
                (cons 10 (caddr #))
                (cons 40 10)
                (cons 50 0)
            )
        )
    )
    (princ)
)

i klik:
Obrazek
oczywiście całość do sCADPACKowania itp, itd

kilka słów więcej tutaj:
https://www.cadtutor.net/forum/topic/66203-numbering-along-path/
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 732
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [lisp] numeracja po ścieżce

Postprzez SOYER__1 » paź 13, 2018 00:43

Gorąco zachęcam do częstszych publikacji tego typu.
Nie chodzi o sam kod. Ciekawe jest to CO użytkownicy AC automatyzują i jakie maja na to pomysły.
Nie jednokrotnie w ten sposób zaczerpnąłem z Forum . Dziś nie wyobrażam sobie pracy bez takich "ułatwiaczy" .

Pozdr.
SOYER__1
 
Posty: 100
Dołączył(a): wrz 29, 2015 10:07


Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników