I have a simple code below trying to iterate through all the assembly component and copy the iProperties > Occurrece Name (i.e. "Part1:1") and paste it to iProperties > Project tab > Part Number field for each individual part in assembly.
' set a reference to the assembly component definintion.
' This assumes an assembly document is open.
Dim oAsmCompDef As AssemblyComponentDefinition
oAsmCompDef = ThisApplication.ActiveDocument.ComponentDefinition
'Iterate through all of the occurrences
Dim oOccurrence As ComponentOccurrence
For Each oOccurrence In oAsmCompDef.Occurrences
Dim oName As String
oName = oOccurrence.Name
iProperties.Value(oOccurrence.Name, "Project", "Part Number") = oName
MessageBox.Show(oOccurrence.Name, "iLogic")
Next
The Debug message shows the correct output for every iteration, but when I check each part's properties they all have the Occurrence Name of the last part in the aseembly.
I want to be able to control the location/position of a component in an assembly. This is easy enough through the iProperties/Occurrence tab and then adjust the location of the X,Y, and Z offsets. Is this possible using iLogic? I have been unable to find a function to access via iLogic. Ultimately I am trying to translate a component about an axis not a pattern.
II need a way to tell if a component occurence is a virtual component.
I'm using a For Each loop to cycle through all of the components in an assembly, and if the component is itself an assembly to set the LOD to "Custom". I'm using the definition document descriptor object for this. It all woks fine until the loop comes across a virtual component which doesn't have a definition document, so I need a way to check if the component is virtual and needs to be skipped.Here's the
Option ExplicitImports Inventor.LevelOfDetailEnumSub MainiLogicVb.UpdateWhenDone = TrueDim doc As AssemblyDocumentDim oLOD As LevelOfDetailRepresentationDim oAsmCompDef As ComponentDefinitionDim oComp As ComponentOccurrenceDim oComps As ComponentOccurrencesdoc = ThisDoc.DocumentIf. [code]....
I have a wall of frames, if you will, and some frames within this wall are different sizes. When doing the BOM, I want to be able to combine anything that has the same stock number as well as the same cut length. The only way I have thought to do this so far is to cycle through each stock number and if the cut length is the same, I override the quantity of one and change the BOM Structure of the other to "Reference".
How can I change the BOM Structure to reference without selecting the part or going through the BOM Editor? Is there some VBA code I could utilize? I am striking out by solely using iLogic.
I have several parts that are controlled by ilogic rules linked to member names ,and in some cases some of staff run the productivity bonus tool (rename browser nodes) to either file name or part number.
This causes the rules to fail as rules definition name have been overwritten.
I am after a simple rule that is triggered on save to save my occurrence browser name to what originally was defined
I love the new triad function when placing a new part in Inventor 2014: I am now searching to trigger the same function for a part that already has been placed.
Something like:
1) select component
2) press a button (triggers the macro I now want to write)
3) the triad pops up.
I searched true the Inventor Help & what's new in the API. But didn't find any reference to that command. So I am afraid that it is not yet in the API. Could I maybe emulate it by replacing a component with itself using the place component command + emulating a mouseclick at the same origin as the original piece?
So a piece of code like:
1) get filelocation of selected part
2) get the origin point (x,y,z) of the part
3) get the translation between the origin of the assembly and the part
4) delete the selected part
5) place the part using the place component command (so the triad has been triggered)
6) fill in the filelocation, origin & translation
7) give control back to the user so he can move the part using the triad.
I need a way to run a rule which is saved in my top-level assembly using iLogic rule which is saved in a part file in the parent assembly.
I have even tried using an external rule in a txt file, but that gives the error "Component: This function can only be used in an assembly." - which makes no sense to me. I hope I am just missing something simple. I cant believe with all its other strengths, that iLogic would be so limited in that regard. Why is there not simply a snippet under the 'Run Other' that allows you to specify an assembly file and the rule name? (like there is for running a rule in a component from the assembly)
Can this be done? I want to go through the DrawingView Object to get at a subcomponent of an assembly and either set that component to have hidden lines (where needed) or no hidden lines.
I am trying to make port rims for pipes that can be swapped in and out of an assembly. However, the ports will all be different sizes and located differently so I need the cut to be part of the port rim component, but affect the entire assembly it is part of. I've been trying to get this to work for the better part of a day now,Here's a picture of what im talking about. I'm running Inventor 2008 by the way.
Is it possible to suppress an occurrence of a pattern in part environment using iLogic? I saw something for assembly environment, but I can't make it work for part. My iLogic knowledge is quite basic.
I have set iLogic to change a rectangular pattern to a certain amount of occurrences depending on which is selected , i.e. 117 cavities, 140 cavities and 96 cavities. Only one is active (or unsuppressed ) at a time.
What I need to do is suppress the 4 corners of each pattern, considering there's only one pattern and is dynamic.
I am trying to add instances of an ipart to an assembly automatically from an excel file and need to be able to specify the occurrence x, y, and z positions. Since the Inventor version is so old I have not been able to find the proper documentation.
If L(i) = 1 Then oOcc.RenderStyle = _invApp.ActiveDocument.RenderStyles.Item("Red") If L(i) = 2 Then oOcc.RenderStyle = _invApp.ActiveDocument.RenderStyles.Item("Yellow")
But I want to change like this and it not work:
Lcolor(1)="Red"Lcolor(2)="Yellow"L(2)=1L(1)=2for i=1 to 2oOcc.RenderStyle = _invApp.ActiveDocument.RenderStyles.Item(Lcolor(L(i)))next
I downloaded a model off a website, it is, (excuse my electrical background ignorance) a jumper for terminal blocks.Our electricians use these and cut them down to size as needed.
Is there a way to use iLogic and a form or message box, to prompt upon opening the part as to how many jumpers are needed for the current assembly> It comes stock with 10, but they sometimes only use 2, 3 4 etc. etc..
I didn't model the part, but I can if it will make the rule easier to write.My idea I suppose was to have the part modeled with 2 jumpers and then use ilogic to create more if necessary.
I have an assembly which contains a CComPtr<ComponentOccurrence> pThisCompOcc , and I'd like to do two things.
Get the name of the "base" object, not the display name of the occurence Change the model and user parameter values of the occurrence I suspect that I need to find the function or method which gives me a CComPtr<PartComponentDefinition> pPartCompDef which the occurrence points to for the Q1, but what about Q2?
Presumably the parameters are associated with the Component Occurrence and the "real" name is associated with the Part Component Definition?
I'm looking for the best way to create a separate assembly out of various component parts in an existing assembly so that the whole thing can be placed in an assembly as you would a part, I know it's possible to demote components within an assembly but are there any other methods similar / better ?
Basically I want to place parts and have them automatically connect to each other based on pre-existing UCSs on the assemblies. I have a 'ucs_in' and a 'ucs_out' on each assembly. I want the inserted component to perform a transformation to make the new occurrence's ucs_in to "mate" to the previous occurrences ucs_out. By mate I mean their center points are at the same location and all axes are pointing in the same direction. I have included screenshots to show what I'm working with and what I am trying to accomplish. I have also attached the project files.
Below is my attempt at the code to do this. My experience with transformations is limited so I may be way off from where I need to be.
Sub UcsMate() Dim doc As AssemblyDocument Set doc = ThisApplication.ActiveDocument 'assuming both occurrences are already in the assembly and both have 2 UCS, "ucs_in" and "ucs_out" Dim occ1 As ComponentOccurrence Dim
From a main assembly I am trying to change the visibility of occurence that are in a sub assembly. But everytime I change the visibility using the designviewrepresentation.setvisibilityofoccurrences(), that change the visibility of those occurrences in the other sub-assembly. Of course, if I do it thought the interface that works great. Anyone did something with changing visibility of sub component.
What I am trying to do is insert a part into an assembly file using iLogic. I basically want to mimic Inventor’s “Place” command using ilogic, maybe something like this:
We have an iLogic assembly with to parts in it. Maybe to cylindrical parts. The iLogic rules should do the following.
1. Start a Rule after open document.
2. This Rule starts a Rule in the first cylindrical component.
3. This Rule ask the user for a diameter.
4. The assembly gives this new parameter value to the second component
5. Then the assembly calls another rule in the second component to change it with the new parameter
Everything is working fine when the following combinations are taking place:
1. I open up the assembly out of vault or from a local drive or an accessible server drive
2. I insert the assembly as sub assembly in another assembly from a local drive or an accessible server drive
It don't work with the following situation:
- I insert the assembly as sub assembly in another assembly out of vault
Then the user becomes the dialog "Choose a diameter" twice.
I don't know why, but I have the idea it has something to do with the functionality of inventor to insert a component more than once. If you insert a component in an assembly Inventor gives you the opportunity to add more than one occurence after each other.
change that behaviour? Maybe a switch to change that inventor "add more than one occurence" behaviour.
I'm trying to play around with iLogic for creating dynamically dimensioned subassemblies. I've created my dimensioning rules that link to the parts I wish to change dimensions on.
And I've tested this in the SubAssembly I've created and all appears fine. However when I go to insert the sub assembly into the main assembly I get the following error:
Parameter: The component named "Bridge Spine:1" was not found.
I've noticed that the new sub assembly has created new parts with the extension -01 on the end of each part (As expected) It appears that this link is being lost in the rule for the new sub assembly. i.e the rule is looking for Bridge Spine:1 instead of Bridge Spine-01:1
I am trying to set the appearance of sub-components in an assembly using iLogic.
Dim oDoc As Inventor.AssemblyDocument = ThisApplication.ActiveDocument Dim oCompDef As Inventor.ComponentDefinition = oDoc.ComponentDefinitionDim oCompOcc As Inventor.ComponentOccurrence 'parts in the assemblyFor Each oCompOcc In oCompDef.OccurrencesoCompOcc.Definition.Document.ActiveRenderStyle = oCompOcc.Definition.Document.RenderStyles("HVGM")Next
I have a code which I want to rotate a part. I have a text parameter 6 and 7. If one of the values is active I want to give the component a certain rotation.
Under the 'Hoekkoppeling' parameter is the angle constraint.
Below the
If Parameter ("KlemHoekstuk-01: 1", "KoppelingType") = 7 Then Hoekkoppeling = 60 deg ElseIf Parameter ("KlemHoekstuk-01: 1", "KoppelingType") = 6 Then Angle = -60 deg End If
I now get always an error on the second and fourth line.
I feel that the specify for the value is incorrectly.