Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Alle Objekte die auf dem Bildschirm sichtbar sind

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:  Alle Objekte die auf dem Bildschirm sichtbar sind (1130 mal gelesen)
Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2010
ZW-CAD 2012

erstellt am: 24. Feb. 2011 12:02    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

Hallo,

ich möchte folgendes machen: Ich möchte alle Entitys haben, die zur Zeit auf dem Bildschirm sichtbar sind. Der Grund ist folgender:

Ich habe ein Makro geschrieben, bei dem man eine Linie auswählt, und das dann alle angrenzenden Objekte sucht und aus allen dann eine Polylinie macht. Funktioniert soweit auch gut. Das Problem ist nur bei sehr großen Zeichnungen (ca. 50.000 Entitys) dauert das Suchen der angrenzenden Objekte natürlich sehr lange. Und aus diesem Grund möchte ich nicht die ganze Zeichnung durchsuchen, sondern nur jene Entitys, die auf dem Bildschirm sichtbar sind.

Nur wie filtere ich diese Objekte raus?


Danke schon mal für Eure Hilfe!

------------------
Grüsse Benny

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 24. Feb. 2011 12:24    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 Benny4 10 Unities + Antwort hilfreich

Mal ne Lispfunktion zu dem Thema .. gibt die eckkoordianten des aktuellen Bildschirmausschnitts zurück .... sollte leicht auf VBA zu adaptieren sein ..... und dann ein Selectionset mit bilden

(defun DT:EXTSCREEN ()     
  (list
    (list(-(car (getvar "viewctr"))
          (*(/(getvar "viewsize")
              (cadr(getvar "screensize"))
            )
            (car(getvar "screensize"))
            0.5
          )
        )
        (-(cadr(getvar "viewctr"))
          (/(getvar "viewsize")2.0)
        )
    )
    (list(+(car (getvar "viewctr"))
          (*(/(getvar "viewsize")
              (cadr(getvar "screensize"))
            )
            (car(getvar "screensize"))
            0.5
          )
        )
        (+(cadr (getvar "viewctr"))
          (/(getvar "viewsize")2.0)
        )
    )
  )
)

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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


Ex-Mitglied

erstellt am: 24. Feb. 2011 12:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

VIEWSIZE ist eine Sysvar, aus der kannst Du mal die Höhe des Bildschirms abnehmen.
VIEWCTR ist eine Sysvar, die gibt Dir den Mittelpunkt der aktuellen Ansicht

Und wenn Du nach den beiden Variablen >>>suchst<<<, findest Du auch eine Menge Code.

Vorsicht aber, das funkt nicht, wenn Du schräg oder perspektivisch draufguckst.


Zusatzfrage: wenn Du nur den sichtbaren Bereich machst, ist das Ergebnis dann richtig?
Ich meine, wenn man sich die 50000 Elemente mit einem intelligenten Index zurechtlegt, dann ist das keine großartige Leistungssache mehr.


- alfred -

[EDIT]   man sollte nicht telefonieren während Beitrag schreiben, sonst sind andere schon lang fertig      [/EDIT]
------------------
www.hollaus.at

[Diese Nachricht wurde von a.n. am 24. Feb. 2011 editiert.]

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil
Inventor AIP 4-11, 2008 -2022
Win 10

erstellt am: 24. Feb. 2011 12:50    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 Benny4 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Benny4:
...
Ich habe ein Makro geschrieben, bei dem man eine Linie auswählt, und das dann alle angrenzenden Objekte sucht und aus allen dann eine Polylinie macht. F...


Und Befehl: PEDIT Verbinden Alle (oder Bildschirmwahl) reicht dafür nicht?
P.S: Befehl: Pedit Mehrfach Verbinden
macht dann auch gleich alle zusammenhängenden Linien zu Polylinien und verbindet diese.

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2010
ZW-CAD 2012

erstellt am: 24. Feb. 2011 15:07    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

Hallo,

werde das mal probieren. Das Ergebnis ist immer richtig, ich möchte nur an Zeit einsparen. Und das mit den Indexen: Ich habe ja eine Zeichnung die von irgendjemand irgendwie gezeichnet wurde. Da kann es sein dass eine Linie mit index 0 mit einer Linie mit index 40.000 verbunden ist und diese muss ich suchen.

PEDIT:
So habe ich das bisher gemacht, nur funktioniert das bei einigen AutoCAD - Versionen nicht richtig. Und da der Benutzer nur die Linie anklicken soll und weiter nichts, habe ich auch das Problem, dass wenn der User eine Polylinie anklickt dass es wieder nicht geht.

------------------
Grüsse Benny

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


Ex-Mitglied

erstellt am: 24. Feb. 2011 15:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

nee, ich hätte da mehr Topologie (GIS) -artig gedacht.

Lese die Linien/Polylinien/Bögen ein.
Sammle die Start- und Endpunkte der Elemente in einer Collection von benutzerdefinierten Objekten, solch ein Objekt kann so aussehen:

Code:

ID as Long
GeoLoc as String        'und dieser String (GeographicLocation) baust Du Dir aus X und Y (und bei Bedarf C) zusammen
EntList as Collection
Pnt as Double(2)

Und diese Collection von Punkten baust Du Dir beim Einlesen der Elemente auf, mit dem Key = GeoLoc, damit Du schnell suchen/finden kannst.

Damit kommt jeder Punkt nur einmal in der Collection vor und jeder Punkt kennt seine Anzahl von Elementen, die da dran hängen.

Ist nur ein Element in der Liste, dann ist es das letzte Element
Sind zwei Elemente in der Liste, dann verbinden
Sind drei Elemente in der Liste, dann gibt's wohl einen Kreuzungspunkt ==> was auch immer dann für Dich richtig ist.

Hoffe, es ist verständlich, - alfred -

------------------
www.hollaus.at

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2010
ZW-CAD 2012

erstellt am: 28. Feb. 2011 12:48    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

Hallo,

habe es mit VIEWSIZE und VIEWCTR gemacht, funktioniert perfekt!


Danke

------------------
Grüsse Benny

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