CADsite

  • do 24 05 2018, 00:15:16
  • Welkom, gast
Log in of registreer jezelf.

Login met gebruikersnaam, wachtwoord en sessielengte
Geavanceerd zoeken  

Nieuws:

Pagina's: [1]   Omlaag

Auteur Topic: hoogste en laagste waarde = OPGELOST  (gelezen 230 keer)

gery

  • vaste forumklant
  • *****
  • Offline Offline
  • Berichten: 375
    • Bekijk profiel
hoogste en laagste waarde = OPGELOST
« Gepost op: vr 20 04 2018, 11:07:52 »

Ik zoek een LISP routine die de hoogste en de laagste waarde zoekt in een willekeurig aantal op het scherm geselecteerde teksten. Is dit een standaard functie in AutoCAD 2012?
Iemand een tip waar ik dit zou kunnen vinden, of misschien zelfs de volledige code?
'k Heb al gezocht via Google, maar niet direct iets bruikbaars gevonden.
« Laatst bewerkt op: vr 20 04 2018, 15:43:15 door gery »
Gelogd
AutoCAD 2012 - Windows 7

EddyBeerke

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 2247
  • 1d CADSITE.be niet bezoeken = 1 dag niet geleefd!
    • Bekijk profiel
    • Mijn site
Re: hoogste en laagste waarde
« Reactie #1 Gepost op: vr 20 04 2018, 12:28:54 »

http://www.cadtutor.net/forum/archive/index.php/t-30548.html
Staat hier iets bij waar je wat aan hebt?
Gelogd

EddyBeerke

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 2247
  • 1d CADSITE.be niet bezoeken = 1 dag niet geleefd!
    • Bekijk profiel
    • Mijn site
Re: hoogste en laagste waarde
« Reactie #2 Gepost op: vr 20 04 2018, 12:37:53 »

Met een kleine aanpassing van eentje die daar staat:
(defun c:textvals  (/ ss i tv vl)
  (while (not ss)
    (princ "\nSelect Text To Calulate...")
    (setq ss (ssget '((0 . "TEXT"))))
  ) ;_ end of while
  (setq i (sslength ss))
  (while (not (minusp (setq i (1- i))))
    (setq tv (cdr (assoc 1 (entget (ssname ss i)))))
    (setq vl (cons (atof tv) vl))
  ) ;_ end of while
  (setq  min_val  (apply 'min vl)
        max_val  (apply 'max vl)
        avg_val  (/ (apply '+ vl) (length vl))
  ) ;_ end of setq
  (princ "\n Minimum: ")(princ min_val)
  (princ "\n Maximum: ")(princ max_val)
  (princ "\n Gemiddeld: ")(princ avg_val)
  (princ)
) ;_ end of defun
Gelogd

gery

  • vaste forumklant
  • *****
  • Offline Offline
  • Berichten: 375
    • Bekijk profiel
Re: hoogste en laagste waarde
« Reactie #3 Gepost op: vr 20 04 2018, 15:42:43 »

Merci Eddy, dat is wat ik zocht!  :vreegoe: :vreegoe: :vreegoe:
Gelogd
AutoCAD 2012 - Windows 7

gery

  • vaste forumklant
  • *****
  • Offline Offline
  • Berichten: 375
    • Bekijk profiel
Re: hoogste en laagste waarde = OPGELOST
« Reactie #4 Gepost op: di 24 04 2018, 14:19:27 »

De code werkt goed maar als er ergens een tekstobject met letters tussen de geselecteerde tekstobjecten zit, loopt het niet helemaal goed. Hoe kan ik enkel de tekstobjecten met enkel een getal erin selecteren?
Gelogd
AutoCAD 2012 - Windows 7

EddyBeerke

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 2247
  • 1d CADSITE.be niet bezoeken = 1 dag niet geleefd!
    • Bekijk profiel
    • Mijn site
Re: hoogste en laagste waarde = OPGELOST
« Reactie #5 Gepost op: wo 25 04 2018, 09:21:48 »

Je zou dan een functie moeten toevoegen die controleert of het een nummer is.

Ik dacht aan:
(numberp (read tv))
Citaat
Command: (numberp (read "11BN"))
nil

Command: (numberp (read "11"))
T

Command:
Gelogd

roy_043

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 1395
  • BricsCAD 18
    • Bekijk profiel
    • www.b-k-g.nl
Re: hoogste en laagste waarde = OPGELOST
« Reactie #6 Gepost op: wo 25 04 2018, 16:15:16 »

Het is mogelijk om de selection set zoveel mogelijk te filteren:
(setq ss (ssget '((0 . "*TEXT") (-4 . "<NOT") (1 . "*[~-.0-9]*,`.,*`.*`.*,-,?*-*") (-4 . "NOT>"))))
Gelogd

EddyBeerke

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 2247
  • 1d CADSITE.be niet bezoeken = 1 dag niet geleefd!
    • Bekijk profiel
    • Mijn site
Re: hoogste en laagste waarde = OPGELOST
« Reactie #7 Gepost op: wo 25 04 2018, 17:40:44 »

Beter!  :vreegoe:
Het is mogelijk om de selection set zoveel mogelijk te filteren:
(setq ss (ssget '((0 . "*TEXT") (-4 . "<NOT") (1 . "*[~-.0-9]*,`.,*`.*`.*,-,?*-*") (-4 . "NOT>"))))
Gelogd

gery

  • vaste forumklant
  • *****
  • Offline Offline
  • Berichten: 375
    • Bekijk profiel
Re: hoogste en laagste waarde = OPGELOST
« Reactie #8 Gepost op: wo 25 04 2018, 21:56:30 »

Bedankt Eddy en Roy.

Die code van Roy moet ik toch eens wat nader bestuderen want dat lijkt wel Chinees.  :roll:
Gelogd
AutoCAD 2012 - Windows 7

EddyBeerke

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 2247
  • 1d CADSITE.be niet bezoeken = 1 dag niet geleefd!
    • Bekijk profiel
    • Mijn site
Re: hoogste en laagste waarde = OPGELOST
« Reactie #9 Gepost op: do 26 04 2018, 08:32:43 »

Bij deze de volledige code met de aanpassing van Roy:
(defun c:textvals  (/ ss i tv vl min_val max_val avg_val)
  (while (not ss)
    (princ "\nSelect Text To Calulate...")
    (setq ss (ssget '((0 . "*TEXT") (-4 . "<NOT") (1 . "*[~-.0-9]*,'.,*'.*'.*,-,?*-*") (-4 . "NOT>"))))
  ) ;_ end of while
  (setq i (sslength ss))
  (while (not (minusp (setq i (1- i))))
    (setq tv (cdr (assoc 1 (entget (ssname ss i)))))
    (setq vl (cons (atof tv) vl))
  ) ;_ end of while
  (setq  min_val  (apply 'min vl)
        max_val  (apply 'max vl)
        avg_val  (/ (apply '+ vl) (length vl))
  ) ;_ end of setq
  (princ (strcat "\n Minimum: "   (rtos min_val)
                 "\n Maximum: "   (rtos max_val)
                 "\n Gemiddeld: " (rtos avg_val)
         );_ end strcat
);_ end princ
  (princ)
) ;_ end of defun

Misschien dat Roy de uitleg kan geven van dat filter?
Gelogd

gery

  • vaste forumklant
  • *****
  • Offline Offline
  • Berichten: 375
    • Bekijk profiel
Re: hoogste en laagste waarde = OPGELOST
« Reactie #10 Gepost op: do 26 04 2018, 08:58:08 »

Ik had ook dit nog gevonden:

(vlax-for #tx (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
  (if (not (distof (vla-get-textstring #tx)))
    (ssdel (vlax-vla-object->ename #tx) #ss)))

Deze code verwijdert alle tekstobjecten die geen getal zijn uit een selection set.
Ik heb deze code uiteindelijk niet gebruikt maar kan misschien van nut zijn voor iemand anders.
Gelogd
AutoCAD 2012 - Windows 7

roy_043

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 1395
  • BricsCAD 18
    • Bekijk profiel
    • www.b-k-g.nl
Re: hoogste en laagste waarde = OPGELOST
« Reactie #11 Gepost op: do 26 04 2018, 16:13:42 »

Hierbij wat uitleg over:
(setq ss (ssget '((0 . "*TEXT") (-4 . "<NOT") (1 . "*[~-.0-9]*,`.,*`.*`.*,-,?*-*") (-4 . "NOT>"))))
Ik beperk me tot uitleg over het tweede wcmatch patroon:
Het patroon bevat 5 onderdelen gescheiden door een komma (de komma staat voor OR):
"*[~-.0-9]*" : Matcht strings die een karakter bevatten dat niet in een decimaal getal thuishoort.
"`."         : Matcht strings die bestaan uit een enkele punt ".".
               Omdat de punt voor wcmatch een speciale betekenis heeft moet het karakter 'ge-escapet'
               worden met het "`" teken.
"*`.*`.*"    : Matcht strings met twee of meer punten.
"-"          : Matcht strings die bestaan uit een enkele minteken.
"?*-*"       : Matcht strings met een minteken dat niet het eerste karakter is. 'Vangt' automatisch
               ook strings met meerdere mintekens.
Als de string matcht met één van deze patronen dan is het geen decimaal getal en moet het betreffende
tekstobject worden uitgefiltered (vandaar het gebruik van NOT).

Let overigens op de verschillen tussen read, atof en distof:
(read "1")     => 1
(read "1.2")   => 1.2
(read ".3")    => ERROR MELDING
(read "1'3\"") => 1 (FOUT!)

(atof "1")     => 1.0
(atof "1.2")   => 1.2
(atof ".3")    => 0.3
(atof "1'3\"") => 1.0 (FOUT!)

(distof "1")     => 1.0
(distof "1.2")   => 1.2
(distof ".3")    => 0.3
(distof "1'3\"") => 15.0
Gelogd

EddyBeerke

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 2247
  • 1d CADSITE.be niet bezoeken = 1 dag niet geleefd!
    • Bekijk profiel
    • Mijn site
Re: hoogste en laagste waarde = OPGELOST
« Reactie #12 Gepost op: do 26 04 2018, 16:36:03 »

Super! :ole:  Super! :ole:  Super! :ole:  Super! :ole:  Super! :ole:  Super! :ole:font]
Hierbij wat uitleg over:
...
« Laatst bewerkt op: ma 30 04 2018, 08:46:14 door EddyBeerke »
Gelogd

gery

  • vaste forumklant
  • *****
  • Offline Offline
  • Berichten: 375
    • Bekijk profiel
Re: hoogste en laagste waarde = OPGELOST
« Reactie #13 Gepost op: do 26 04 2018, 18:29:57 »

Duidelijk zo!  :vreegoe:
Gelogd
AutoCAD 2012 - Windows 7
Pagina's: [1]   Omhoog