Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  iProperty zuweisen nur mit Sub?

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:  iProperty zuweisen nur mit Sub? (1797 mal gelesen)
Doc Snyder
Ehrenmitglied V.I.P. h.c.
Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen



Sehen Sie sich das Profil von Doc Snyder an!   Senden Sie eine Private Message an Roland Schröder  Schreiben Sie einen Gästebucheintrag für Roland Schröder

Beiträge: 13115
Registriert: 02.04.2004

AIP2013SP2.2 XPproSP2 MS-IntelliMouse-Optical SpacePilot
DellM4600 2,13GHz 2GB FxGo1400 1920x1200
am Dock Dell2711

erstellt am: 18. Okt. 2009 23: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

Moin!

Ich habe mir grad aus verschiedenen zusammengeschnorrten Code-Schnipseln ein RangeBox-Makro zusammengebastelt, und das geht sogar  . Nur verstehe ich nicht, warum von den folgenden zwei, mir gleichwertig erscheinenden Code-Varianten nur die erste funktioniert:

So geht es (so hat es ja auch Igor mir gezeigt  ):

Code:
Sub BoxDimensions()
    If ThisApplication.ActiveDocumentType <> kPartDocumentObject Then
        MsgBox "Geht nur im einzeln geöffneten Bauteil (ipt)!"
        Exit Sub
    End If
   
    Dim oPart As PartDocument
    Set oPart = ThisApplication.ActiveDocument
   
    Dim sBox As String
    Dim dX As Double
    Dim dY As Double
    Dim dZ As Double
    dX = Round((oPart.ComponentDefinition.RangeBox.MaxPoint.X - oPart.ComponentDefinition.RangeBox.MinPoint.X), 4)
    dY = Round((oPart.ComponentDefinition.RangeBox.MaxPoint.Y - oPart.ComponentDefinition.RangeBox.MinPoint.Y), 4)
    dZ = Round((oPart.ComponentDefinition.RangeBox.MaxPoint.Z - oPart.ComponentDefinition.RangeBox.MinPoint.Z), 4)
    sBox = dX * 10 & " x " & dY * 10 & " x " & dZ * 10
       
    Call SetPropertyValueBox(oPart.PropertySets(4), sBox)
     
End Sub

Private Sub SetPropertyValueBox(oPropset As PropertySet, sBox As String)
    On Error Resume Next
    If oPropset.Item("Box").Name <> "Box" Then
        Call oPropset.Add("", "Box")
        oPropset.Item("Box").Value = sBox
    Else
        If oPropset.Item("Box").Value <> sBox Then
            oPropset.Item("Box").Value = sBox
        End If
    End If
    MsgBox "Box = " & sBox
    End Sub


Und so geht es nicht (ich möchte die Private Sub einsparen, deren Sinn ich nicht erkenne):

Code:
Sub BoxDimensions2()
    If ThisApplication.ActiveDocumentType <> kPartDocumentObject Then
        MsgBox "Geht nur im einzeln geöffneten Bauteil (ipt)!"
        Exit Sub
    End If
   
    Dim oPart As PartDocument
    Set oPart = ThisApplication.ActiveDocument
    Dim oPropset As PropertySet
   
    Dim sBox As String
    Dim dX As Double
    Dim dY As Double
    Dim dZ As Double
    dX = Round((oPart.ComponentDefinition.RangeBox.MaxPoint.X - oPart.ComponentDefinition.RangeBox.MinPoint.X), 6)
    dY = Round((oPart.ComponentDefinition.RangeBox.MaxPoint.Y - oPart.ComponentDefinition.RangeBox.MinPoint.Y), 6)
    dZ = Round((oPart.ComponentDefinition.RangeBox.MaxPoint.Z - oPart.ComponentDefinition.RangeBox.MinPoint.Z), 6)
    sBox = dX * 10 & " x " & dY * 10 & " x " & dZ * 10
       
    If oPart.PropertySets(4).Item("Box").Name <> "Box" Then
        Call oPart.PropertySets(4).Add("", "Box")
        oPart.PropertySets(4).Item("Box").Value = sBox
    Else
        If oPart.PropertySets(4).Item("Box").Value <> sBox Then
            oPart.PropertySets(4).Item("Box").Value = sBox
        End If
    End If
    MsgBox "Box = " & sBox
     
End Sub

Kann mir das vielleicht jemand erklären?

------------------
Roland  
www.Das-Entwicklungsbuero.de

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

rtend12
Mitglied
Dipl.-Ing. (FH) Maschinenbau / Konstrukteur


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

Beiträge: 436
Registriert: 21.07.2004

Catia V5 (R16SP5, B18SP5)
VB.Net 2003

erstellt am: 18. Okt. 2009 23:45    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 Doc Snyder 10 Unities + Antwort hilfreich

Hallo Roland,

deklariere Dein PropertySet in Deiner Sub und es sollte gehen.
In dem Code mit 2 Subs wird das PropertySet an sie 2. Sub übergeben und steht somit als Object zur Verfügung. In dem anderen Code versuchst Du es ohne Deklaration.

Allerdings mußte ich nach einem Test gerade feststellen, dass auch der erste Code funktioniert.

Was geht denn bei Dir nicht?

Gruß
Reinhard

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

Doc Snyder
Ehrenmitglied V.I.P. h.c.
Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen



Sehen Sie sich das Profil von Doc Snyder an!   Senden Sie eine Private Message an Roland Schröder  Schreiben Sie einen Gästebucheintrag für Roland Schröder

Beiträge: 13115
Registriert: 02.04.2004

AIP2013SP2.2 XPproSP2 MS-IntelliMouse-Optical SpacePilot
DellM4600 2,13GHz 2GB FxGo1400 1920x1200
am Dock Dell2711

erstellt am: 19. Okt. 2009 00: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


VBA-Mecker-091018-1.GIF

 
Hi!

Der Knackpunkt liegt glaub ich hier:

Code:
Call oPart.PropertySets(4).Add("", "Box")
(in dem Block "Wenn iProperty "Box" noch nicht vorhanden")

Ist das iProp nicht vorhanden, gibt es den abgebildeten Mecker. Ist Code1 1x gelaufen und nur eine Änderung zu aktualisieren (also Else an der Stelle), dann geht es. Wenn ich voher das iProp "Box" von Hand anlege, läuft es allerdings auch nicht.

Zur Deklaration:
IMHO habe ich in dem Code2 die Deklaration vorgenommen, halte das aber trotzdem für überflüssig, da ich dort diese Variable überhaupt nicht verwende, sondern sie nur als Unterpunkt zu oPart. anspreche, und ebenda vermute ich das Problem. Vermutlich tuts in dieser Form das Call nicht.


------------------
Roland  
www.Das-Entwicklungsbuero.de

[Diese Nachricht wurde von Doc Snyder am 19. Okt. 2009 editiert.]

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

daywa1k3r
Moderator
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

Alienware m17x, Win7, Inventor2012

erstellt am: 19. Okt. 2009 01:28    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 Doc Snyder 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Doc Snyder:
ich möchte die Private Sub einsparen, deren Sinn ich nicht erkenne

Moin Roland, als Konstrukteur verbaust du deine Bauteile auch in logisch zusammenhängenden Baugruppen. So ähnlich ist es auch in der Programmierwelt (Werte berechnen, Werte setzen, blah...). Der Stil den du anstrebst ähnelt einer Baugruppe mit 1000 Bauteilen und keinen Unterbaugruppen 

------------------
Grüße Igor

FX64 Software Solutions - Inventor Tools

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

Doc Snyder
Ehrenmitglied V.I.P. h.c.
Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen



Sehen Sie sich das Profil von Doc Snyder an!   Senden Sie eine Private Message an Roland Schröder  Schreiben Sie einen Gästebucheintrag für Roland Schröder

Beiträge: 13115
Registriert: 02.04.2004

AIP2013SP2.2 XPproSP2 MS-IntelliMouse-Optical SpacePilot
DellM4600 2,13GHz 2GB FxGo1400 1920x1200
am Dock Dell2711

erstellt am: 19. Okt. 2009 02: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

Hallo Igor! 

Au ja, bring Du mir das Konstruieren bei!    Eine Unterbaugruppe ist erst dann richtig sinnvoll, wenn sie mehr als ein Mal angewendet wird oder wenn es sonst zu viel wird. Das ist hier beides nicht der Fall!

Sag mir doch bitte lieber, warum das in dem zweiten Beispiel nicht geht.

------------------
Roland  
www.Das-Entwicklungsbuero.de

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

daywa1k3r
Moderator
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

Alienware m17x, Win7, Inventor2012

erstellt am: 19. Okt. 2009 09:18    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 Doc Snyder 10 Unities + Antwort hilfreich

  
Zitat:
Original erstellt von Doc Snyder:
Hallo Igor!   
Au ja, bring Du mir das Konstruieren bei!       

Hatte ich gar nicht vor?! Ist wohl schon zu spät? ;)

 

Zitat:
Original erstellt von Doc Snyder:
Eine Unterbaugruppe ist erst dann richtig sinnvoll, wenn sie mehr als ein Mal angewendet wird oder wenn es sonst zu viel wird. Das ist hier beides nicht der Fall!

Eine Eigenschaft setzen ist so ziemlich das häufigste was in der Inventor Programmierung vorkommen kann. Da bleib ich bei dem Vergleich mit den Baugruppen.

 

Zitat:
Original erstellt von Doc Snyder:

Sag mir doch bitte lieber, warum das in dem zweiten Beispiel nicht geht.

Ja, du sollst nicht die Zeilen entfernen deren Bedeutung du nicht kennst     Wie z.B. On Error Resume Next   

Aber das ist eh VBA und daher wie der Leo sagen würde "murkso grande". Alleine die Bedingung die wir prüfen im 'If' macht nicht viel Sinn, aber wer weiß welchen Sonderfall ich da umgehen wollte...


------------------
Grüße Igor

FX64 Software Solutions - Inventor Tools

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

pd65
Mitglied



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

Beiträge: 83
Registriert: 01.06.2004

Windows 7 pro (64);
IV 2009 pro; SP2

erstellt am: 27. Okt. 2009 13:46    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 Doc Snyder 10 Unities + Antwort hilfreich

Hallo,

ist euch schon aufgefallen, daß die Ermittlung der
Bauteilgrenzen auch die Größe einer vorhandenen Arbeitsebene mitnimmt?

Wenn die Arbeitsebene "unsichtbar" geschalten ist, dann stimmts.

Gibts denn da eine Möglichkeit nur den Volumenkörper zu ermitteln,
bzw. zuerst alle Arbeitselemente auszuschalten?

Beste Grüße

Peter

[Diese Nachricht wurde von pd65 am 27. Okt. 2009 editiert.]

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

daywa1k3r
Moderator
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

Alienware m17x, Win7, Inventor2012

erstellt am: 27. Okt. 2009 13:58    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 Doc Snyder 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von pd65:
Gibts denn da eine Möglichkeit nur den Volumenkörper zu ermitteln?

Vielleicht die Arbeitselemente vor der Berechnung ausblenden? Oder über SurfaceBody die Rangebox berechnen? Alles Fleißaufgaben 

------------------
Grüße Igor

FX64 Software Solutions - Inventor Tools

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