Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor
  Programmieren...

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:  Programmieren... (995 mal gelesen)
daywa1k3r
Ehrenmitglied V.I.P. h.c.
Softwareentwickler



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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012 64Bi

erstellt am: 05. Aug. 2002 11:22    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 Leute,

ich habe zwei Probleme, und zwar möchte ich einfach mit VB Code ein *.ipt in eine
Baugruppe einfügen, und das klappt ( dank Beitrag von Armin B ---> http://www.cad.de/foren/ubb/Forum50/HTML/001127.shtml ) prima.
Mein Problem Nr.1:

- Das eingefügte Teil wird automatisch plaziert, und das ist schlecht. Wenn ich in Inventor
ein teil in die Baugruppe einfüge dann ist das Teil an meiner Maus fixiert, und ich kann es
frei ablegen wo ich es brauche. Hier ein kleines gif ( sorry an alle Modem User )

und ich kann es auch noch beliebig oft einfügen:

Ich möchte für das von mir eingefügtes Teil auch die gleiche Möglichkeiten bieten.

Mein zweites Problem:

- Mein Code funktioniert nur wenn ich ein Projekt unter VB Editor von IV erstelle und als *.ivb
abspeichere. Ich möchte es aber wie eine ActiveX DLL laufen lassen. Ich habe also die Online-Hilfe Schritt
für Schritt durchgearbeitet, mein Code in VB6 geschrieben, es als ActiveX DLL compiliert, die *.reg
Datei für die Registry Einträge aktualisierung erstellt und ausgeführt und siehe da, unter Werkzeugen
erscheint meine Funktion, und die kann ich auch starten. Jetzt mein Problem: schon in der erste Zeile

Dim oAsmCompDef As AssemblyComponentDefinition
Set oAsmCompDef = ThisApplication.ActiveDocument.ComponentDefinition

bekomme ich die Meldung:

So, was mache ich falsch ? Programmierer unter Euch bitte melden.

Ich habe in *.ivb auf nichts besonderes verwiesen, vielleicht sollte ich es in der ActiveX DLL schon machen,
aber dazu fehlt mir die Erfahrung.

Danke und Grüße

daywa1k3r


PS: Moderatoren, ich habe die max. Grösse für die [img] gesucht und nichts gefunden, daher so groß.
Ich hoffe es sind nicht zuviele KB, und wenn ja kurz mailen, dann kommt es nicht mehr vor.


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

SteffenPudor
Mitglied
Software-Entwickler


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

Beiträge: 31
Registriert: 20.03.2002

erstellt am: 05. Aug. 2002 14: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 Nur für daywa1k3r 10 Unities + Antwort hilfreich

Hallo,

1. Problem:

Nehmen wir mal an, die ipt heißt "box.ipt" und liegt im Verzeichnis "d:\temp". Dann dürfte folgende Funktion ganz gut helfen.

Public Sub InsertBox()
    Dim doc As Document
    Set doc = ThisApplication.ActiveDocument
    Dim dte As DocumentTypeEnum
    dte = doc.DocumentType
    ' check document type
    If dte = kAssemblyDocumentObject Then
        ' Push the filename onto the Inventor clipboard
        Call ThisApplication.CommandManager.PostPrivateEvent(kFileNameEvent, "D:\temp\box.ipt")
        ' Start the Insert iFeature command
        Call ThisApplication.CommandManager.StartCommand(kPlaceComponentCommand)
    Else
        MsgBox "Please open an assembly document"
    End If
End Sub

2. Problem:

Wenn du der Inventor-Hilfe gefolgt bist, hast du irgendwo in Deinem Code die Variable oApp deklariert.

Private oApp As Inventor.Application

Zugewiesen wurde dieser Funktion das Inventor-Applikationsobjekt in der Funktion ApplicationAddInServer_Activate
   
    ' Save a reference to the Application object.
    Set oApp = AddInSiteObject.Application

Tausche einfach alle ThisApplication gegen oApp aus. ThisApplication steht nur in VBA zur Verfügung - Exen oder dll's müssen es sich selber beschaffen.

Steffen Pudor
web2CAD AG Amberg http://www.genius.de

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

Pisarz
Mitglied



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

Beiträge: 280
Registriert: 05.03.2002

AIP2011 Win7x64
HP Z400/W3565(3.2GHz) 12GB RAM
100GB SSD / 1TB Raid1
MSI R5770 Hawk
SpacePilot

erstellt am: 05. Aug. 2002 14: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 Nur für daywa1k3r 10 Unities + Antwort hilfreich

Zum Problem Nr. 2:

In VB ist das Objekt "ThisApplication" nicht definiert. Du musst dir das Objekt während der Aktivierung des AddInServers holen:

aus der SDK-Hilfe:

....
Private Sub ApplicationAddInServer_Activate( _
ByVal AddInSiteObject As Inventor.ApplicationAddInSite, _
ByVal FirstTime As Boolean)
    ' Save a reference to the Application object.
    Set oApp = AddInSiteObject.Application
....

Diese oApp ist nun dein Application - Objekt, dass Du in deinem Code verwenden kannst.

Zum Problem Nr. 1 fällt mir auf die Schnelle nichts ein, ist wahrscheinlich aber nicht so einfach zu lösen.

Zu den Gifs: Du solltest Bilder immer als Dateianhang beilegen, dann muss nicht jeder die Dinger runterladen...

------------------
Grüße Jörgen

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

daywa1k3r
Ehrenmitglied V.I.P. h.c.
Softwareentwickler



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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012 64Bi

erstellt am: 05. Aug. 2002 16: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

Hallo Leute,

@Steffen Pudor
Lösung zu Problem 1: irgendwie geht es doch noch nicht und zwar:

hier ---> Call ThisApplication.CommandManager.StartCommand(kPlaceComponentCommand)

bekomme ich :



Lösung zu Problem 2: das auch nicht ganz:


Ich bin aber sehr  optimistisch dass sich überhaupt jemand gemeldet hat. Sehr beruhigend. 

Allerdings muß ich dazu sagen dass sich in meiner DLL eine UserForm befindet, und die restliche Deklarationen sind in einem Modul. Ich habe oApp als Public definiert aber es funzt trotzdem nicht.

Idea ?

@Pisarz

Deine Lösung ist die gleiche wie da oben, daher die gleiche Antwort.

Ich bin mir sicher dass ich irgendwas wichtiges falsch mache, aber was ?!?

Die animierte Gifs werde ich in der Zukunft hochladen, aber solche kleine 5Kb gifs binde ich weiterhin in den Beitrag ein.

Grüße Steffen Grüße Pisarz

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

Pisarz
Mitglied



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

Beiträge: 280
Registriert: 05.03.2002

AIP2011 Win7x64
HP Z400/W3565(3.2GHz) 12GB RAM
100GB SSD / 1TB Raid1
MSI R5770 Hawk
SpacePilot

erstellt am: 05. Aug. 2002 16:31    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 daywa1k3r 10 Unities + Antwort hilfreich

Problem 2:

Wenn Du in der AddIn Klasse Routinen aus anderen Modulen aufrufst, übergib am besten das oApp Objekt als Parameter:

Private Sub ApplicationAddInServer_Activate(ByVal AddInSiteObject As Inventor.ApplicationAddInSite, ByVal FirstTime As Boolean)

...

  ' Save a reference to the Application object.
  Set oApp = AddInSiteObject.Application

...

  Set oCmd3 = AddInSiteObject.CreateCommand("Maßstab", 3, True)

End Sub

...

Private Sub ApplicationAddInServer_ExecuteCommand(ByVal CommandID As Long)
  ' Check to see which command was run.
  Select Case CommandID

...

    Case 3
      Call EE_MasstabEinfuegen(oApp)
  End Select
End Sub

Im Modul dann:

Sub EE_MasstabEinfuegen(oApp As Inventor.Application)

...
 
  'Objekt herstellen
  Set oDoc = oApp.ActiveDocument


Problem 1: Steffen fragen

------------------
Grüße Jörgen

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

daywa1k3r
Ehrenmitglied V.I.P. h.c.
Softwareentwickler



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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012 64Bi

erstellt am: 06. Aug. 2002 08: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

Hi,

nein, nein, nein, ...

Jetzt nochmal ganz langsam. Ich habe eine Form1 und ein Modul1. Im Modul1 sind die 4 Subs für Inventor
deklariert, und die einfache Funktion die meine Form1 zeigen soll:

Option Explicit
Implements ApplicationAddInServer
Dim oApp As Inventor.Application
Dim oCmd1 As Command
Dim oCmd2 As Command

Private Sub ApplicationAddInServer_Activate(ByVal AddInSiteObject As Inventor.ApplicationAddInSite, ByVal FirstTime As Boolean)
' Save a reference to the Application object.
    Set oApp = AddInSiteObject.Application
   
    ' Create the first command.
    Set oCmd1 = AddInSiteObject.CreateCommand("bittebitte", 1, True)
   
    ' Create the second command.
    Set oCmd2 = AddInSiteObject.CreateCommand("Toggle 1", 2, True)

End Sub

Private Property Get ApplicationAddInServer_Automation() As Inventor.AddInAutomation
'Online Hilfe sagt dass ich hier was reinschreiben soll, sonst würde die Funktion beim compilieren entfernt
End Property

Private Sub ApplicationAddInServer_Deactivate()

    ' Release all references.
    Set oCmd1 = Nothing
    Set oCmd2 = Nothing
    Set oApp = Nothing
End Sub

Private Sub ApplicationAddInServer_ExecuteCommand(ByVal CommandID As Long)
' Check to see which command was run.
    Select Case CommandID
        Case 1
            ZeigeForm1
        Case 2
            ' Toggle the enabled state of command 1.
            If oCmd1.Enabled Then
                oCmd1.Enabled = False
            Else
                oCmd1.Enabled = True
            End If
    End Select

End Sub

Private Sub ZeigeForm1()
Form1.Show 1
End Sub

Und in Form1 passiert nichts anderes als :

Private Sub Command1_Click()
InsertBox
End Sub

Ich könnte auch den Code von InsertBox in die Command_Click reinschreiben, aber hier is das unwichtig. Wenn ich die
InsertBox in den Modul1 deklariere und in Command1_Click "Modul1." reinschreibe erscheint nicht als "eingenschaft" InsertBox
( komisch, oder ? ), beim laufen stürtzt das Program da ab. Deklariere ich es inerhalb Form1, dann fehlt mir das Objekt
( vermutlich oApp ). Kann ich aus den Modul1 oApp als Parameter an die form übergeben so dass es dann in der InsertBox
verfügbar ist ? Und überhaupt ist die InsertBox so richtig:

Public Sub InsertBox()
  Dim doc As Document
  Set doc = oApp.ActiveDocument
  Dim dte As DocumentTypeEnum
  dte = doc.DocumentType
  ' check document type
  If dte = kAssemblyDocumentObject Then
    ' Push the filename onto the Inventor clipboard
    Call oApp.CommandManager.PostPrivateEvent(kFileNameEvent, "D:\temp\box.ipt")
    ' Start the Insert iFeature command
    Call oApp.CommandManager.StartCommand(kPlaceComponentCommand)
  Else
    MsgBox "Please open an assembly document"
  End If
End Sub

Eigendlich sollte ich oApp von Modul1 an die Form1 übergeben, und dann irgendwie nach den Click Ereignis an die InsertBox
übergeben. Das kliengt alles irgendwie falsch, oder ?

Naja, vielleicht seht Ihr hier etwas was ich nicht sehe, ( oder so ) .

Grundsätzlich sind ein Paar Fragen offen

1. wo deklariere ich die InsertBox so das oApp greifbar ist
2. ist die Funktion InsertBox so richtig
3. und wie übergebe ich die Parameter wenn ich eine zwischenstation, wie Form1, habe

Grüße

daywa1k3r

Das Leben ist ein kack-Spiel, aber die Grafik ist geil 

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

Pisarz
Mitglied



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

Beiträge: 280
Registriert: 05.03.2002

AIP2011 Win7x64
HP Z400/W3565(3.2GHz) 12GB RAM
100GB SSD / 1TB Raid1
MSI R5770 Hawk
SpacePilot

erstellt am: 06. Aug. 2002 10:06    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 daywa1k3r 10 Unities + Antwort hilfreich

Option Explicit

...

Private Sub ZeigeForm1()
Load Form1
Set Form1.oApp = oApp

Form1.Show 1
Unload Form1
End Sub

Und in Form1 passiert nichts anderes als :

Option Explicit
Public oApp As Inventor.Application

Private Sub Command1_Click()
InsertBox
End Sub
.....

------------------
Grüße Jörgen

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

daywa1k3r
Ehrenmitglied V.I.P. h.c.
Softwareentwickler



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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012 64Bi

erstellt am: 06. Aug. 2002 12:40    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

@Steffen 

@Jörgen 

Alles klar ?

Jetzt habe ich nur noch eine Frage 

die böse Meldungen:

kommen nur wenn ich meine Funktion gestartet habe und ich anschliessend den Inventor schliesse. Ich denke, daß das mit :

Private Sub ApplicationAddInServer_Deactivate()

    ' Release all references.
    Set oCmd1 = Nothing
    Set oCmd2 = Nothing
    Set oApp = Nothing
End Sub

zusammen hängt, weil es nur beim schliessen von Inventor passiert.

Starte ich meine Funktion nicht, und ich schliesse den Inventor, läuft alles normal.

Am was liegt denn das ?

Vielen Dank und Grüße

daywa1k3r

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

daywa1k3r
Ehrenmitglied V.I.P. h.c.
Softwareentwickler



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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012 64Bi

erstellt am: 06. Aug. 2002 14:27    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

Alles OK Leute,

ich habe es beim Kolegen probiert, und keine Fehlermeldung beim schliessen bekommen. Mein Inventor hat wohl ein Problem. Aber halb so wild.

Prost

daywa1k3r

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)2024 CAD.de | Impressum | Datenschutz