AutoCAD Inventor :: Assembly With ILogic Rules Running Slow?
Dec 5, 2012
I'm a contractor, I've created a really impressive form-driven assembly containing various iLogic rules. However, as i add more rules it is beginning to slow down (increase rule processing time). Should I suggest upgrading to 64-bit and increasing RAM?..could be costly with no increase in performance.
I am having a problem with Inventor 2013. Every time I run/edit then run an iLogic rule my Inventor crashes. I have sent the report in to autodesk, but I need a fix for now.
I have tried a soft reboot, hard reboot, only opening inventor while no other programs are running, disconnection from the internet, etc.
I am very new to this whole concept of having ilogic based rules to drive your part design. I have even gotten as far as creating a ipart and having ilogic rules be able to suppress, unsuppress, change values and dimensions using ilogic rules. I now want to be able to use ilogic rules to drive some of the various(yet similiar) assemblies that I create all the time.
For instance, If I have just a flat plate as the base component with a shaft welded to it that varies in length for my assemblies. Since the shaft varies in length, I went ahead and created iparts for all the lengths of the shafts. I can manually change which shaft I want represented in the assembly, but I would like to to know how do I get Ilogic to place the different shafts based on user parameters???
I've looked into component place iparts, but can't seem to get the code to work. The list of iparts tree within the model doesn't pop up in the model tab in the ilogic rule, only the base component.
I'm trying to write a script which would process all the ipt files within assembly and launch certain functions according to a ipt file type.
I've already made such script for dimensioning parts which work for standart parts but not for metal sheets.
Here it is:
Sub Main Dim oApp As Inventor.Application = ThisApplication Dim oAssy As Inventor.AssemblyDocument = oApp.ActiveDocument For Each oSubDoc as Inventor.Document In oAssy.AllReferencedDocuments If oSubDoc.DocumentType = kPartDocumentObject Then Dim oPartPropset As Inventor.PropertySet = oSubDoc.PropertySets("Design Tracking Properties") Dim oPartParam As Inventor.PropertySet = oSubDoc.PropertySets("Inventor User Defined Properties") Dim oParameter As Parameter For Each oParameter In oSubDoc.ComponentDefinition.Parameters oParameter.ExposedAsProperty = True Next oParameter If oSubDoc.SubType = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then Dim d1 = Round(SheetMetal.FlatExtentsLength, 1) Dim s1 = Round(SheetMetal.FlatExtentsWidth, 1) Dim g1 = Round(Parameter("Grubość"),1) FindOrCreateProperty("Długość [mm]", d1, oSubDoc, True) FindOrCreateProperty("Szerokość [mm]", s1, oSubDoc, True) FindOrCreateProperty("Grubość [mm]", g1, oSubDoc,
[code]....
this code distinguishes parts from sheet metal, and launches appropriate functions to get their dimmensions. It just doesnt work for metal sheets somehow. Seems like SheetMetal.FlatExtentsLength is performed from within the assembly, not part as it should be. I must have the addressing wrong. I've tried many things and different functions but nothing works for sheet metal parts.
This code might also be useful for different purposes. I'm also trying to lunch some external scripts for each part within an assembly, but there is no direct function for that (there is one only for internal scripts , based within the file).
I am currently using a vb.net application to control inventor using the API code.The API code is used to delete/suppress unwanted occurances from parts and sub-assemblies, depending on what is selected in the external application. It then puts all the parts and sub-assemblies together into a final assembly.
Most of the parts contain iLogic rules, to control dimensions, and these have been set to trigger when the part file is opened.I have noticed that in my final assemblies some of the parts don't appear as they should, however if i close the final assembly and open the individual part it appears to be correct. If i then open the final assembly it looks fine.
I think this might be due to the iLogic rule being triggered when the part is opened.Is there any way to trigger the rules using the API code while the final assembly is open, instead of closing it down and opening all the component parts and sub-assemblies?Or should we set the rules to trigger on a parameter change?
I'm trying to set a rule in which i have 2 i parts that i can change the length of . I want a rule where if i change one of them it changes the other to fit with it.
I made a simple rule that triggers before save to ask user to make a selection, which then updates an iProperty.I created A multi value fxParameter and used the InputListbox function.
Ultimately I want to know the best way ok making this rule available to all parts, old and new.I am thinking, it will be easy enough to update my templates and embed this code into the part, as well as content center files by updating each file / template .
But for existing parts, is there a way to add these rules without the user having to do much steps.because there is an fxParameter I am thinking the user will have to know how add this to their part.I can change it to just an input box where they can type in the correct value, if that would be easier.
I have been having trouble with parts that do not trigger iLogic rules. I've set the triggering events to After Open Document, but nothing triggers. I must manually open the parts and then click the iTrigger to get the rules to run. This is not all parts only a select few and seemingly random.
Is there something I can do to ensure the triggers fire and the rules to run?
Sidebar: If a part is set for trigger After Open Document should that part trigger the rules when the assembly that the part is in is opened?
Can I use an iLogic Rule at the top assembly level to "replace all" of a particular component is that component resides in more than one subassembly? I need a rule to run and globally replace the component in all subassemblies without opening up each subassembly manually. I can run a rule in the individual subassembly that looks like the following:
If GoExcel.CellValue("3rd Party:Embedding 1", "Sheet1", "A2")=800 Then Component.Replace("Part1:1", "OtherPartfilename.ipt", True) End If
Is there a way to run a "replace all" command from a top level assembly?
I am trying to build a set of scripts (aka iLogic rules) into templates. So far, quite a common task. One extra requirement is that the scripts need to be updatable after parts have been instanciated from the template. That is, we do not want to update all of the ipt each time a new material option is added to the script. That means that external rules are the only way to go, right? This is the road I tried and it seems to work on my machine.
One extra requirement is that the whole project must be shared between several workstations. We went the Subversion road for that (for all the Vault comments). The scripts are distributed properly and in the same absolute location on the two test machines, all good (I checked the md5 on both side and they all match). The application options on all the machines are all set the same way (export the xml file, check it in the source control, import on all the machines restart). The iLogic search path is also updated, but manually this time, since it is not included in the application options export. It should all work perfectly right? Well, sort of....
I did create a tiny assembly from the templates. On my source machine, all looks good. The ilogic rules are both listed in the ilogic browser and the triggers are set when I instanciate from the template. This is the intended behavior. Now, I close inventor, copy the whole directory to a new machine, open inventor there and open the project. The rules do not appear anymore in the browser, but they are still listed in the trigger list (wtf?). The best part is that if I do not touch anything, stuff still works! The scripts are found and run properly!! Now, if I have to change the triggers or even find the rule in the browser to run it manually, well, bad-stuff-happens (tm).
All the files in question are indentical on both machines, the ilogic files, the ipt files, the application options export, all with the same hash. The ilogic search path is also set the same as are the absolute paths. It should work the same (tm).
Me sending a copy of the files is not likely to work though. Since the problem happens when you copy. I could try to "pack and go", but that would break reason #1 for doing that, which is keeping only one version of the script and adding materials at only one place for all the projects.
2- WEIGHT - is to update weight of model in title block
3- PDF - is to create a pdf version of drawing in same location as idw
all are triggered by saving the drawing.
These work fine, but sometimes when I create specific types of drawings there is errors, which is no big deal, just a prompt appears and I press ok and everything is fine.
With very little to no iLogic programming knowledge, is there a way to edit to rules so that if there is an issue, the rule knows it is ok and saves without the little prompt appearing?
Example of when errors occur for:
SCALE - sometimes I create drawings on my template just using create sketch, I don't place a base view so therefore there is no model information. which makes it hard to produce a scale. (see image, error -1)
WEIGHT - occurs during the same instance as above, only a sketch is saved on the idw. (see image error -2)
but I also have an error occur when creating a drawing from a presentation file. I create a presentation file from a specific level of detail from an assembly. and I get an error when saving . (see image error-3)
I understand the first 2 errors because there is no physical data to get this information from, so I am hoping an edit to the rules can bypass this issue. But the 3rd error doesn't make sense. It is from an actual model, but I guess the physical properties get lost from an .iam to .ipn?? or is there a setting that can be toggled to carry over model properties?
Inventor Pro 2013
Rules are below:
'Scale Public Sub Main() On Error Resume Next 'Get the drawing document
Is it possible to create something like a password or other trick to protect ilogic rules from editing? Ilogic can enforce standards but if any engineer can delete rules or edit them then we have a problem.
I have a dedicated folder for external rules on a network. In the Advanced ilogic configuration interface on my machine I added the path to this folder in the External rule directories.That seemed to work fine. I opened the ilogic tree activated the external tab and the external rules were available for selection.
Today I tried to do the same process however no rules were visible under the external tab. I had to select "add external rule" and navigate to the folder.I do not want my users to have to manually navigate to the folder. Is there a step i have missed in this process? I am using Inventor/ilogic 2009.
I have an assembly with parameters named the same as LOD's.
The parameters are set to equal the mass of the corresponding LOD's using ilogic.
If the LOD does not exist, I want to set the mass of the corresponding parameter to a value of zero.
I don't know how to check for the existence of the LOD and I'm not sure I can have three commands in the ELSE section.
Below is an example of what I need using a Parameter and LOD called EXTERNALS as an example.
If EXTERNALS LOD does not exist THEN Parameter("EXTERNALS")=0 ELSE 'activate the EXTERNALS LOD ThisDoc.Document.ComponentDefinition.RepresentationsManager.LevelofDetailRepresentations("EXTERNALS").Activate
I have some assemblies that are made of iLogic parts. The code within the assemblies causes a common external rule to run in each of the parts to update the part's metadata (descriptions, part numbers ect.) to relect any changes to the part.
However, when a change is made to the assembly, not all the parts are effected and yet my code will still run the external rule within the uneffected parts. This slows things down some, but more problematic is the fact that the uneffected parts need to be checked out/revised, even though they themselves haven't changed.
Is there a way of reorganising my code so that external rules are only run in parts that are effected by the assembly change?
rule the runs from the assembly. My assembly file has 3 sheet metal parts and what I need is use ilogic rules to export them as .dxf files at the same time. It does work when I write the code for each single part, however, the rules not works when I assembly them together. I keep getting the error message
"Error in rule: Rule3, in document: access dr_same
Unable to cast COM object of type 'Inventor._DocumentClass' to interface type 'Inventor.PartDocument'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{29F0D463-C114-11D2-B77F-0060B0F159EF}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))."
Something to clear, Rule3 is the rule I wrote in ilogic to export .dxf FILE. everytime the parameter changes, the rule allows me to automatically save the surface as dxf file to a certain location. the rule works perfect in the ipt file.
however, when i assemble 3 sheet metal parts together in an assembly file, this rule not works anymore and give me the above error message.
I made an Part with iLogic rules, let's call it "iLogicPart". The rules inside could create lot of different part by my input.
I want save the different parts to different name as "Part 1", "Part 2", etc. I used SaveAs to get them.
My question is: I want to delete all rules and parameters in the saved parts as "Part 1", "Part 2". And I have lot of features (the name is hard to track) which are inactive, I want to delete them at same time too.
I could manually do so, but I want to use rule to do so automatically.
I am just starting to use ilogic for some design files. We have two design sites connected with Vault Collaboration 2012.
What is the best practice for sharing the ilogic rules between the sites?
I was planning on making an ilogic rules folder at the root of my workspace and having Vault manage the external rules. However, I don't see the rules listed when I check-in a file that uses them.
Do I have to add the rules to my template files? If so, how do I make changes to the rules without editing every file created with the templates?
We will be moving to Vault and IV 2014 after the first of the year, if that makes any difference.
I am tying to set my sheet metal rules for parts in my assembly that have differnt materials and I would like the control to be at the assembly level. Is this posssible? I am relatively new to iLogic aand have been trying to figure this out on my own for a couple of days now.
I have a wire trough that we typically use on all our units. Instead of modelling each trough as it's own separate part to length, I would like to add this part to frame generator for tracking there cut lengths etc...
A few items, there is two sizes that we use, but for now I will work with just one.
I have modeled the part and renamed the important parameters.
-WIDTH - stays the same
-HEIGHT - stays the same
-LENGTH - adjusted by frame generator
-RIBS - the part has 6 currently, but there is a rib added for every 1/2 inch. it is a rectangular pattern
-SLOTS - will be added to the trough every 2 inches of length, it is a rectangular pattern
-SLOT_DISTANCE - is 2 inches and never changes, if the trough is cut on a slot, which ever is easiest, to show half a slot or none, doesn't matter, this is just for a visual and BOM reference
I found a video that shows me how to publish parts to FG, but I am stuck for the iLogic part. Part attached.
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 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.
Im quite new to customizing inventor and have been playing around with I-logic. I can get I-logic to enter values into existing ipt paramaters when run from a rule within the idw. I can also get I-logic to create a custom Paramater within the ipt using some copied API code, however I dont know my way around API at all yet. So...
I was wondering if it was possible to create a custom part parameter from an ilogic rule run in an idw with that ipt featured?
I am running Autodesk Inventor Pro 2012 and am trying to start learning to use my dynamic simulation and FEA features. I recently just purchased the Up and Running series by Wasim Younis. I was working with his models on the multiple actuating jacks and noticed none of the features are constrained in the assembly. Now my question is, is this how these should always be setup? I am working on trying to set up a simulation of a frame I am rotating 90degrees with 2 hydraulic cylinders working together so as to use the strong side of each of the cylinderds when it goes each direction. The way I have it set up I have the whole thing constrained. The 2 cylinders are constrained so that they have their stroke 17.23" and the turntable frame is constrained to rotate 90degrees. So should I remove all constraints to run dynamic simulation? I attatched 2 photos to show the starting position (travel position) and ending position (working position).
how the internals of Inventor / iLogic are working.
We have multiple instances of Inventor running on a 12 core workstation so we can push configurations through concurrently - each Inventor instance is assigned its own processor affinity and each instance has its own project which points to seperate directories of Inventor models.
Everything seems to work OK when there are up to 5/6 working concurrently, but as soon as there are more than 6 the iLogic functions seem to grind to a halt - note that the rules are external rules.
For example, this function took 11 seconds to complete when there were 10 concurrent orders processing. :
Parameter("BLANK", "EDGE_FRT_ACTIVE") = "YES" Similarly these functions took 11 seconds in total to complete :
When I run these with less that 6 concurrent Inventor processes, they're are almost instant.
I just don't know where the bottleneck is. I've ruled out :
- Processor (each core never reaches above around 60%)
- RAM (we've got 48GB of RAM, with about 15GB free at worst)
- Disk (disk IO is busy, but it doesn't look like it's the bottleneck)
- Graphics (Inventor is in silent mode, with no UI, so graphics activity is minimal)
From the tests I've done it seems to be the iLogic functions that are the bottleneck. My next port of call is to change the iLogic functions to actual API calls, but I suspect I'll get the same results.
So, my questions :
Is Inventor queing these iLogic API calls somehow (note we're creating a unique instance of the Inventor.Application COM object for each processing thread) ?
Is there an issue with using external rules with nultiple instances?