_

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

Re: [LISP] Łączna suma wymiarow

Postprzez ziele_o2k » mar 01, 2018 11:41

SOYER__1 napisał(a):Czy da się tu jeszcze upchnąć automatyczny wybór warstwy na której powstanie zestawienie/tabela ?

Da się. Pytanie tylko, jak to ma działać. Opcje wiedzę takie:
  1. Przy każdym uruchomieniu programu pyta się o warstwę
  2. Jest oddzielne polecenie do ustawienia warstwy na jaką ma się wrzucać tabela
  3. Zapisujemy na sztywno w kodzie programu jedną warstwę do zestawień bez pytania/ustawiania
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 719
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Łączna suma wymiarow

Postprzez SOYER__1 » mar 01, 2018 13:22

Mam kilka lispów które tworzą obiekty (wymiary, teksty, hatche itp) na warstwach - niektóre nawet sam przerobiłem, wzbogaciłem (ale do tego DETSUM nie potrafię wprowadzić standardowego kodu zmieniającego (ew twożacego) warstwę i na koniec przywracającego pierwotną warstwę.
Wszystkie Lispy wrzucające obiekty na warstwę (u mnie) działają w ten sposób że w kodzie jest podana nazwa warstwy na której ma być wstawiany obiekt. Po uruchomieniu lispa następuje sprawdzenie czy warstwa istnieje(jeśli nie to jest tworzona)
po wstawieniu obiektu jest przywracana pierwotna warstwa na której pracowałem przed użyciem lispa.
I fajnie by było gdyby w DETSUM tez się tak dało.
SOYER__1
 
Posty: 99
Dołączył(a): wrz 29, 2015 10:07

Re: [LISP] Łączna suma wymiarow

Postprzez ziele_o2k » mar 01, 2018 13:36

SOYER__1 napisał(a):Mam kilka lispów które tworzą obiekty (wymiary, teksty, hatche itp) na warstwach - niektóre nawet sam przerobiłem, wzbogaciłem (ale do tego DETSUM nie potrafię wprowadzić standardowego kodu zmieniającego (ew twożacego) warstwę i na koniec przywracającego pierwotną warstwę.
Wszystkie Lispy wrzucające obiekty na warstwę (u mnie) działają w ten sposób że w kodzie jest podana nazwa warstwy na której ma być wstawiany obiekt. Po uruchomieniu lispa następuje sprawdzenie czy warstwa istnieje(jeśli nie to jest tworzona)
po wstawieniu obiektu jest przywracana pierwotna warstwa na której pracowałem przed użyciem lispa.
I fajnie by było gdyby w DETSUM tez się tak dało.

Czyli opcja c - zapisujemy na sztywno.
W wolnej chwili dodam.
Swoją drogą, jeśli w lispach masz wrzucanie jakiegoś obiektu na konkretną warstwę, to nie ma sensu zmieniać bierzącej warstwy, a potem jej przywracać.
Lepiej jest utworzyć obiekt, a potem ustawić jego warstwę.
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 719
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Łączna suma wymiarow

Postprzez SOYER__1 » mar 01, 2018 14:00

Pewnie Masz rację. Wydawało mi się że to jest powszechny sposób.

Czy Możesz upublicznić efekt działania narzędzia do rozkładu prętów (przedstawionego w z wątku ) ?
Jestem ciekaw choć by samego filmiku z działania tego typu usprawnień. Może i mnie nasuną się pomysły .
Co jeszcze udało Ci się zautomatyzować, usprawnić ?
SOYER__1
 
Posty: 99
Dołączył(a): wrz 29, 2015 10:07

Re: [LISP] Łączna suma wymiarow

Postprzez SOYER__1 » mar 19, 2018 19:08

Czy jest szansa na aktualizacje kodu - o automat do wrzucania zestawienia na zadaną warstwę ?
SOYER__1
 
Posty: 99
Dołączył(a): wrz 29, 2015 10:07

Re: [LISP] Łączna suma wymiarow

Postprzez ziele_o2k » mar 19, 2018 21:55

SOYER__1 napisał(a):Czy jest szansa na aktualizacje kodu - o automat do wrzucania zestawienia na zadaną warstwę ?

Zrobione, możesz nadać swoją nazwę warstwy i jej kolor. Jeśli warstwa już istnieje w rysunku nie będzie aktualizować jej koloru.
Zmień jak potrzebujesz tutaj:
Kod: Zaznacz cały
  (setq
    _lay_nam "Twoja nazwa"  ; nazwa warstwy
    _aci_col 10             ; indeks koloru 1÷255
  )

Całość:
Kod: Zaznacz cały
;; ============================================== ;;
;;                                                ;;
;;   @@@@@ @ @@@@ @    @@@@      @@@   @@  @  @   ;;
;;      @  @ @    @    @        @   @ @  @ @ @    ;;
;;     @   @ @@@@ @    @@@@     @   @   @  @@     ;;
;;    @    @ @    @    @        @   @  @   @ @    ;;
;;   @@@@@ @ @@@@ @@@@ @@@@ @@@  @@@  @@@@ @  @   ;;
;;                                                ;;
;; ============================================== ;;
;; 22:50 2018-03-19 © ziele_o2k                   ;;
;; ============================================== ;;
(defun c:detsum ( /  pz:sub _lay_nam _aci_col _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)
    )
  )
  (setq
    _lay_nam "Twoja nazwa"  ; nazwa warstwy
    _aci_col 10             ; indeks koloru 1÷255
  )
  (if (not (tblobjname "LAYER" _lay_nam))
    (cd:ENT_SetDXF (cd:ENT_MakeLayer _lay_nam) 62 _aci_col)
  )
  (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    (if
                  (or
                    (not (setq _tmp (LM:UnFormat (cdr(assoc  1 _enx)) T)))
                    (= _tmp "")
                    (and
                      (not (cd:STR_Parse _tmp " " T))
                      (setq _tmp "")
                    )
                  )
                  _tmp
                  (cd:STR_ReParse
                    (cd:STR_Parse
                      (vl-string-trim " " _tmp)
                      " " T
                    )
                    " "
                  )
                )
          _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)
            )
          )
        )
      )
      (cd:ACX_SetProp _tab (list (cons "Layer" _lay_nam)))
      (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)
)

;;-------------------=={ UnFormat String }==------------------;;
;;                                                            ;;
;;  Returns a string with all MText formatting codes removed. ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  str - String to Process                                   ;;
;;  mtx - MText Flag (T if string is for use in MText)        ;;
;;------------------------------------------------------------;;
;;  Returns:  String with formatting codes removed            ;;
;;------------------------------------------------------------;;

(defun LM:UnFormat ( str mtx / _replace rx )

    (defun _replace ( new old str )
        (vlax-put-property rx 'pattern old)
        (vlax-invoke rx 'replace str new)
    )
    (if (setq rx (vlax-get-or-create-object "VBScript.RegExp"))
        (progn
            (setq str
                (vl-catch-all-apply
                    (function
                        (lambda ( )
                            (vlax-put-property rx 'global     actrue)
                            (vlax-put-property rx 'multiline  actrue)
                            (vlax-put-property rx 'ignorecase acfalse)
                            (foreach pair
                               '(
                                    ("\032"    . "\\\\\\\\")
                                    (" "       . "\\\\P|\\n|\\t")
                                    ("$1"      . "\\\\(\\\\[ACcFfHLlOopQTW])|\\\\[ACcFfHLlOopQTW][^\\\\;]*;|\\\\[ACcFfHLlOopQTW]")
                                    ("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
                                    ("$1$2"    . "\\\\(\\\\S)|[\\\\](})|}")
                                    ("$1"      . "[\\\\]({)|{")
                                )
                                (setq str (_replace (car pair) (cdr pair) str))
                            )
                            (if mtx
                                (_replace "\\\\" "\032" (_replace "\\$1$2$3" "(\\\\[ACcFfHLlOoPpQSTW])|({)|(})" str))
                                (_replace "\\"   "\032" str)
                            )
                        )
                    )
                )
            )
            (vlax-release-object rx)
            (if (null (vl-catch-all-error-p str))
                str
            )
        )
    )
)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 719
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Łączna suma wymiarow

Postprzez SOYER__1 » mar 20, 2018 08:39

Rewelacja .
"Działa jak natura chciała" :)

Dzięki.
SOYER__1
 
Posty: 99
Dołączył(a): wrz 29, 2015 10:07

Re: [LISP] Łączna suma wymiarow

Postprzez ziele_o2k » mar 20, 2018 10:11

SOYER__1 napisał(a):Rewelacja .
"Działa jak natura chciała" :)

Dzięki.

Pewnie jeszcze bardziej spodoba Ci się wersja, którą ja mam u siebie :). Na pocieszenie powiem, że będzie to jedno z pierwszych narzędzi które udostępnię :)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 719
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Łączna suma wymiarow

Postprzez SOYER__1 » mar 20, 2018 13:12

Domyślam się że na własne potrzeby Masz wiele narzędzi które ułatwiają i przyspieszają robotę.
Polecam założyć stronę na podobieństwo "kojacka" lub LEE (jeśli czasu starcza) . Jeśli nie wszystko jest za Free(co jest zrozumiałe) - to pokaż filmik z działania co ciekawszych narzędzi (dla inspiracji, żeby ludzie wiedzieli do czego darzyć, co da się zrobić w AC) .
Pozdrawiam
SOYER__1
 
Posty: 99
Dołączył(a): wrz 29, 2015 10:07

Re: [LISP] Łączna suma wymiarow

Postprzez ziele_o2k » mar 20, 2018 13:30

SOYER__1 napisał(a):(...)Jeśli nie wszystko jest za Free (...)
Ja akurat jestem zwolennikiem opensource więc wszystko będzie za free z dostępem do kodu źródłowego.

SOYER__1 napisał(a):(...)jeśli czasu starcza(...)

Taa... Ale jak w końcu usiądę to powinno ruszyć.
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 719
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Poprzednia strona

Powrót do AutoCAD

Kto przegląda forum

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