Add a component to specific design representation using ilogic

Add a component to specific design representation using ilogic

patrick3HNXX
Enthusiast Enthusiast
779 Views
10 Replies
Message 1 of 11

Add a component to specific design representation using ilogic

patrick3HNXX
Enthusiast
Enthusiast

When I add a component using a ilogic rule, how do I make it so it doesn't show up in every design representation. I want to add the component and then assign it to a specific design representation.

0 Likes
Accepted solutions (2)
780 Views
10 Replies
Replies (10)
Message 2 of 11

J-Camper
Advisor
Advisor

If you can lock the views [removes associative links] then It will need to be manually added to the view rep by default.

 

If you can't lock it, I would probably cycle through each View Rep and turn the visibility off.  Then you can manually set it's visibility in the desired view Rep.

Dim asmDoc As AssemblyDocument = ThisApplication.ActiveDocument

Dim PickOc As ComponentOccurrence = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter, "Select Occurrence")
If IsNothing(PickOc) Then Exit Sub ' If nothing gets selected then we're done

Dim curRep As DesignViewRepresentation = asmDoc.ComponentDefinition.RepresentationsManager.ActiveDesignViewRepresentation

For Each vRep As DesignViewRepresentation In asmDoc.ComponentDefinition.RepresentationsManager.DesignViewRepresentations
	vRep.Activate
	PickOc.Visible = False
Next

curRep.Activate

 If you know which view rep to make it stay visible, you could code that in as well.

0 Likes
Message 3 of 11

patrick3HNXX
Enthusiast
Enthusiast

The views are locked. I just need to enable the visibility for the component in a specific design view.

0 Likes
Message 4 of 11

J-Camper
Advisor
Advisor

I still have the occurrence selection set to use user interaction, this can be changed if you have a loop for all occurrences to add to the view rep.  Then there is a list for the user to choose from, this can be changed if you have rigid view names that you always want to add occurrences to.

 

Let me know how this works for you:

Sub Main
	If ThisApplication.ActiveDocumentType <> kAssemblyDocumentObject Then MessageBox.Show("This rule is designed to only work in assembly documents.", "Wrong Document Type") : Exit Sub
	'Set Assembly
	Dim asmDoc As AssemblyDocument = ThisApplication.ActiveDocument
	'Set DesignViews Collection
	Dim vReps As DesignViewRepresentations = asmDoc.ComponentDefinition.RepresentationsManager.DesignViewRepresentations
	'Set Return View
	Dim curRep As DesignViewRepresentation = asmDoc.ComponentDefinition.RepresentationsManager.ActiveDesignViewRepresentation
	
	'Collect Views as Index'd list
	Dim vRepCol As NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap
	Dim i As Integer = 1
	For Each vRep As DesignViewRepresentation In vReps
		vRepCol.Add(i, vRep.Name)
		i += 1
	Next
	
	'Select Occurrence
	Dim PickOc As ComponentOccurrence = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter, "Select Occurrence")
	If IsNothing(PickOc) Then Exit Sub ' If nothing gets selected then we're done
	'Select View
	Dim selRepID As String = "" 
	selRepID = InputListBox("Select a view to add component", vRepCol, vRepCol.Value(vRepCol.Count), Title := "View Selection", ListName := "Current View Reps")
	If selRepID = "" Then Exit Sub ' If nothing gets selected then we're done
	
	'Set selected view
	Dim selRep As DesignViewRepresentation
	For j As Integer = 1 To vRepCol.Count
		If vRepCol.Value(j.ToString) = selRepID
			selRep = vReps.Item(j)
			Exit For
		End If
	Next
	If IsNothing(selRep) Then Exit Sub ' If nothing gets selected then we're done
		
	'Setting Occurrence to view then return to current
	Dim selRepBoolean As Boolean = selRep.Locked 'this way an unlocked view will not be accidently set to locked. remove is you want to force views locked
	selRep.Activate
	selRep.Locked = False
	PickOc.Visible = True
	selRep.Locked = selRepBoolean 'this way an unlocked view will not be accidently set to locked. remove is you want to force views locked
	curRep.Activate
	
End Sub

 

Let me know if you have any questions or if something is not working as intended.

0 Likes
Message 5 of 11

patrick3HNXX
Enthusiast
Enthusiast

This is great. Thank you very much. It works perfectly, I just need to do the same thing without all interface. I am only adding 4 components, one in a different design rep. each time.....so it would go like

 

1. add componet

2. switch to the design rep needed base on component name which i already have

3. set visibility to true

 

Sorry in advance, I am new to ilogic and a relatively novice coder.

 

Thanks

0 Likes
Message 6 of 11

J-Camper
Advisor
Advisor

@patrick3HNXX,

 

Please help me by answering these questions, before i change anything:

  1. How are you adding the components to the assembly? [Place Component, Drag & Drop from file browser, other]
  2. Can you still select each occurrence, or are there names to look for?
    • If there are standard component names, please list them:
  3. What are the View names? Please list them in order:
    • If you provided a list for component names, please indicate the relationship
0 Likes
Message 7 of 11

patrick3HNXX
Enthusiast
Enthusiast

I am using this code to add the components

 

'add extra left side panel crossmember
Dim componentC = Components.Add("ExtraLeftPanelCrossmember", "Side Panel Crossmember CIB NIWOSL - Fixed-02.ipt")

So I need to add this(above) to the "Left Panel" Design Representation

and then a "ExtraRightPanelCrossmember" to "Right Panel" Design Representation
and then a "ExtraBackPanelCrossmember" to "Back Panel" Design Representation
and then a "ExtraDoorPanelCrossmember" to "Door Panel" Design Representation

The same component is used in each case with different constraints, "Side Panel Crossmember CIB NIWOSL - Fixed-02.ipt"

 

Thanks again for your time

0 Likes
Message 8 of 11

J-Camper
Advisor
Advisor

@patrick3HNXX,

 

Do you have more of the code figured out?  If you do can you post what you have so I can add to it?

 

Otherwise, I will have time later this evening to get a rule working from what I posed before, bringing components in the way you are specifying and removing End User Input.

0 Likes
Message 9 of 11

patrick3HNXX
Enthusiast
Enthusiast

Here's my code. I know it's very basic; again not much of a coder. It works perfectly, adding a crossmember to each of the four panels one by one when the machine is over 139 inches.

If DischargeHeight >= 139 Then
	
'adjust spacing variable for new crossmember
	Dim adjustedspacing = ((SidePanelColumnLength - SidePanelFlangeCut) -(ControlPanelCrossmemberHeight)) / 3
	
' add and adjust new left side panel crossmember	
	Dim componentA = Components.Add("ExtraLeftSidePanelCrossmember", "Side Panel Crossmember CIB NIWOSL - Fixed-08.ipt")
	
    Constraints.AddMate("Mate:1000", "ExtraLeftSidePanelCrossmember",
                        "Work Plane2",
                        "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                        "Work Plane2",
						adjustedspacing)
    Constraints.AddMate("Mate:1001", "ExtraLeftSidePanelCrossmember",
                        "Face0",
                        "Left Panel C Column Front CIB NIWOSL-01:1",
                        "Face0")
    Constraints.AddMate("Mate:1002", "ExtraLeftSidePanelCrossmember",
                        "Edge0",
                        "Left Panel C Column Front CIB NIWOSL-01:1",
                        "Face1")
    	
'adjust existing left side panel crossmember
Constraints.AddMate("Mate:317",
                    "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                    "Face1",
                    "Left Panel C Column Back CIB NIWOSL-01:1",
                    "Face0")
Constraints.AddMate("Mate:318",
                    "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                    "Edge1",
                    "Left Panel C Column Back CIB NIWOSL-01:1",
                    "Face1")
Constraints.AddMate("Mate:319",
                    "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                    "Edge0",
                    "Left Panel C Column Front CIB NIWOSL-01:1",
                    "Face1")
Constraints.AddFlush("Flush:196",
                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:3",
                     "Work Plane2",
                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                     "Work Plane2")
Constraints.AddFlush("Flush:344",
                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                     "Work Plane2",
                     "Side Panel Crossmember CIB NIWOSL - Fixed-07:2",
                     "Work Plane3",
                     -adjustedspacing)
Constraints.AddFlush("Flush:408",
                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:8",
                     "Work Plane2",
                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                     "Work Plane2")
					 
'add and adjust extra door panel crossmember
Dim Door_Panel_Middle_Cr = Components.Add("ExtraDoorPanelCrossmember",
                                          "Door Panel Middle Crossmember CIB NIWSOL-02.ipt")

Constraints.AddMate("Mate:1003",
                    "ExtraDoorPanelCrossmember",
                    "Face0",
                    "Door Panel Z Channel Right CIB NIWSOL-01:1",
                    "Face0")
Constraints.AddFlush("Flush:1004",
                     "ExtraDoorPanelCrossmember",
                     "Work Plane1", "ExtraLeftSidePanelCrossmember",
                     "Work Plane2")
Constraints.AddMate("Mate:1005",
                    "ExtraDoorPanelCrossmember",
                    "Edge0",
                    "Door Panel Z Channel Left CIB NIWSOL-02:1",
                    "Face0")

'add and adjust extra right side panel crossmember

Dim Side_Panel_Crossmemb = Components.Add("ExtraRightSidePanelCrossmember",
                                          "Side Panel Crossmember CIB NIWOSL - Fixed-08.ipt")


Constraints.AddMate("Flush:1005",
                    "ExtraRightSidePanelCrossmember",
                    "Work Plane2", "ExtraLeftSidePanelCrossmember",
                    "Work Plane2")
Constraints.AddMate("Mate:1006",
                    "ExtraRightSidePanelCrossmember",
                    "Face1",
                    "Right Panel C Column Front CIB NIWOSL-01:1",
                    "Face0")
Constraints.AddMate("Mate:1007",
                    "ExtraRightSidePanelCrossmember",
                    "Edge1",
                    "Right Panel C Column Front CIB NIWOSL-01:1",
                    "Face1")


'add and adjust extra back panel crossmember

Dim Back_Panel_Crossmemb = Components.Add("ExtraBackPanelCrossmember",
                                          "Back Panel Crossmember CIB NIWSOL-05.ipt")

Constraints.AddMate("Mate:1008",
                    "ExtraBackPanelCrossmember",
                    "Work Plane1", "ExtraRightSidePanelCrossmember",
                    "Work Plane2")
Constraints.AddMate("Mate:1009",
                    "ExtraBackPanelCrossmember", "Face0",
                    "Back Panel Z Channel right left CIB NIWSOL-02:2",
                    "Face0")
Constraints.AddMate("Mate:1010",
                    "ExtraBackPanelCrossmember", "Edge1",
                    "Back Panel Z Channel right left CIB NIWSOL-02:2",
                    "Face1")






End If
			
			
			
If DischargeHeight < 139 Then

'remove added crossmembers
	Components.Delete("ExtraLeftSidePanelCrossmember")
	Components.Delete("ExtraDoorPanelCrossmember")
	Components.Delete("ExtraRightSidePanelCrossmember")
	Components.Delete("ExtraBackPanelCrossmember")
	
'restore existing right side panel crossmember(datum) position    

 
 Constraints.AddMate("Mate:317",
                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                     "Face1",
                     "Left Panel C Column Back CIB NIWOSL-01:1",
                     "Face0")
 Constraints.AddMate("Mate:318",
                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                     "Edge1",
                     "Left Panel C Column Back CIB NIWOSL-01:1",
                     "Face1")
 Constraints.AddMate("Mate:319",
                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                     "Edge0",
                     "Left Panel C Column Front CIB NIWOSL-01:1",
                     "Face1")
 Constraints.AddFlush("Flush:196",
                      "Side Panel Crossmember CIB NIWOSL - Fixed-08:3",
                      "Work Plane2",
                      "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                      "Work Plane2")
 Constraints.AddFlush("Flush:344",
                      "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                      "Work Plane2",
                      "Side Panel Crossmember CIB NIWOSL - Fixed-07:2",
                      "Work Plane3",
                      -SidePanelUpperRotatedCrossmemberSpacing)
 Constraints.AddFlush("Flush:408",
                      "Side Panel Crossmember CIB NIWOSL - Fixed-08:8",
                      "Work Plane2",
                      "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                      "Work Plane2")
 
    


End If

 

0 Likes
Message 10 of 11

J-Camper
Advisor
Advisor
Accepted solution

@patrick3HNXX,

 

There is a lot of Hard-coding you have here.  I did not spend the time to try and recreate all your parameters/constraints/components in order to do proper testing.

 

With that being said, I believe this should still work as before, so give it a try:

'[
'Release Notes:
	'03/15/21:
		'Blended code between original and first helping code
'] Release Notes

'[
'Prep code:

'Set Assembly
Dim asmDoc As AssemblyDocument = ThisApplication.ActiveDocument
'Set DesignViews Collection
Dim vReps As DesignViewRepresentations = asmDoc.ComponentDefinition.RepresentationsManager.DesignViewRepresentations
'Set Return View
Dim curRep As DesignViewRepresentation = asmDoc.ComponentDefinition.RepresentationsManager.ActiveDesignViewRepresentation
'Designate Object to act as activated View Rep
Dim actRep As DesignViewRepresentation
'Create Boolean to track view locked status
Dim vStatus As Boolean

'Hard-code Views as named List
Dim vRepNames As NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap
vRepNames.Add("Left Panel", "ExtraLeftSidePanelCrossmember")
vRepNames.Add("Right Panel", "ExtraRightSidePanelCrossmember")
vRepNames.Add("Back Panel", "ExtraBackSidePanelCrossmember")
vRepNames.Add("Door Panel", "ExtraDoorSidePanelCrossmember")

For i As Integer = 1 To vRepNames.Count
	For Each vRep As DesignViewRepresentation In vReps
		If vRep.Name = vRepNames.Name(i)
			vRepNames.Value(vRepNames.Name(i)) = vRep
			GoTo Found
		End If
	Next
	'If we are missing a view Rep we display here
	Logger.Debug("Can't continue, expected view rep:  " & vRepNames.Name(i) & "  doesn't exist.")
	Exit Sub 'Can't continue, expected view reps don't exist
	'Once match is found, we continue to next check
Found:
Next
'] Prep code

'[
'Original code [modified]

If DischargeHeight >= 139 Then
	
	'adjust spacing variable for new crossmember
	Dim adjustedspacing = ((SidePanelColumnLength - SidePanelFlangeCut) -(ControlPanelCrossmemberHeight)) / 3
	
	' add and adjust new left side panel crossmember	
	Dim componentA As ManagedComponentOccurrence = Components.Add("ExtraLeftSidePanelCrossmember", 
																"Side Panel Crossmember CIB NIWOSL - Fixed-08.ipt")
	
	'Add to designated view:
	actRep = vRepNames.Value(vRepNames.Name(1))'Left Panel
	vStatus = actRep.Locked
	actRep.Activate
	actRep.Locked = False
	componentA.Occurrence.Visible = True
	actRep.Locked = vStatus
	curRep.Activate
	
    Constraints.AddMate("Mate:1000", "ExtraLeftSidePanelCrossmember",
                        "Work Plane2",
                        "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
                        "Work Plane2",
						adjustedspacing)
    Constraints.AddMate("Mate:1001", "ExtraLeftSidePanelCrossmember",
                        "Face0",
                        "Left Panel C Column Front CIB NIWOSL-01:1",
                        "Face0")
    Constraints.AddMate("Mate:1002", "ExtraLeftSidePanelCrossmember",
                        "Edge0",
                        "Left Panel C Column Front CIB NIWOSL-01:1",
                        "Face1")
    	
	'adjust existing left side panel crossmember
	Constraints.AddMate("Mate:317",
	                    "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                    "Face1",
	                    "Left Panel C Column Back CIB NIWOSL-01:1",
	                    "Face0")
	Constraints.AddMate("Mate:318",
	                    "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                    "Edge1",
	                    "Left Panel C Column Back CIB NIWOSL-01:1",
	                    "Face1")
	Constraints.AddMate("Mate:319",
	                    "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                    "Edge0",
	                    "Left Panel C Column Front CIB NIWOSL-01:1",
	                    "Face1")
	Constraints.AddFlush("Flush:196",
	                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:3",
	                     "Work Plane2",
	                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                     "Work Plane2")
	Constraints.AddFlush("Flush:344",
	                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                     "Work Plane2",
	                     "Side Panel Crossmember CIB NIWOSL - Fixed-07:2",
	                     "Work Plane3",
	                     -adjustedspacing)
	Constraints.AddFlush("Flush:408",
	                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:8",
	                     "Work Plane2",
	                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                     "Work Plane2")
					 
	'add and adjust extra door panel crossmember
	Dim Door_Panel_Middle_Cr As ManagedComponentOccurrence = Components.Add("ExtraDoorPanelCrossmember",
	                                         				    			"Door Panel Middle Crossmember CIB NIWSOL-02.ipt")
	
	'Add to designated view:
	actRep = vRepNames.Value(vRepNames.Name(4))'Door Panel
	vStatus = actRep.Locked
	actRep.Activate
	actRep.Locked = False
	Door_Panel_Middle_Cr.Occurrence.Visible = True
	actRep.Locked = vStatus
	curRep.Activate
	
	Constraints.AddMate("Mate:1003",
	                    "ExtraDoorPanelCrossmember",
	                    "Face0",
	                    "Door Panel Z Channel Right CIB NIWSOL-01:1",
	                    "Face0")
	Constraints.AddFlush("Flush:1004",
	                     "ExtraDoorPanelCrossmember",
	                     "Work Plane1", "ExtraLeftSidePanelCrossmember",
	                     "Work Plane2")
	Constraints.AddMate("Mate:1005",
	                    "ExtraDoorPanelCrossmember",
	                    "Edge0",
	                    "Door Panel Z Channel Left CIB NIWSOL-02:1",
	                    "Face0")

	'add and adjust extra right side panel crossmember

	Dim Side_Panel_Crossmemb As ManagedComponentOccurrence = Components.Add("ExtraRightSidePanelCrossmember",
	                                      								    "Side Panel Crossmember CIB NIWOSL - Fixed-08.ipt")
	
	'Add to designated view:
	actRep = vRepNames.Value(vRepNames.Name(2))'Right Panel
	vStatus = actRep.Locked
	actRep.Activate
	actRep.Locked = False
	Side_Panel_Crossmemb.Occurrence.Visible = True
	actRep.Locked = vStatus
	curRep.Activate
	
	Constraints.AddMate("Flush:1005",
	                    "ExtraRightSidePanelCrossmember",
	                    "Work Plane2", "ExtraLeftSidePanelCrossmember",
	                    "Work Plane2")
	Constraints.AddMate("Mate:1006",
	                    "ExtraRightSidePanelCrossmember",
	                    "Face1",
	                    "Right Panel C Column Front CIB NIWOSL-01:1",
	                    "Face0")
	Constraints.AddMate("Mate:1007",
	                    "ExtraRightSidePanelCrossmember",
	                    "Edge1",
	                    "Right Panel C Column Front CIB NIWOSL-01:1",
	                    "Face1")


	'add and adjust extra back panel crossmember

	Dim Back_Panel_Crossmemb  As ManagedComponentOccurrence = Components.Add("ExtraBackPanelCrossmember",
	                                         								 "Back Panel Crossmember CIB NIWSOL-05.ipt")
	
	'Add to designated view:
	actRep = vRepNames.Value(vRepNames.Name(3))'Back Panel
	vStatus = actRep.Locked
	actRep.Activate
	actRep.Locked = False
	Back_Panel_Crossmemb.Occurrence.Visible = True
	actRep.Locked = vStatus
	curRep.Activate

	Constraints.AddMate("Mate:1008",
	                    "ExtraBackPanelCrossmember",
	                    "Work Plane1", "ExtraRightSidePanelCrossmember",
	                    "Work Plane2")
	Constraints.AddMate("Mate:1009",
	                    "ExtraBackPanelCrossmember", "Face0",
	                    "Back Panel Z Channel right left CIB NIWSOL-02:2",
	                    "Face0")
	Constraints.AddMate("Mate:1010",
	                    "ExtraBackPanelCrossmember", "Edge1",
	                    "Back Panel Z Channel right left CIB NIWSOL-02:2",
	                    "Face1")

Else If DischargeHeight < 139 Then

	'remove added crossmembers
	Components.Delete("ExtraLeftSidePanelCrossmember")
	Components.Delete("ExtraDoorPanelCrossmember")
	Components.Delete("ExtraRightSidePanelCrossmember")
	Components.Delete("ExtraBackPanelCrossmember")
	
	'restore existing right side panel crossmember(datum) position    
	 
	 Constraints.AddMate("Mate:317",
	                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                     "Face1",
	                     "Left Panel C Column Back CIB NIWOSL-01:1",
	                     "Face0")
	 Constraints.AddMate("Mate:318",
	                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                     "Edge1",
	                     "Left Panel C Column Back CIB NIWOSL-01:1",
	                     "Face1")
	 Constraints.AddMate("Mate:319",
	                     "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                     "Edge0",
	                     "Left Panel C Column Front CIB NIWOSL-01:1",
	                     "Face1")
	 Constraints.AddFlush("Flush:196",
	                      "Side Panel Crossmember CIB NIWOSL - Fixed-08:3",
	                      "Work Plane2",
	                      "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                      "Work Plane2")
	 Constraints.AddFlush("Flush:344",
	                      "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                      "Work Plane2",
	                      "Side Panel Crossmember CIB NIWOSL - Fixed-07:2",
	                      "Work Plane3",
	                      -SidePanelUpperRotatedCrossmemberSpacing)
	 Constraints.AddFlush("Flush:408",
	                      "Side Panel Crossmember CIB NIWOSL - Fixed-08:8",
	                      "Work Plane2",
	                      "Side Panel Crossmember CIB NIWOSL - Fixed-08:2",
	                      "Work Plane2")

End If

'] Original code [modified]

 

Let me know if you have any questions, or if this is not working as intended.

Message 11 of 11

patrick3HNXX
Enthusiast
Enthusiast
Accepted solution

Works perfectly.

 

You are a master of your craft sir!

 

Thank you very much for your time.

 

Patrick

0 Likes