CADsite forum

AutoCAD => Autolisp => Topic gestart door: Reimer op di 14 01 2014, 16:34:07

Titel: text tussen coordinaten selecteren met ssget
Bericht door: Reimer op di 14 01 2014, 16:34:07
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
Titel: Re: text tussen coordinaten selecteren met ssget
Bericht door: roy_043 op di 14 01 2014, 17:52:54
Op het eerste gezicht:
Dit:
(0 . "TEXT")
Moet zijn:
'(0 . "TEXT")
Hetzelfde geldt voor alle dotted pairs.
De foutmelding is dus eigenlijk zeer duidelijk.
Titel: Re: text tussen coordinaten selecteren met ssget
Bericht door: sschevers op wo 15 01 2014, 07:34:23
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
Titel: Re: text tussen coordinaten selecteren met ssget
Bericht door: Reimer op wo 15 01 2014, 11:47:58
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
Titel: Re: text tussen coordinaten selecteren met ssget
Bericht door: roy_043 op wo 15 01 2014, 15:26:33
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)
    )
  )
)