_

[LISP] Łączna suma wymiarow

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] Łączna suma wymiarow

Postprzez ziele_o2k » sty 08, 2018 23:51

Bry :)

Zainspirowany tym wpisem na kojackowym blogu postanowiłem coś dać od siebie :)
Narzędzie służy do sumowania wartości wymiarów względem wpisanego tekstu w wymiarze.

Styl tabeli itd. należy oczywiście dostosować, ale na gifie wygląda ładnie :)

Klik:
example.gif


A tutaj kod:
Kod: Zaznacz cały
;; ============================================== ;;
;;                                                ;;
;;   @@@@@ @ @@@@ @    @@@@      @@@   @@  @  @   ;;
;;      @  @ @    @    @        @   @ @  @ @ @    ;;
;;     @   @ @@@@ @    @@@@     @   @   @  @@     ;;
;;    @    @ @    @    @        @   @  @   @ @    ;;
;;   @@@@@ @ @@@@ @@@@ @@@@ @@@  @@@  @@@@ @  @   ;;
;;                                                ;;
;; ============================================== ;;
;; 21:42 2018-01-08 © ziele_o2k                   ;;
;; ============================================== ;;
(defun c:detsum ( / pz:sub _ss _k _v _res _tab _row)
  (defun pz:sub ( @key @val @lst / _itm )
    (if (setq _itm (assoc @key @lst))
      (subst (cons @key (+ @val (cdr _itm))) _itm @lst)
      (cons  (cons @key @val) @lst)
    )
  )
  (if
    (and
      (setq _ss (ssget '((0 . "DIM*"))))
      (setq _pt (cd:USR_GetPoint "\nWskaz punkt wstawienia tabeli: " 1 nil))
    )
    (progn
      (foreach %1 (cd:SSX_Convert _ss 0)
        (setq
          _enx  (entget %1)
          _k    (cdr(assoc  1 _enx))
          _v    (cdr(assoc 42 _enx))
          _res  (pz:sub _k _v _res)
        )
      )
      (setq _tab (cd:ACX_AddTable (cd:ACX_ASpace) _pt (+ (length _res) 2) 2 3 1))
      (vla-setText _tab 0 0 "Zestawienie detali")
      (vla-setText _tab 1 0 "Oznaczenie")
      (vla-setText _tab 1 1 "Suma")
      (setq _row 2)
      (foreach %1 _res
        (vla-setText _tab _row 0 (car %1))
        (vla-setText _tab _row 1 (cd:CON_Real2Str (cdr %1) 2 1))
        (setq _row (1+ _row))
      )
    )
  )
  (princ)
)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 691
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Łączna suma wymiarow

Postprzez kojacek » sty 08, 2018 23:55

ziele_o2k napisał(a): (...)
Narzędzie służy do sumowania wartości wymiarów względem wpisanego tekstu w wymiarze. (...)


(bardzo) zgrabnie i pack'owo. :)
Avatar użytkownika
kojacek
 
Posty: 5432
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Łączna suma wymiarow

Postprzez SOYER__1 » sty 10, 2018 19:04

Rewelacja !
Bardzo się przyda - chodź tabela coś baaardzo wąska mi wychodzi i za każdym razem muszę ja rozszerzać a i tak jest słabo dopasowana do zawartości. Gdzie to się ustawia ? (rozumiem że w kodzie)

Ale i tak dzięki bo się przyda .
SOYER__1
 
Posty: 98
Dołączył(a): wrz 29, 2015 10:07

Re: [LISP] Łączna suma wymiarow

Postprzez ziele_o2k » sty 11, 2018 10:50

SOYER__1 napisał(a):Rewelacja !
Bardzo się przyda - chodź tabela coś baaardzo wąska mi wychodzi i za każdym razem muszę ja rozszerzać a i tak jest słabo dopasowana do zawartości. Gdzie to się ustawia ? (rozumiem że w kodzie)

Ale i tak dzięki bo się przyda .

W kodzie niestety nie do końca, trzeba sobie ustawić odpowiednio styl tabeli w cadzie, a w kodzie jednie dopasować wysokość i szerokość kolumn/wierszy.

Generalnie to muszę wystartować ze swoją stroną internetową i swoim programem, bo przez 5lat jak się uczę lispować trochę już sensownych narzędzi jest.
Myślę, że w tym roku się uda :)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 691
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Łączna suma wymiarow

Postprzez kojacek » sty 11, 2018 11:51

ziele_o2k napisał(a):
Generalnie to muszę wystartować ze swoją stroną internetową i swoim programem, bo przez 5lat jak się uczę lispować trochę już sensownych narzędzi jest.
Myślę, że w tym roku się uda :)

Dawaj :)
Avatar użytkownika
kojacek
 
Posty: 5432
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Łączna suma wymiarow

Postprzez SOYER__1 » sty 11, 2018 21:28

Mimo wybranego stylu (tabeli) i tak zestawienie wychodzi mi bardzo wąskie i wysokie .
Ramki i komórki mają kolory wg mojego stylu tab ale szerokości komórek już nie są wg mojego stylu.

Jakoś to przeboleję :) - bo programik bardzo przydatny. Dotychczas używałem nieco uboższego stworzonego przez Kojacka na forum.
SOYER__1
 
Posty: 98
Dołączył(a): wrz 29, 2015 10:07

Re: [LISP] Łączna suma wymiarow

Postprzez ziele_o2k » sty 11, 2018 23:54

Łap, teraz szerokości się będą pięknie robić :)

Kod: Zaznacz cały
;; ============================================== ;;
;;                                                ;;
;;   @@@@@ @ @@@@ @    @@@@      @@@   @@  @  @   ;;
;;      @  @ @    @    @        @   @ @  @ @ @    ;;
;;     @   @ @@@@ @    @@@@     @   @   @  @@     ;;
;;    @    @ @    @    @        @   @  @   @ @    ;;
;;   @@@@@ @ @@@@ @@@@ @@@@ @@@  @@@  @@@@ @  @   ;;
;;                                                ;;
;; ============================================== ;;
;; 22:50 2018-01-11 © ziele_o2k                   ;;
;; ============================================== ;;
(defun c:detsum ( /  pz:sub _pt _ss _enx _k _v _res _tab _row _hgt _wth _tg1 _tg2 _tg3)
  (defun pz:sub ( @key @val @lst / _itm )
    (if (setq _itm (assoc @key @lst))
      (subst (cons @key (+ @val (cdr _itm))) _itm @lst)
      (cons  (cons @key @val) @lst)
    )
  )
  (if
    (and
      (setq _ss (ssget '((0 . "DIM*"))))
      (setq _pt (cd:USR_GetPoint "\nWskaz punkt wstawienia tabeli: " 1 nil))
    )
    (progn
      (foreach %1 (cd:SSX_Convert _ss 0)
        (setq
          _enx  (entget %1)
          _k    (cdr(assoc  1 _enx))
          _v    (cdr(assoc 42 _enx))
          _res  (pz:sub _k _v _res)
        )
      )
      (setq _res
        (vl-sort
          (mapcar
           '(lambda (%)
              (list (car %) (cd:CON_Real2Str (cdr %) 2 1))
            )
            _res
          )
          '(eval (list 'lambda '( a b ) (list '< '(strcase (car a)) '(strcase (car b)))))
        )
      )
      (setq _hgt
        (vla-gettextheight
          (vla-item
            (vla-item (vla-get-dictionaries (cd:ACX_ADoc)) "acad_tablestyle")
            (getvar 'ctablestyle)
          )
          acdatarow
        )
        _tg1 "Zestawienie detali"
        _tg2 "Oznaczenie"
        _tg3 "Suma"
      )
      (setq _tab
        (cd:ACX_AddTable
          (cd:ACX_ASpace) _pt
          (+ (length _res) 2)
          2
          (* 2 _hgt)
          (* _hgt
            (max
              (apply 'max
                (mapcar 'strlen
                  (append
                    (list _tg2)
                    (list _tg3)
                    (apply 'append _res)
                  )
                )
              )
              (/ (strlen _tg1) 2)
            )
          )
        )
      )
      (vla-setText _tab 0 0 _tg1)
      (vla-setText _tab 1 0 _tg2)
      (vla-setText _tab 1 1 _tg3)
      (setq _row 2)
      (foreach %1 _res
        (vla-setText _tab _row 0 (car %1))
        (vla-setText _tab _row 1 (cadr %1))
        (setq _row (1+ _row))
      )
    )
  )
  (princ)
)

Kod nie jest ładny, bo zerżnięty stąd :
http://www.lee-mac.com/lisp/html/CountV1-5.html
(już nie chce mi się tego wygładzać)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 691
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Łączna suma wymiarow

Postprzez SOYER__1 » sty 12, 2018 00:20

Dzięki .
Dla mnie to jest już wystarczające. Z tabeli można wszystko odczytać bez rozciągania za każdym razem.
Upraszcza życie.
Pozd.
SOYER__1
 
Posty: 98
Dołączył(a): wrz 29, 2015 10:07

Re: [LISP] Łączna suma wymiarow

Postprzez SOYER__1 » sty 31, 2018 13:26

Po kilkunastu dniach użytkowania tego użytecznego narzędzia zauważyłem pewne drobne mankamenty - które być może dało by się wyeliminować :

- nie potrzebnie rozróżniane są identyczne opisy (co do treści) a różniące sie jedynie współczynnikiem szerokości tekstu
- moim zdaniem korzystniej było by gdyby program nie uwzględniał różnic w tekście takich jak spacja czy enter
(te same elementy opisane identycznie co do treści mogą mieć opis w jednym wersie lub w 2 wersach - co jest rozróżniane w zestawieniu)

Mimo takich "mankamentów" program jest bardzo przydatny.
SOYER__1
 
Posty: 98
Dołączył(a): wrz 29, 2015 10:07

Re: [LISP] Łączna suma wymiarow

Postprzez ziele_o2k » sty 31, 2018 15:33

SOYER__1 napisał(a):- nie potrzebnie rozróżniane są identyczne opisy (co do treści) a różniące sie jedynie współczynnikiem szerokości tekstu
Aż się zastanowiłem o co chodzi, ale pewnie masz ręcznie zmieniony współczynnik szerokości w danym wymiarze, a nie globalnie dla stylu tekstu.
SOYER__1 napisał(a):- moim zdaniem korzystniej było by gdyby program nie uwzględniał różnic w tekście takich jak spacja czy enter
(te same elementy opisane identycznie co do treści mogą mieć opis w jednym wersie lub w 2 wersach - co jest rozróżniane w zestawieniu)

Podsumowując, masz rację. Posiedzę nad tym chwilę i wrzucę poprawki.
Pewnie wykorzystam tą funkcję http://www.lee-mac.com/unformatstring.html
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 691
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Następna strona

Powrót do AutoCAD

Kto przegląda forum

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