Eine sehr fragwürdige Aufgabenstellung mit einem noch viel fragwürdigeren Ansatz dahinter.
Zunächst mal: Geht's wirklich um einen Block? Dann müsste man zuerst den Block-Umriss ermitteln, was schon ziemliche Schwierigkeiten verursachen würde. Oder geht's um einen Punkt (der der Einfügepunkt eines Blocks oder auch etwas anderes sein könnte)?
Und was sind 0,05m? AutoCAD kennt doch nur Zeichnungseinheiten. Da müsste dann erst ein Maßstab ermittelt werden usw., aber wie?
Angenommen, man hätte die Block-Kontur, bräuchte man eine VBA-Emulation des Versetz-Befehls (oder man könnte auch über SendCommand den Versetz-Befehl ausführen), dann wäre es möglich, mit SelelectionSet.Select ... acSelectionSetCrossing jedwede Geometrie zu wählen, die hier erfassbar ist.
Das Problem ist aber, dass es eben jede Geometrie ist, die in diesen Bereich hineinragt. Anschließend müsste man aber filtern, was davon applikationsrelevant ist. Wer weiß denn schon, was der User in seiner unendlichen Weisheit da so alles hingemalt hat? Gibt es jedoch Merkmale, die die gefundenen Polylinien als relevant auszeichnen, kann man diese Polylinien meist auch anhand dieses Merkmals auffinden.
Lisp stellt da Funktionen wie (OSNAP ...) zur Verfügung, damit ist so etwas schnell programmiert. Aber: Ob so etwas funktioniert, ist reine Glücksache. Man sollte nie versuchen, in einem Programm das interaktive Arbeiten mit AutoCAD nachzuprogrammieren. Der Unterschied ist nämlich der, dass der User a) einen Bildschirm und b) eine Vorstellung von Plausibilität hat. Programme haben weder das eine noch das andere.
Es gibt Tausende von Lisp-Routinen, die mit emulierten Bildschirmpicks arbeiten. Keine davon funktioniert noch, wenn User z.B. auf die Idee kommen, nicht mehr relevante Zeichnungsteile mit einer Zickzacklinie durchzustreichen - eine durchaus gängige Praxis;-) Nach dem Motto "Diese Variante kann man ja vielleicht noch mal brauchen" wird durchgestrichen, eingerahmt und was den Leuten sonst noch so einfällt (das als Block auf einen Layer "Entwürfe" zu verschieben, ist einfach zu viel Arbeit). Ich habe in Zeichnungen auch schon mal Einkaufszettel für die Mittagspause gefunden;-)
Wirklich funktionieren werden solche Ansätze nur dann, wenn die Geometrie vom selben Programm gerade vorher erzeugt wurden und der User die Zeichnung noch nicht in die Finger gekriegt hat. Nur - dann braucht man diese Methoden eben nicht.
Wenn der Datenbestand nun mal so ist und es keine andere Möglichkeit gibt, musst du es so wie oben beschrieben machen. Nach meiner Erfahrung gibt es dann einfach eine gewisse Fehlerquote, nachträgliche Sicht- und Plausibilitätskontrolle ist also notwendig.
Gruß, Axel Strube-Zettler
------------------
(defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP