CADsite forum

AutoCAD => Autolisp => Topic gestart door: pvhees op do 06 12 2007, 16:14:41

Titel: Getallen optellen
Bericht door: pvhees op do 06 12 2007, 16:14:41
Hallo,


Ik heb een tekening met een aantal getallen erin ( aantal aansluitingen per gebouw)
daar wil ik het totaal van weten in de hele tekening of selectie
Ik heb wel diverse berichten gevonden hier in het forum maar daar komt allemaal het gemiddelde uit

Ik heb autocad 2006

vriendelijke groet

Pieter,
Titel: Re: Getallen optellen
Bericht door: Kenny H op do 06 12 2007, 19:20:07
Beste,

Probeer het volgende eens.

(defun c:tekstel (/ ss1 el1 som prc enm1)
  (setq   ss1 (ssget)
   tel 0
   som 0
  )
  (repeat (sslength ss1)
    (setq el1 (entget (ssname ss1 tel)))
    (if   (= (cdr (assoc 0 el1)) "TEXT")
      (setq som (+ som (atof (cdr (assoc 1 el1)))))
    )
    (setq tel (1+ tel))
  )
  (setq   enm  (car (entsel "\nSelect text: "))
   enm1 (entget enm)
  )
  (if (= (cdr (assoc 7 enm1)) "Standard")
    (command "change" enm "" "" "" "" "" "" (rtos som 2 3))
    (command "change" enm "" "" "" "" "" (rtos som 2 3))
  )
  (princ (rtos som 2 0))
  (princ)
)


Selecteer de teksten die hij moet optellen, enter en dan selecteer je de tekst die hij moet vervangen.
Het antwoord verschijnt ook in de command balk.
Als zaken wil aanpassen ofzo mag je dit ook vragen hoor.  :wink:

Mvg

Kenny
Titel: Re: Getallen optellen
Bericht door: pvhees op vr 07 12 2007, 14:16:35
Nee, bovenstaand werkt nog niet goed.
Ik zou graag onderstaand programmatje willen omschrijven naar een SOM i.p.v. Gemiddelde (dat is dan ook nu gedaan en werkt)
Nu alleen nog dat er een tekst wordt gemaakt (in de tekening) met de hoeveelheid "h-tot"

P.S. het programma werkt, maar ik denk dat er nog teveel regels staan... kan korter, maaar ik weet niet hoe

(defun c:SOMMM (/ ss i n h h_tot ssmax gem)
(if (setq ss (ssget '((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>"))))
   (progn (setq i 0 n 0 h_tot 0 ssmax (sslength ss))
   (repeat ssmax (progn (setq ed (entget (ssname ss n)) h (cdr (assoc 1 ed)))
   (setq h (read h))
   (if (numberp h)(progn (setq i (+ i 1) h_tot (+ h_tot h))))
   (setq n (1+ n))
    )
)
(if (> i 0)(progn(setq gem (/ h_tot (float i)))
;   (princ (strcat "\n De gemiddelde hoogte (van "(itoa i)" hoogtes) is "(rtos gem)))))
   (princ (strcat "\n Het Totaal van ("(itoa i)" invoer(en)) is "(rtos h_tot)))))
    )
)
(princ)
)
Titel: Re: Getallen optellen
Bericht door: Kenny H op za 08 12 2007, 12:25:23
Beste,

Probeer dit eens, heb de overbodige delen er uit gegooid.  :wink:

Citeer(defun c:SOMMM (/ ss i n h h_tot ssmax gem)
  (setq   ss (ssget
        '((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>"))
      )
  )
  (setq   i     0
   n     0
   h_tot 0
   ssmax (sslength ss)
  )
  (repeat ssmax
    (setq ed (entget (ssname ss n))
       h  (cdr (assoc 1 ed))
      )
      (setq h (read h))
      (if (numberp h)
       (setq i(+ i 1)
      h_tot   (+ h_tot h) )
      )
      (setq n (1+ n))
   
  )
   (princ (strcat "\n Het Totaal van ("(itoa i)" invoer(en)) is: "(rtos h_tot)))
  (princ)
)
Mvg

Kenny
Titel: Re: Getallen optellen
Bericht door: Ben Quanjer op ma 10 12 2007, 22:11:22
Kenny,
Kan je mij uitleggen wat de elementen in de lijst doen '((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>"))
(-4 . "<OR")  en (-4 . "OR>")
Alvast bedankt,
Ben Quanjer
Titel: Re: Getallen optellen
Bericht door: Kenny H op di 11 12 2007, 19:01:35
Beste Ben,

Ik dacht dat het iets is zoals het commando list.

Heb ook in de help gekeken om wat meer te weten te komen;

CiteerThe grouping operators are specified by -4 groups, like the relational operators. They are paired and must be balanced correctly in the filter list or the ssget call will fail. An example of grouping operators in a filter list follows:

(ssget "X"
'(
    (-4 . "<OR")
      (-4 . "<AND")
        (0 . "CIRCLE")
        (40 . 1.0)
      (-4 . "AND>")
      (-4 . "<AND")
        (0 . "LINE")
        (8 . "ABC")
      (-4 . "AND>")
    (-4 . "OR>")
  )
)

This code selects all circles with a radius of 1.0 plus all lines on layer "ABC". The grouping operators are not case-sensitive; for example, you can specify "and>", "<or", instead of "AND>", "<OR".

Maw deze functie laat toe teksten op te tellen die zowel in multilinetext als de gewone (single line) text staan. :wink:

Misschien heb je hier ook iets aan.  8)
1) Selectie via kleur
  (setq blauw (ssget "x" '((62 . 5))))
2) Selectie via lijntype
  (setq ltype (ssget "x" '((6 . "zigzag"))))
3) Selectie via laag
  (setq layer (ssget "x" '((8 . "veelhoeken"))))