_

Problem z LISP NXYZ

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".

Problem z LISP NXYZ

Postprzez kg91 » cze 21, 2018 10:48

Dzień dobry,
chciałem skorzystać z lispa NXYZ https://cad.pl/component/downloads/poka ... -nxyz.html ale nie działa tak jak powinine tzn napotykam dwa problemy:
1. Nie numeruje kolejno cyfr, daje po prostu w każdym punkcie cyfrę 0.
2. Wyłącza "snap" tzn po każdorazowym wskazaniu punktu wyłącza snap i muszę ręcznie go włączyć a na dodatek ręcznie od nowa ustawić do jakich obiektów/przecięć/itd ma się przyklejać
3. Chciałbym trochę inne formatowanie bez tych zer na początku współrzędnych i w takim formacie:

1 X-5563561.0100 Y-6579065.3700
2 X-6579070.1081 Y-5563556.8726
3 X-6579079.6315 Y-5563565.1055
4 X-6579086.6243 Y-5563574.7690
5 X-6579083.7435 Y-5563576.8536
6 X-6579093.6349 Y-5563589.9287
7 X-6579093.9365 Y-5563590.3275
8 X-6579097.6788 Y-5563586.9814

Ktoś da radę dostosować to do moich potrzeb? Najważniejsze dwa pierwsze punkty.
kg91
 
Posty: 21
Dołączył(a): lut 14, 2018 10:44

Re: Problem z LISP NXYZ

Postprzez ziele_o2k » cze 21, 2018 11:11

Z całym szacunkiem dla autora tamtego lispa, ale jest to narzędzie, które w mojej opinii nie usprawnia pracy - uwierz mi, można tysiące współrzędnych wywalać bezpośrednio do excela w sekundę.
Dużo pracuję na współrzędnych import/export/aktualizacja itp.
Powiedz jakie są twoje podstawowe potrzeby do pracy na współrzędnych to podzielę się tym co trza.
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 735
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: Problem z LISP NXYZ

Postprzez kg91 » cze 22, 2018 14:36

W zasadzie to potrzebne mi to do wyznaczania punktów załamań linii do zudpu.

Ogólnie to rysuję gazociąg polilinią, oznaczam je kolejno cyframi narzędziem mtext. Następnie potrzebuję współrzędne załamań w formacie np 4 cyfry po przecinku x i y wyeksportować do pliku txt ale może być w sumie excel też bo co zudp to inne wymagania formatowania. Najlepiej żebym mógł ręcznie zaznaczyć których załamań współrzędne potrzebuję.

Coś jeszcze muszę podać?
kg91
 
Posty: 21
Dołączył(a): lut 14, 2018 10:44

Re: Problem z LISP NXYZ

Postprzez kg91 » wrz 28, 2018 14:28

ziele_o2k napisał(a):Z całym szacunkiem dla autora tamtego lispa, ale jest to narzędzie, które w mojej opinii nie usprawnia pracy - uwierz mi, można tysiące współrzędnych wywalać bezpośrednio do excela w sekundę.
Dużo pracuję na współrzędnych import/export/aktualizacja itp.
Powiedz jakie są twoje podstawowe potrzeby do pracy na współrzędnych to podzielę się tym co trza.


Zielu żyjesz? :>
kg91
 
Posty: 21
Dołączył(a): lut 14, 2018 10:44

Re: Problem z LISP NXYZ

Postprzez ziele_o2k » paź 01, 2018 14:08

żyjesz, żyjesz. Tylko kuźwa nie składa mi się nic w czasie. masz wiadomość ode mnie na pm.
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 735
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: Problem z LISP NXYZ

Postprzez Tyomex » paź 01, 2018 16:42

Ja to robię tak:
używam najpierw:
1. byle jaki lisp który tworzy punkty na końcach i początkach linii (bo w ZUDP chcą rozbite obiekty, stąd linie) ewentualnie można ręcznie powstawiać, ale po co się męczyć.
2. "Replace Points with Block (PTB)" Lisp, który zamienia punkty na blok. Blok trzeba sobie zdefiniować z atrybutem "numer" i ukrytym atrybutem mającym field-a ze współrzędnymi wstawieni.
3. "AutoLabelAttributesV1" lisp, który automatycznie numeruje atrybuty bloku
Potem polecenie ATTOUT - i plik z rzędnymi przypisanymi do numeru gotowy.
Można potem ewentualnie BURST-em rozbić bloki żeby na ZUDP się nie burzyli, że jakieś dziwne obiekty dostają.

Jak jest trasa na kilkaset punktów to z paru godzin roboty robi się 2 minuty.
Pozdro
Avatar użytkownika
Tyomex
 
Posty: 390
Dołączył(a): paź 09, 2014 15:06

Re: Problem z LISP NXYZ

Postprzez ziele_o2k » paź 12, 2018 08:35

15 min roboty i jest :)
Warunek jeden, polilinia musi być ciągła.
potem Ci dopiszę fragment kodu, który rozbije Ci polilinię na pojedyncze segmenty (chyba, że zamiast pojedynczych segmentów z polilinii możesz mieć linie, to wystarczy standardowe explode).
Jak będziesz mieć pytania to strzelaj.
Cadpack musi być wczytany
Kod: Zaznacz cały
(defun c:plec
    ( /
        LM:group<n LM:group<n-sub LM:SelectIf LM:roundm LM:roundto
        ent fn obj coords num res
    )

    ;; Round Multiple  -  Lee Mac
    ;; Rounds 'n' to the nearest multiple of 'm'

    (defun LM:roundm ( n m )
        (* m (fix ((if (minusp n) - +) (/ n (float m)) 0.5)))
    )

    ;; Round To  -  Lee Mac
    ;; Rounds 'n' to 'p' decimal places

    (defun LM:roundto ( n p )
        (LM:roundm n (expt 10.0 (- p)))
    )
   
    ;; Group by Number  -  Lee Mac
    ;; Groups a list 'l' into a list of lists, each of max length 'n'

    (defun LM:group<n ( l n )
        (if l (LM:group<n-sub (cons nil l) n n))
    )
    (defun LM:group<n-sub ( l m n )
        (if (and (cdr l) (< 0 n))
            (LM:group<n-sub (cons (cons (cadr l) (car l)) (cddr l)) m (1- n))
            (cons (reverse (car l)) (LM:group<n (cdr l) m))
        )
    )
    ;;---------------------=={ Select if }==----------------------;;
    ;;                                                            ;;
    ;;  Provides continuous selection prompts until either a      ;;
    ;;  predicate function is validated or a keyword is supplied. ;;
    ;;------------------------------------------------------------;;
    ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
    ;;------------------------------------------------------------;;
    ;;  Arguments:                                                ;;
    ;;  msg  - prompt string                                      ;;
    ;;  pred - optional predicate function [selection list arg]   ;;
    ;;  func - selection function to invoke                       ;;
    ;;  keyw - optional initget argument list                     ;;
    ;;------------------------------------------------------------;;
    ;;  Returns:  Entity selection list, keyword, or nil          ;;
    ;;------------------------------------------------------------;;

    (defun LM:SelectIf ( msg pred func keyw / sel ) (setq pred (eval pred)) 
        (while
            (progn (setvar 'ERRNO 0) (if keyw (apply 'initget keyw)) (setq sel (func msg))
                (cond
                    (   (= 7 (getvar 'ERRNO))
                        (princ "\nMissed, Try again.")
                    )
                    (   (eq 'STR (type sel))
                        nil
                    )
                    (   (vl-consp sel)
                        (if (and pred (not (pred sel)))
                            (princ "\nInvalid Object Selected.")
                        )
                    )
                )
            )
        )
        sel
    )
   
    (if (and
            (setq ent
                (LM:SelectIf
                    "\nWskaż polilinię do opisania: "
                    (lambda ( x ) (eq "LWPOLYLINE" (cdr (assoc 0 (entget (car x))))))
                    entsel
                    nil
                )
            )
            (setq fn (getfiled "Create Output File" (getvar 'dwgprefix) "txt" 1))
        )
       
        (progn
            (setq obj (vlax-ename->vla-object (car ent)))
            (setq coords (LM:group<n (safearray-value (vlax-variant-value (vlax-get-property obj 'coordinates))) 2))
            (setq num 0)
            (setq res
                (mapcar 
                    '(lambda (%)
                        (cd:ACX_AddText
                            (cd:ACX_ASpace)
                            (itoa (setq num (1+ num)))
                            %
                            1 ; tutaj definiujesz wysokość tekstu
                            0
                        )
                        (strcat
                            (itoa num) "\t" (cd:CON_Real2Str (car %) 2 4) "\t" (cd:CON_Real2Str (cadr %) 2 4)
                        )
                    )
                    coords
                )
            )
            (cd:SYS_WriteFile fn (append (list "NR\tX\tY" "") res) nil)
            (startapp "explorer" fn)
        )
        (alert "Wystąpił błąd.")
    )
    (princ)
)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 735
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: Problem z LISP NXYZ

Postprzez kg91 » paź 30, 2018 11:10

działa i jest super! jak dałoby radę, to prosiłbym o przesunięcie cyfry tak by jej środek był nad punktem (powiedzmy że przesunięcie o 0.25 w lewo względem tego co jest teraz) i 0,5 jednostki w górę?
kg91
 
Posty: 21
Dołączył(a): lut 14, 2018 10:44

Re: Problem z LISP NXYZ

Postprzez ziele_o2k » lis 05, 2018 09:48

kg91 napisał(a):działa i jest super! jak dałoby radę, to prosiłbym o przesunięcie cyfry tak by jej środek był nad punktem (powiedzmy że przesunięcie o 0.25 w lewo względem tego co jest teraz) i 0,5 jednostki w górę?

Zobacz teraz
Kod: Zaznacz cały
(defun c:plec
    ( /
        LM:group<n LM:group<n-sub LM:SelectIf LM:roundm LM:roundto
        ent fn obj coords num res
    )

    ;; Round Multiple  -  Lee Mac
    ;; Rounds 'n' to the nearest multiple of 'm'

    (defun LM:roundm ( n m )
        (* m (fix ((if (minusp n) - +) (/ n (float m)) 0.5)))
    )

    ;; Round To  -  Lee Mac
    ;; Rounds 'n' to 'p' decimal places

    (defun LM:roundto ( n p )
        (LM:roundm n (expt 10.0 (- p)))
    )
   
    ;; Group by Number  -  Lee Mac
    ;; Groups a list 'l' into a list of lists, each of max length 'n'

    (defun LM:group<n ( l n )
        (if l (LM:group<n-sub (cons nil l) n n))
    )
    (defun LM:group<n-sub ( l m n )
        (if (and (cdr l) (< 0 n))
            (LM:group<n-sub (cons (cons (cadr l) (car l)) (cddr l)) m (1- n))
            (cons (reverse (car l)) (LM:group<n (cdr l) m))
        )
    )
    ;;---------------------=={ Select if }==----------------------;;
    ;;                                                            ;;
    ;;  Provides continuous selection prompts until either a      ;;
    ;;  predicate function is validated or a keyword is supplied. ;;
    ;;------------------------------------------------------------;;
    ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
    ;;------------------------------------------------------------;;
    ;;  Arguments:                                                ;;
    ;;  msg  - prompt string                                      ;;
    ;;  pred - optional predicate function [selection list arg]   ;;
    ;;  func - selection function to invoke                       ;;
    ;;  keyw - optional initget argument list                     ;;
    ;;------------------------------------------------------------;;
    ;;  Returns:  Entity selection list, keyword, or nil          ;;
    ;;------------------------------------------------------------;;

    (defun LM:SelectIf ( msg pred func keyw / sel ) (setq pred (eval pred)) 
        (while
            (progn (setvar 'ERRNO 0) (if keyw (apply 'initget keyw)) (setq sel (func msg))
                (cond
                    (   (= 7 (getvar 'ERRNO))
                        (princ "\nMissed, Try again.")
                    )
                    (   (eq 'STR (type sel))
                        nil
                    )
                    (   (vl-consp sel)
                        (if (and pred (not (pred sel)))
                            (princ "\nInvalid Object Selected.")
                        )
                    )
                )
            )
        )
        sel
    )
   
    (if (and
            (setq ent
                (LM:SelectIf
                    "\nWskaż polilinię do opisania: "
                    (lambda ( x ) (eq "LWPOLYLINE" (cdr (assoc 0 (entget (car x))))))
                    entsel
                    nil
                )
            )
            (setq fn (getfiled "Create Output File" (getvar 'dwgprefix) "txt" 1))
        )
       
        (progn
            (setq obj (vlax-ename->vla-object (car ent)))
            (setq coords (LM:group<n (safearray-value (vlax-variant-value (vlax-get-property obj 'coordinates))) 2))
            (setq num 0)
            (setq res
                (mapcar 
                    '(lambda (% / txt)
                        (setq txt
                            (cd:ACX_AddText
                                (cd:ACX_ASpace)
                                (itoa (setq num (1+ num)))
                                %
                                1 ; tutaj definiujesz wysokość tekstu
                                0
                            )
                        )
                        (vla-put-Alignment txt 13)
                        (vla-put-TextAlignmentPoint
                            txt
                            (vlax-3d-point
                                (list
                                    (car %)
                                    (+ 0.5 (cadr %)) ; zamiast 0.5 daj swój offset
                                    0
                                )
                            )
                        )
                        (strcat
                            (itoa num) "\t" (cd:CON_Real2Str (car %) 2 4) "\t" (cd:CON_Real2Str (cadr %) 2 4)
                        )
                    )
                    coords
                )
            )
            (cd:SYS_WriteFile fn (append (list "NR\tX\tY" "") res) nil)
            (startapp "explorer" fn)
        )
        (alert "Wystąpił błąd.")
    )
    (princ)
)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 735
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań


Powrót do AutoCAD

Kto przegląda forum

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