Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Position auswählen

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
Autor Thema:  Position auswählen (1754 mal gelesen)
spikey jr.
Mitglied
Konstrukteur


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

Beiträge: 20
Registriert: 15.03.2007

erstellt am: 05. Aug. 2009 16:20    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 zusammen!

Vielleicht könnt ihr mir weiterhelfen.
Ich füge über ein Makro eine Komponente in eine Zeichnung ein.
Es handelt sich dabei um einen virtuellen Fremdsachnummern-Aufkleber.
Im Hintergrund befindet sich eine Tiff-Datei(Fremdzeichnung).

Und da es sich um sehr viele Fremdzeichnungen handelt, die wir ins System überführen möchten, würde ich das ganze gerne automatiseren.

Natürlich sollte dieser "Aufkleber" an eine leere Stelle gesetzt werden.

Am Besten ginge das, wenn das Makro unterbrochen wird und der User auf eine geeignete Stelle auf der Zeichnung klickt, an der dann der Aufkleber eingefügt wird.

Hier der Code, wie ich den Aufkleber einfüge (Position X,Y)

Code:

Set drwDocument = CATIA.ActiveDocument
Set DrwSheets = drwDocument.Sheets
Set DrwSheet = DrwSheets.ActiveSheet
Set DrwViews = DrwSheet.Views
Set DrwView = DrwViews.Add("Test")


Set KatalogDocument = CATIA.Documents.Read("C:\2D_Aufkleber\2D-Aufkelber.CATDrawing")
Set KatalogSheets = KatalogDocument.Sheets
Set KatalogSheet = KatalogSheets.Item("Schriftfeld")
Set KatalogViews = KatalogSheet.Views
Set KatalogView = KatalogViews.Item("Schriftfeld fuer Fremdzeichnungen")
Set KatalogComponents = DrwView.Components
Set KatalogComponent = KatalogComponents.Add(KatalogView, X, Y)

KatalogComponent.Explode

KatalogComponents.Remove("Schriftfeld fuer Fremdzeichnungen.1")



Hoffentlich fällt Euch dazu was ein. Ein herzliches Dankeschön im vorraus!
Spikey

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

V5Playaz
Mitglied
Dipl.-Ing (BA)


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

Beiträge: 447
Registriert: 12.07.2005

DELL PRECISION 390
3,25 GB RAM
WIN XP PRO SP2
CATIA V5 R16-19
Delmia V5 R19
VB6, VB2008
Adobe Acrobat 9 Pro Extended

erstellt am: 06. Aug. 2009 08:13    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 spikey jr. 10 Unities + Antwort hilfreich

Hallo Spikey,

versuche mal mit folgender Funktion einen beliebigen Punkt auszuwählen:
Function Indicate2D ( iMessage As String, ioDocumentWindowLocation As SAFEARRAY(VARIANT)) As String

grüße Dominik

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

DanielFr.
Moderator
Manager


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

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 06. Aug. 2009 08:15    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 spikey jr. 10 Unities + Antwort hilfreich


Mausposition_VBN_v1.0.zip

 
Hallo Spikey,

also mit CATIA Boradmitteln geht sowas nicht. Du musst dann wohl oder übel auf CATvba umsteigen. Hier könntest du es mir einer API (GetCursorPos aus der "user32" Library) machen. Das Poblem wir aber bei dir sein wie genau du dein Script stoppen willst um die interaktion des Anwender abzuwarten.

Eine Idee ist eine UserForm zu erstellen (diese wird mit dem Script geladen ABER nicht angezeigt). Auf der Userform fügst du einen Timer hinzu. Der Timer sollte ein Interval von 10ms haben und natürlich ticken. D.h. bei jedem Tick (also alle 10ms) kannst du die Position des Mauszeigers global (also auf dem Desktop auslesen). Jetzt musst du nur noch auf das Klick-Ereigniss der Maus reagieren können. Das geht wiederrum mit einer API (GetAsyncKeyState as der "user32" Library). Mit dieser API kannst du die Maus "überwachen" und bei einem Mausklick reagieren.

Zum Ablauf:

1. Du lädst dein Script und die UserForm (im Load-Ereignis blendest du die Form aus (wenn du das im Load machst wird sie gar nicht eingeblendet)
2. An der Stelle deines Scriptes an dem der User interagieren soll, lässt du den Timer anfangen zu laufen.
3. Jetzt brauchst du eine Abfrage ob CATIA gerade die aktive Application ist (das könntest du über die PocessID herausfinden).
4. Wenn ja zeigst du noch eine MsgBox an das der User klicken soll.
5. Jetzt sollte dein Script stehen (du bist ja zum starten des Timers in die aus deiner CATMain in die UserForm Class gesprungen), er wartet ja auf den Mausklick im CATIA Fenster (ACHTUNG hier ist eine Schwierigkeit den Bereich des Klick-Ereignisses festzulegen (nur innerhalb einer Zeichnung!)
6. Klickt der Anwender nun innerhalb einer Zeichnung mit der Maus, kannst du über die GetCursorPos die Position abfragen und als Long an die Funktion zum  Einfügen der Komponente weitergeben

Du siehst so einfach ist es nicht. Es sollte aber alles möglich sein. Ich hab hier mal auf die schnelle ein kleines Beispielprogramm (in VB.NET) gemacht. Hier ist jedoch das Auslesen der Cosurposition und das Starten des Timers wesentlich einfacher ;-)
Das Programm erfasst IMMER die aktuelle Mausposition. bei einem Klick mit der linken Maustaste wird diese Position erfasst und bis zum nächsten Klick angezeigt.

Projektdaten (für Vb.NET) könnte ich auf wunsch hier reinstellen aber es soll ja wie gesegt nur ein kleines Beispiel sein und in CATVba geht es so und so anders (siehe oben mit der "GetCursorPos"-API)

------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

   

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

DanielFr.
Moderator
Manager


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

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 06. Aug. 2009 08:16    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 spikey jr. 10 Unities + Antwort hilfreich

Hallo,

ah ok das geht direkt in CATIA. Hab ich nicht gewusst...man lernt nie aus.

------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

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

spikey jr.
Mitglied
Konstrukteur


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

Beiträge: 20
Registriert: 15.03.2007

erstellt am: 06. Aug. 2009 10:19    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

Das ist genial-Danke!

Hier mein Code:

Code:

Dim Status
Dim Position(1)

CATIA.ActiveWindow.ActiveViewer.Reframe  'Fit in Page

Status  = drawingDocument1.Indicate2D ("Punkt wählen",Position)

if (Status = "Cancel") then
MsgBox "Aufkleber kann nicht eingefügt werden"
Exit Sub
End if

PositionAufkleber(0) = Position(0)
PositionAufkleber(1) = Position(1)


[Diese Nachricht wurde von spikey jr. am 06. Aug. 2009 editiert.]

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

V5Playaz
Mitglied
Dipl.-Ing (BA)


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

Beiträge: 447
Registriert: 12.07.2005

DELL PRECISION 390
3,25 GB RAM
WIN XP PRO SP2
CATIA V5 R16-19
Delmia V5 R19
VB6, VB2008
Adobe Acrobat 9 Pro Extended

erstellt am: 06. Aug. 2009 11: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 spikey jr. 10 Unities + Antwort hilfreich

Wenn du den Code fertig hast,
darfst du ihn gerne hier veröffentlichen, um auch anderen zu helfen ;-)

grüße Dominik

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