Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Nächster bei GetEntity

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:  Nächster bei GetEntity (717 mal gelesen)
JoergAD
Mitglied



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

Beiträge: 43
Registriert: 07.03.2007

erstellt am: 29. Aug. 2007 16:21    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 VBA'ler,

hab schon wieder ein Problem und hoffe abermals auf eure Hilfe, die ja meistens prompt kommt.

Folgender Programmausschnitt:

Der Benutzer soll eine Linie wählen. Dabei benötige ich in VBA gespeichert, dass Objekt selber (also die Linie) sowie den Punkt auf dieser, die er gewählt hat.

Soweit sollte es hiermit funktionieren:

ThisDrawing.Utility.GetEntity LiWahl, piPunkt, "Linie wählen"

Wobei in Liwahl die Linie und in piPunkt der Punkt gespeichert wird.

Ja denkste, ich brauche den genauen Punkt auf der Linie.
piPunkt speichert aber nur dort, wo mit der Pickbox gewählt wurde, auch wenn es knapp neben der Linie ist. Macht man die Pickbox sehr sehr groß sind die Abweichungen zwischen gepicktem Punkt und Linie auch sehr groß.
Ich benötige aber den extakten Punkt auf der Linie.

Also habe ich mir gedacht ich fange die Linie einfach mit nächster, und schon habe ich den extakten Punkt auf der Linie.

Leider weiss ich nicht, wie man nächster als Voreinstellung einstellt, wenn der Benutzer die Linie wählen soll.

Benutzt man GetEntity und gibt dann manuell nächster in der Eingabezeile ein, klappt es. Leider kriege ich das programmtechnisch nicht hin.

Wenn man z.B. in der Variable OSMODE 512 für nächster einstellt, so klappt das hervorragend bei dem Getpoint Utility.

ThisDrawing.SetVariable "osmode", 512
piPunkt = ThisDrawing.Utility.GetPoint(, "Linie wählen"))

Leider funktioniert das bei GetEntity nicht.

Was mache ich falsch, bzw. wer kennt eine Lösung des Problems?

Danke im voraus, Jörg!

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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1357
Registriert: 24.07.2002

AutoCAD ACA 2018
Solidworks 2016 Sp5
Enterprise PDM 2016 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell T3620
Intel Core i7-7700K
16 GB Arbeitsspeicher
2x Samsung S24C650
Dell M4800

erstellt am: 29. Aug. 2007 18: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 JoergAD 10 Unities + Antwort hilfreich

Hi Jörg,

Das geht über einen Umweg:
-Setzt die Variable "Osmode" auf 512 (Fang Nächster". Altern Wert vorher speichern!
-Wähle den Punkt auf der Linie mittels GetPoint.
-Osmode kann wieder auf den alten Wert zurückgesetzt werden.
-Wähle die Linie mit SelectAtPoint (Koordinaten hast du ja über GetPoint bekommen).

Jetzt hast du die Linie und den genauen Punkt auf der Linie.

Warum musst du denn den Punkt unbedingt genau haben?!

Gruß, Carsten

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 29. Aug. 2007 19:14    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 JoergAD 10 Unities + Antwort hilfreich

Hallo Jörg,

eigentlich macht dein Programm doch alles richtig.
Wenn du sagst GetEntity gibt es dir das Element (und als Abfall den Punkt an dem du klickst)
Wenn du den Punkt haben willst gibt es den Punkt. Du kannst wie Carsten schrieb die Selektion am Punkt holen. Das hat den Nachteil das der Benutzer nicht das Element sieht was er wählt.
Wenn es sich um Linien handelt, würde ich die Strecken zwischen "Pickpunkt" und den jeweiligen Enden der Linie rechnen. Ist die Summe der Strecken ungefähr gleich der Strecke zwischen Anfang und Ende kann davon ausgegangen werden das der Benutzer in der Nähe der Linie geklickst hat. Dann kannst du per Interpolation mit der Strecke den Punkt genau auf der Linie rechnen. Ist die Differenz zu groß kannst du vom Benutzer ja nochmals den Punkt picken lassen.

Wilfried Stelberg

[Edit]
PS: Was ist denn aus deinem Handle geworden
[/Edit]
------------------
Warum lisp'eln wenn's auch anders geht. 
www.ib-stelberg.de

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - ACA 2013
Arcibem
System:
Windows NT, 2000, XP
Internet-Startseite:
http://www.archi.de

erstellt am: 29. Aug. 2007 21:10    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 JoergAD 10 Unities + Antwort hilfreich

Hi Jörg,
ich poste dir mal einen Lisp-Code, auch wenn das hier das VBA-Forum ist. Da gibt es eine entsprechende Funktion:
Code:
(defun get-point-on-element ( / p ele)
  (setq p (entsel))
  (setq ele (car p) p (cadr p))
  (vlax-curve-getClosestPointTo ele p)
)
Das Entscheidende ist vlax-curve-getClosestPointTo. Vielleicht fällt ja noch wem eine VBA-Entsprechung ein?
Grüsse, Henning

------------------
VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

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

JoergAD
Mitglied



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

Beiträge: 43
Registriert: 07.03.2007

erstellt am: 30. Aug. 2007 10: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

Hi !

Sorry, melde mich erst heute wieder. Hatte gestern nen Aussentermin.

Also Carstens Lösung ist eingentlich die, die ich gewählt habe und die auch klappt.

Komisches VBA. Hier geht alles immer nur über Umwege und selten direkt wie bei Lisp.

Ich brauche den exakten Punkt, weil ich einen Text im immer gleichen vordefinierten Abstand an die Linie setzen will, egal in welcher Lage die Linie liegt. Eine Frage meinerseits in einem anderen Thread gehört ebenfalls zu dem Gesamtprogramm.

Danke nochmal, ihr habt sehr geholfen.

CUSee You, Jörg!

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