Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  kreuzendes Auswahlfenster außerhalb des Bildschirmausschnittes

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  kreuzendes Auswahlfenster außerhalb des Bildschirmausschnittes (1083 mal gelesen)
tappenbeck
Mitglied
Vermessungsingenieur


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 04. Dez. 2013 15:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Moin!

ich weiß ja noch aus alten Zeiten das es Probleme gab mit der Punktauswahl beim Schraffieren - der zu schraffierende Bereich sollte auf dem Bildschirm sichtbar sein.

Nun habe ich eine kreuzende Auswahl erstellt die unter umständen auch außerhalb des aktuellen Bildschirmausschnittes liegen kann:

Code:
    (setq aws_search (ssget "_CP"
(list pkt_1
pkt_2
        pkt_3
        pkt_4
      );end-list
                                filter_liste
    );end-ssget
  );end-setq

Nun ist mir aufgefallen das keine Elemente gefunden werden diese Auswahl außerhalb des Bildschirmausschnittes liegt.

Denke ich richtig oder renne ich unter Umständen einem falschen Gedanken nach?

... und gibt es unter LISP eine Möglichkeit der kreuzenden Auswahl außerhalb des Bildschirms - sonst muss ich den betreffenden Bereich zwangsläufig aufzoomen.

Gruß Jan :-)

------------------
jan :-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 04. Dez. 2013 15:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tappenbeck 10 Unities + Antwort hilfreich

Nun ist mir aufgefallen das keine Elemente gefunden werden diese Auswahl außerhalb des Bildschirmausschnittes liegt.
Auch dieses Mal wieder: Gratulation.

Zur Frage: Man kann berechnen ob ein Element zur Auswahl gehört oder nicht.
Genau das macht ja ssget/die AutoCAD-Objektwahl - mit einer Einschränkung eben..
Also müßze man dies nachprogrammieren, ohne diese Einschränkung.

Freue mich über die Resultate 

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

spider_dd
Mitglied



Sehen Sie sich das Profil von spider_dd an!   Senden Sie eine Private Message an spider_dd  Schreiben Sie einen Gästebucheintrag für spider_dd

Beiträge: 1111
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 04. Dez. 2013 15:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tappenbeck 10 Unities + Antwort hilfreich

Hallo Jan,

Zitat:
Original erstellt von tappenbeck:
... und gibt es unter LISP eine Möglichkeit der kreuzenden Auswahl außerhalb des Bildschirms

m. E. Nein! /edit/ oder siehe Beitrag von cadffm  /edit/
ACAD arbeitet auch unter Lisp "Bildschirmorientiert", finden sich hier in den Tiefen der Themen auch genügend Beispiele, wenn ich mich recht erinnere.

Zitat:
Original erstellt von tappenbeck:
...  sonst muss ich den betreffenden Bereich zwangsläufig aufzoomen.

Ja, das musst Du dann. Ein Zoom auf einen Bereich etwas größer als Dein Auswahlfenster sollte dann Erfolgt bringen.

HTH
Gruß
Thomas

[Diese Nachricht wurde von spider_dd am 04. Dez. 2013 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tappenbeck
Mitglied
Vermessungsingenieur


Sehen Sie sich das Profil von tappenbeck an!   Senden Sie eine Private Message an tappenbeck  Schreiben Sie einen Gästebucheintrag für tappenbeck

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 04. Dez. 2013 16:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

danke !

------------------
jan :-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 05. Dez. 2013 15:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tappenbeck 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von tappenbeck:
danke !


Die Fenster-Auswahlmodi bei SSGET arbeiten der Performance wegen mit der Displayliste. Du kannst aber mit wenig Aufwand ein eigenes SSGET-W oder SSGET-C programmieren, das alle Elemente, selbst die auf gefrorenen Layern findet.

Der Schlüssel dazu liegt in der Methode IntersectWith, die Du mittels VLAX-INVOKE-METHOD auf das Fensterrechteck und jedes einzelne Element der Datenbank anwendest. Du brauchst bei den einzelnen Entities nur nach jeweils einem relevanten Punkt zu suchen, den Du darauf hin überprüfst, ob der innerhalb oder außerhalb des Fensters liegt. Ja nachdem was IntersectWith dann zurück gibt, liegt das Objhekt entweder vollständig innerhalb, vollständig außerhalb, oder nur teilweise außerhalb des Fensters. Damit kannst Du also bequem (ssget "_w" ...) und (ssget "_c" ...) und auch (ssget "_cp" ...) nachprogrammieren. Und einen Filter für Objekteigenschaften und/oder Xdata und sogar Xdictionaries kannst Du da auch leicht implementieren.

Nur Blockreferenzen machen da ziemlich Schwierigkeiten, aber auch das lässt sich lösen. Wenn Du in einer DWG nicht allzuviele Entities hast, dann ist diese Auswahl auch von der Performance her einigermaßen OK.

Als Bonbon gibt's hier die Funktion zum finden der Schnittpunkte zweier Entities:

Code:

;; Schnittpunkt zweier Objekte
;; extend=0 -> keine Verlängerung
;; extend=1 -> Verlängerung nur erstes
;; extend=2 -> Verlängerung nur zweites
;; extend=3 -> Verlängerung beide
(defun at-intersect (ent1 ent2 extend / ar)
  (cond
    ((or (= 0 extend) (null extend))
    (setq extend acExtendNone)
    )
    ((or (= 1 extend) (= 'FIRST extend) (= "FIRST" extend))
    (setq extend acExtendThisEntity)
    )
    ((or (= 2 extend) (= 'SECOND extend) (= "SECOND" extend))
    (setq extend acExtendOtherEntity)
    )
    ((or (= 3 extend) (= 'BOTH extend) (= "BOTH" extend))
    (setq extend acExtendBoth)
    )
    ('T (setq extend acExtendNone))
  )
  (if (= 'ENAME (type ent1))
    (setq ent1 (vlax-ename->vla-object ent1))
    )
  (if (= 'ENAME (type ent2))
    (setq ent2 (vlax-ename->vla-object ent2))
    )
 
  (if (setq ar
    (vlax-invoke-method
      ent1
      'IntersectWith
      ent2
      extend
    )
      )
    (if
      (/= -1
  (vlax-safearray-get-u-bound
    (vlax-variant-value ar)
    1
  )
      )
      (at-gather
(vlax-safearray->list
  (vlax-variant-value ar)
)
3
      )
    )
    nil
  )
)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz