AutoCAD Inventor :: Define Filename On Subpart With Rule
Feb 6, 2013
I have an assembly which serves as a configurator. This Assy, needs to be copied many times. The assy contains 2 parts, which also must be copied. but when copied, the parts must have a new filename, and then the Rule cannot find them anymore. Therefore my plan is to define the filename with the configurator rule..
Example.:
Assy = Module.iam
Part1 = Module-1.ipt
Part2 = Module-2.ipt
I have this so far, but is doesn't work.. what do i put before the .ipt??
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)
I want to simply set a custom iproperty as the Description in each part file within my assembly. I can do this easily at part level with ilogic but I want to be able to run the rule from the assembly level and all the parts run the rule. I am struggling to find a way to do this.
I think this may be the best method I have found but I think it must be far easier?
I am working for customer with a simple item with his iLogic design. He has created a simple form to modify his iProperties. To modify the current material, a multi-value parameter was created and the following rule as a local rule;
He is now trying to make this an external rule but gets the following error
Error in rule: Mat2, in document: Mat2.iLogicVb iProperties.Material: is probably a bad material name.
The more info tab says:
System.ArgumentException: iProperties.Material: is probably a bad material name. at iLogic.CadPropertiesInRule.SetDocMaterial(Document doc, String matName) at LmiRuleScript.Main() at Autodesk.iLogic.Exec.AppDomExec.ExecRuleInAssembly(Assembly assem) at iLogic.RuleEvalContainer.ExecRuleEval(String execRule)
I am trying to use iLogic to create the file types I need to give to my vendors once I have created a drawing.In the .idw file I have a rule that creates a .pdf file and .dwg file. I also want it to activate a rule I have in the .ipt file that creates a .dxf file.
trigger = iTrigger0oType=Left(ThisDoc.FileName(False),3)GoExcel.Open("S:DRAWINGSFolder Types.xlsx", "Sheet1")For rowPN = 1 To 200 If (GoExcel .CellValue("A" & rowPN) = oType) Then oFile = GoExcel.CellValue("C" & rowPN) Exit For End IfNextoFolder = "S:DRAWINGSNOT RELEASED" & oFileIf Not System.IO.Directory.Exists(oFolder) ThenSystem.IO.Directory.CreateDirectory(oFolder)End IfThisDoc.Document.SaveAs(oFolder & "" & [code].....
Private WithEvents m_text As MiniToolbarTextEditor
but later, when you create the MiniToolBar, on the controls there is no AddTextEditor...????
Dim miniControls As MiniToolbarControls = m_MiniToolbar.Controls m_text = minicontrol.add HERE SHOULD BE THE TEXT EDITOR... I can add anything else! where is the text editor.
I tried the value editor, but it cannot take text!
I want to use a parameter in my assembly as the name of a part i'm referring to in a rule but so far I have had no luck making it work. My knowledge of iLogic is pretty limited.
I am making a configurator for a staircase and I am working on the stringers now. There will be 3 or 4 different stringers (each one is a separate part) and the configurator lets you choose things like the angle, length and height of the staircase by entering values for those in a form in the assembly. Once you are done entering the values, there will be an update button that will send all the parameters to the different parts that are in the assembly and have them change accordingly. Now, say I want the length to change. I enter a length and press update and here's my problem. To which stringer-part is it going to send the length to? I can make it send to all parts but that means that I have to write one line of code for each part and if I ever add a new kind of stringer, I need to check all the rules and new lines where needed. I would like to make this dynamic by having only one line in which the part name is the same as a parameter I have in my assembly
I can either write it like this: Parameter("Stringer1:1", "Length") = LengthParameter("Stringer2:1", "Length") = LengthParameter("Stringer3:1", "Length") = LengthParameter("Stringer4:1", "Length") = Length
But I would like to write it like: Parameter(""Assemblyparameter":1", "Length") = Length Where Assemblyparameter is a text parameter and simply the name of the part that is inserted.
When I choose, for example, stringer 3 in my form, Assemblyparameter will be Stringer3. This would save lots of time in the future whenever new parts are added.
I am trying to write code to collect standard info from a csv file to be added to iProperties.
Following is the code I have so far.
Dim Separators() As Char = {""c} Words = ThisDoc.Path.Split(Separators) FilName = "C:VaultDesigns" & Words(3) & "Spec_Sheet.csv"
Dim ReadCSV As New System.IO.StreamReader(FilName) Dim WordSets As New ArrayList()
Do While ReadCSV.Peek <> -1 WordSets.Add(ReadCSV.ReadLine.Split(",")) Loop
i = 0 SName = iProperties.Value("Project", "Stock Number")
For Each wrd In WordSets If WordSets.item(i)(0) = SName Then iProperties.Value("Project", "Description") = WordSets.item(i)(1) iProperties.Value("Custom", "Finish") = WordSets.item(i)(2) End If i += 1 Next
The only problem I have is that this line crashes. I am not competent enough to understand why.
Dim ReadCSV As New System.IO.StreamReader(FilName)
Is there a way to use the filename to drive the parameters of the file?
Example: I have a cube that is called 4x4x4.ipt its dimensions d0,d1,d2 are 4,4,4 respectively. I want to rename it to 4x4x6.ipt and have the dimensions d0,d1,d2 resize to 4,4,6.
I'd like to change the filename of a part before it's first save.The code would look somewhat like below.
Private Sub m_appEvents_OnNewDocument( _ByVal DocumentObject As Inventor._Document, _ByVal BeforeOrAfter As Inventor.EventTimingEnum, _ByVal Context As Inventor.NameValueMap, _ByRef HandlingCode As Inventor.HandlingCodeEnum) _Handles m_appEvents.OnNewDocumentDim oDoc As Inventor.DocumentDim Name1 As String = "New Filename...."oDoc = DocumentObjectoDoc = oDocoDoc.PropertySets("Design Tracking Properties").Item("Part Number").Value = Name1oDoc.DisplayName = Name1oDoc.FullFileName = Name1.
The code partly works when opening a template but doesn;t work when create a an in place component or frame generated part? What do I need to modify to catch and change the filename before it's saved?
I am using this code snippet to open an idw. With this code, the idw has to reside at the same file path as the current document.
>>>>>>>>>>>>>>>>
Sub OpenIDW() On Error GoTo Oops Dim oDoc As Document Set oDoc = ThisApplication.ActiveDocument Dim sFullFileName As String sFullFileName = oDoc.FullFileName Dim sDrawingName As String sDrawingName = Left(sFullFileName, Len(sFullFileName) - 4) & ".idw" Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.Documents.Open(sDrawingName) Exit Sub Oops: MsgBox "IDW File could not be found. FileName of IDW must be the same as this file.", vbInformation End Sub >>>>>>>>>>>>>>>>>
"What if"... my idw is not at the same location, but under a subfolder instead..... like this
Part file c:designsDrawingsJobxxx
Idw file c:designsDrawingsJobxxxIDW
I am sure that this can be done by editing the line "sDrawingName = Left(sFullFileName, Len(sFullFileName) - 4) & ".idw" " . Everything I have tried did not work.
I'm attempting to create a rule using iLogic, which reads the first two letters of either the File Name or Part number (Which ever is easier)i.e. if a part number was AB12345, I would want the code to recognize the "AB"...At which point I'm trying to use an If-Then-Else statement to modifiy the material of the part, dependent on the first two characters of the File name.
As an example, where the underlined portion is what i don't know how to If iProperties.Value("Project", "Part Number") Begins with "AB" Then iProperties.Material = "Steel" Else If iProperties.Value("Project", "Part Number") Begins with "AC" Then iProperties.Material = "Aluminum" End If
I am trying to use the iProperties.Value("part1", "Summary", "iProperty") function to get the filename or complete filepath of a component within a subassembly. I know that these iProperties exist because I can insert them onto a drawing, and I see them in the general tab of the iProperty window.
I get an error message indicating that the General tab can't be found. How might I go about getting this filename iProperty, or is there an easier way?
I have VB code that loops through and utilizes Excel data to pick which file(s) to open, update, and close. Then it opens the appropriate .idw file, updates it and saves it as a .pdf.
and that writes the file to my desktop as a .pdf.
However, as the loop runs over and over, it will find another data set that is the same A60 type, so it will want to save OVER that .pdf it's already created.
How do I go about having a variable filename? Something where it would add a _01 _02 _03 (or similar) to the end of the filename (i.e. A60_01.pdf, A60_02.pdf).
I need some VBA code that will allow me to get the Filename from the border of a drawing. I've got code to get to the text of the filename, but I need to get the filename itself. Hope that males sense. Here's the
Public Sub GetModelFilename() Dim oDoc As DrawingDocument Set oDoc = ThisApplication.ActiveDocument
[Code]...
What the code returns is the text <FILENAME>. What I need is the filename itself.
I am using projected and sketched geometry (2D sketches) in assembly space to create lines/ points that I intend to use to define planes and axes. The problem I have is that nearly all the geometry I create (lines and points in 2D sketches) is not "selectable" when I try to create planes or axes. I cannot even put a work points "on top of" my sketch points. Why are my sketches not usable in the assembly space? Since the components in my model are just two extruded rings I don't have any linear edges I can select to make this work/ define planes.
the only property I can actually define for each individual sheet (for use in iLogic, text fields, etc.) is the sheet name. This is extremely limiting. Each sheet in my drawings has several properties of its own--sheet number (most importantly), what part is ON the sheet, the designer, the revision, etc. I would love to be able to use each of these in labels on the sheet, for example, a text box with "<Sheet #> - <Part> (<Designer>)". The only possible way I could do something like this is to use the sheet number as the Sheet Name, and then use that value in the sheet's text labels, headings, and title block. However, I want to be able to use descriptive names for the Sheet Name, plus that's just one property.
Is there any way I can create and define multiple custom properties for individual sheets? I was exploring the idea of using iLogic, using the ActiveSheet command, possibly, and "tricking" inventor into creating properties for a given sheet.
Create a Content Center Part that prompts for a file name and sets the Part Number to whatever I save the part as? It would also be nice to... Have the browser Display name the same as the saved filename.
If I have a standard part with a blank filename, inventor will make the part number equal the filename at the first save. It is this functionality that I require when using Custom Content parts.
E.G. If I have a length of 'RHS 200x100x6.3 - 2000mm' selected from content centre and I want the filename to be saved as 'Part-001', then I would like the Part Number to be set as 'Part-001'.
If I then place the same member in another project/assembly I may want to call it 'ProjectPart-100', where the part number would then be 'ProjectPart-100' and so on.
This method ignores the filename entry in the Ipart table.
"The filename, directory name or volume label syntax is incorrect. The database in K;lah/blahlah.widget.ipt* could not be saved".It's nothing to do with an improper name; even saving as the default 'Part 3' doesn't work.
At the moment I'm limping by using Save Copy As. Neither Save not Save As work at all.
An application that will let me choose a group of Drawing files (.idw) and perform "Save Copy As" to a PDF format on them. The Filename of each Drawing should be extracted from a custom Parameter I embeded in the IDW file.
I know I can use the Task Manager with a virtual PDF Printer to create these files, but then the PDF Filename will equal the IDW Filename, and I want it to be derived from the custom parameter I prepared inside the drawings.
When using save copy as to make an identical part with a different number, the file name in the top and the browser doesn't update to the new filenumber. only in the bottom file tabs is the name correct. if I go to file> save as I can also see the new filename. This is a hassle when doing this to multiple files in an assembly, as it makes it hard to keep track of which parts have been given a new name. It seems the filename input in the browser is only written once, and that is when the first file was saved for the first time.
When I publish from Inventor to DWF (including sheets in the idw and an view of the iam assembly file) numerous part properties are included in the dwf that I would like to strip out so we don't share too much info with.
For example, filenames are included, stock numbers the complete bom from the model (as opposed to the parts lists that are shown in the idw's... This info shows in the structured bill, and if you click on a part in the iam.
How do I filter all this out so I only show part numbers and descriptions in iproperties?
here's a macro I wrote to copy the filename to the Part Number iProperty for all parts and sub-assemblies contained in a top-level assembly. I wrote this after using a bunch of custom iParts and all the Part Numbers were the same for each part! (my fault of course, but a pain to fix one at a time).
Public Sub SetAllComponentPartNumbersToFileName() Dim oAsmDoc As AssemblyDocument Set oAsmDoc = GetActiveAssembly If oAsmDoc Is Nothing Then Exit Sub SetAssemblyComponentPartNumbersToFileName oAsmDoc End Sub
When you do a Save As or Save Copy As in Inventor the part number in the iProperties is automatically updated to match the new filename. I would expect the Document.SaveAs method in the API to act in a similar way. However I found out that this is not the case.
SaveAs: Document.SaveAs(filename, False) does not update the part number. The new part will still have the same part number as the original part. This can give problems since in the BOM parts with the same part number are interpreted as the same physical part.
SaveCopyAs: Document.SaveAs(filename, True) does work as expected and the part number will update correctly.
Is this a bug in the API? or is there a reasonable explanation for this?
I want to create a rule that will warn the user when the plate thickness they are using is not standard. I have already created a multivalue parameter for plate thickness, which lists all standard steel plate thickness's and also allows for custom values.
I was hoping I could create a rule that would prompt a dialogue box warning when the user creates a custom value for plate thickness.
I know this can be done, but like I said, Im bloody useless with iLogic and find it hard to come across relevent examples and/or tutorials online.
I have an ilogic external rule which contains functions that I use from rules in my local assembly document. I'm trying to access the value of a parameter in the document from the external rule's function. Attached is a simple version of what I'm trying to do. If I manually run the external rule, it seems to work just fine, but when I call on the function from a seperate rule, its unable to get the parameter value. I get an error stating, "'Parameter' is not declared. It may be inaccessible due to its protection level."
'this is the external rule. if I run this manually, it works
Public Class test_functionsSub Mainmyresult = ""thisisatest(myresult)MsgBox(myresult)End SubFunction thisisatest(ByRef resultcreated As String)resultcreated = "it worked - " & Parameter("ParameterInDocument")End FunctionEnd Class
'this is my rule in the assembly document trying to use the external rule's function
AddVbFile "z_testrule.iLogicVb"Dim external_rule As New test_functionsmyresult = ""external_rule.thisisatest(myresult)MsgBox(myresult)
i have an iLogic rule in serveral files. Now this rule has to be deleted. This should be done with VBA. I can not find any function to delete a rule using VBA.
I found a function iLogicAuto.RunRuleDirect(rule), but not iLogicAuto.DeleteRule(rule) ...