FastFiber

text tussen coordinaten selecteren met ssget

Gestart door Reimer, di 14 01 2014, 16:34:07

Vorige topic - Volgende topic

Reimer

Ik heb eindelijk eens opgezocht hoe je met SSGET kunt werken met AND / OR. Helaas is het resultaat nog niet werkend.
Ik wil graag alle teksten selecteren die binnen bepaalde coordinaten liggen. Hiervoor heb ik het volgende bedacht.

(setq X1 20 Y1 20 X2 30 y2 30)
(setq H (ssget "_X" (list (0 . "TEXT")
                             (-4 . "<AND")
                                 (-4 . ">,>,*") (list 10 X1 Y1 0.0)
                                 (-4 . "<,<,*") (list 10 X2 Y2 0.0)
                             (-4 . "AND>")
                     );_list
        );_ssget
);_setq


Als resultaat krijg ik: Error: bad argument type: consp "TEXT"
Kan iemand mij vertellen wat er niet juist is aan deze code?

Reimer

roy_043

Op het eerste gezicht:
Dit:
(0 . "TEXT")
Moet zijn:
'(0 . "TEXT")
Hetzelfde geldt voor alle dotted pairs.
De foutmelding is dus eigenlijk zeer duidelijk.

sschevers

Reimer,

Ik zou het op de volgende manier doen:

(setq p1 (getpoint))
(setq p2(getpoint))

(setq textsel
   (ssget "c"
        p1
        p2
        (list
           (cons 0 "TEXT")
         );endlist
    );endssget
);end setq


Wel checken of p1 en p2 een waarde hebben voordat je een ssget gaat doen
stephan

Reimer

Bedankt voor jullie reacties. Ik ben er uit.

@Roy; je hebt gelijk. Dit heb ik aangepast. Helaas werkte mijn selectiemethode niet. Onderstaand een werkend alternatief.

@Stefan; dit had ik al geprobeerd maar het probleem is dat ik soms het vakje dusdanig klein kies dat de tekst er buiten valt terwijl het insertionpoint er wel binnen valt. De tekst werd niet geselecteerd.

Ik heb nu het onderstaade bedacht. Ik selecteer eerst alle teksten met een insertionpoint groter dan X1,Y1. Vervolgens selecteer ik alle teksten groter dan X1,Y2 en X2, Y1. Daarna verwijder ik de tweede selectieset uit de eerste.
  (setq H1 (ssget "_X" (list '(0 . "TEXT")
                             '(-4 . ">,>") (list 10 X1 Y1 0.0)
                      );_list
          );_ssget
  );_setq
  (setq H2 (ssget "_X" (list '(0 . "TEXT")
                               '(-4 . "<OR")
                                   '(-4 . ">,>") (list 10 X1 Y2 0.0)
                                   '(-4 . ">,>") (list 10 X2 Y1 0.0)
                               '(-4 . "OR>")
                      );_list
          );_ssget
  );_setq

  (setq CNTH (1- (sslength H2)))
  (while (> CNTH -1)
    (setq DELH (ssname H2 CNTH))
    (setq H1 (ssdel DELH H1))
    (setq CNTH (1- CNTH))
  );_while


Reimer

roy_043

In BricsCAD werkt dit:
(setq X1 20 Y1 20 X2 30 y2 30)
(setq H
  (ssget "_X"
    (list
      '(0 . "TEXT")
      '(-4 . ">,>,*") (list 10 X1 Y1 0.0)
      '(-4 . "<,<,*") (list 10 X2 Y2 0.0)
    )
  )
)