Communauté
Inventor - Français
Bienvenue sur les forums Inventor d’Autodesk. Partagez vos connaissances, posez des questions, collaborez sur des idées, et explorez les sujets Inventor populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

Incertion composant I-logic avec regle i-Logic et nom du fichier personalisé

14 RÉPONSES 14
RÉSOLU
Répondre
Message 1 sur 15
denis.semeniuc
494 Visites, 14 Réponses

Incertion composant I-logic avec regle i-Logic et nom du fichier personalisé

Bonjour,


Je besoin automatiser insertion des « Valve Tag » dans assemblage.
Mon Composant « Valve Tag » contient règle i-Logic. Pour l'insérer il faut utiliser la fonction « Placer composant i-logic ». Le processus est trop long, car il y a plusieurs composant, plus que 50. Un autre problème c'est le nom, car i-logic incrément les composantes.
Est-ce que c’est possible de faire une règle Externe quel va incérer les composant i-logic « Valve Tag » avec préfix dans le nom du fichier et nombre de fois combien je besoin. Tous doivent être les composantes indépendantes. (Voir l'image de formulaire)
 

denissemeniuc_0-1675886463531.png

Je aucune idée de ou je peux commencer, et si c'est possible avec i-logic incérer composant i-logic.

 

Merci.

 

 

14 RÉPONSES 14
Message 2 sur 15
vpeuvion
en réponse à: denis.semeniuc

Message 3 sur 15
vpeuvion
en réponse à: vpeuvion

Vous pouvez tester ce code :

Sub Main()
Dim Prefixe As String = "Prefix"
Prefixe = InputBox("Préfixe", "Entrer le préfixe", "Prefix") ' Demande du préfixe
Dim Number As Integer = 1
Number = InputBox("Quantité", "Qte", 1) ' Demande de la quantité.
Dim iLogicComponentName As String = "Valve Tag.ipt" ' Le nom du composant ilogic source.
For i As Integer = 1 To Number 
Dim ComponentName As String = Prefixe & "_" & i & "_" & iLogicComponentName ' Le nom du composant qui sera créé.
Dim componentA = Components.Add(ComponentName, iLogicComponentName, position := Nothing, grounded := False, visible := True, appearance := Nothing) ' Création du composant.
Next ' Répétition de la boucle autant de fois qu'il est demandé.
End sub

Il suffit de changer "Valve Tag.ipt" par le nom de votre composant iLogic.

Ce code vous demandera le préfixe et la quantité et insérera cette quantité de composants.

Vincent.

 

Message 4 sur 15
denis.semeniuc
en réponse à: vpeuvion

Merci pour le code,

 

il marche sauf il incert comme la piece ordinaire. je besoin comme la piece i-logic, quele fait la copie dans dossier surce de cette assamblage. Et c'est juste le nom dans assmblage quele change, pas le nim du fichier.

je besion que chaque piece reste idepandante du fichier source.

Si cette function d'existe pas dans i-logic possible d'ajouter function enregistrer et remplacer et faire remplacement de fichiers incerer avec nom du fichier = nom afiché.

Desoler d'ortograf.

 

Merci.

Message 5 sur 15
vpeuvion
en réponse à: denis.semeniuc

Bonjour,

Excusez moi, j'ai peur de ne pas comprendre exactement ce que vous souhaitez faire.

Est-ce que vous savez le faire manuellement?

Est-ce que vous pourriez transmettre une vidéo de la façon de faire manuelle ou des captures d'écran pour que ce soit plus clair pour moi et peut-être pour d'autres?

Merci.

Vincent.

Message 6 sur 15
denis.semeniuc
en réponse à: vpeuvion

Bonjour,

Desoler pour le message ne pas claire.

j'ai une compossant avec code i-logic, quelle se nome Valve_Tag. Lui a l'incertion affiche une formulaire pour enscrire tag quelle provien d'une P&ID. apres cette composante est atache a la bonne equipement, voir les capture...

denissemeniuc_0-1676038202057.png

 

A l'incertion i-logic fait une copie locale, la ou l'assamblage est enregistré, avec nom du fichier = au nom du composant d'origin + numero secantiel.

c'est que vous voyez sur photo c'est les fichier quels sont renomé pour avoir le nom unique quelle apartien a ce assmblage. Parce que dans la meme projets je plusieurs assamblage quelles contiens les tags.

32 tags c'est l'assamblage la plus petite. 

je veut creer une regle externe quelle va incerer la "n" copies individueles dans assamblage avec Prefixe= au 10 premiers chifres du assamblage dans la quelle est inceré dans le nom du fichier . Est enregistré si possible dans adresse du assamblage et sous docier "Valve Tag".

 

je espere que c'eté clare ce fois. 

 

Le code faite par vous il marche bien sauf il incere la piece origine sans faire des copie.

A cause que  composante se truve dans la bibliotheque, il est ne pas modifiable. Est aussi le texte est individuel pour chaque tag. A cause de ca je besoin autant des copie.

 

Merci infinement de votre aide.

Message 7 sur 15
vpeuvion
en réponse à: denis.semeniuc

D'accord, je pense avoir compris.

Quand vous parliez de composant iLogic vous vouliez dire une pièce avec une règle iLogic à l'intérieur.

Essayez de tester ce code en mettant le chemin complet de votre fichier Valve_tag.ipt à la ligne 2:

Dim FichierSource As String = "C:\...\...\...\Valve_Tag.ipt"

Si j'ai bien compris, c'est ce que vous voulez:

Sub main()
	Dim FichierSource As String = "C:\...\...\...\Valve_Tag.ipt" ' Fichier source qui va etre inséré
	Dim Nombre As Integer = InputBox("Prompt", "Nombre de fichiers", 0) 'Demande du nombre de fichiers voulu
	Dim oAsmDoc As AssemblyDocument = ThisApplication.ActiveDocument
	Dim ofileList As New List(Of String)
	Dim DossierAsm As String = oAsmDoc.FullDocumentName.Replace(oAsmDoc.DisplayName, "") ' récupération du chemin du dossier qui contient l'assemblage
	If Not System.IO.Directory.Exists(DossierAsm & "Valve_Tag") Then System.IO.Directory.CreateDirectory(DossierAsm & "Valve_Tag") ' création du dossier "Valve_Tag" dans le dossier qui contient l'assemblage
	For i = 1 To Nombre ' copie du fichier source autant de fois qu'il est demandé dans le dossier "Valve_Tag" qui vient d'être créé et ajout du nom complet du fichier dans la liste ofileList
		My.Computer.FileSystem.CopyFile(FichierSource, DossierAsm & "Valve_Tag" & "\Valve_tag_" & i & ".ipt")
		ofileList.Add(DossierAsm & "Valve_Tag" & "\Valve_Tag_" & i & ".ipt")
	Next
	Dim oAsmCompDef As AssemblyComponentDefinition = oAsmDoc.ComponentDefinition
	Dim oTG As TransientGeometry = ThisApplication.TransientGeometry
	Dim oMatrix As Matrix = oTG.CreateMatrix
	For Each Filename As String In ofileList ' Pour chaque nom de fichier dans la liste : insertion dans l'assemblage
		Dim oOcc As ComponentOccurrence = oAsmCompDef.Occurrences.Add(Filename, oMatrix)
	Next
	For Each oOccurrence As ComponentOccurrence In oAsmCompDef.Occurrences ' pour chaque occurrence de l'assemblage, si son nom contient "Valve_Tag" alors on ajoute les 10 premiers caractères du nom de l'assemblage
		If oOccurrence.Name.Contains("Valve_Tag") Then oOccurrence.Name = Left(oAsmDoc.DisplayName, 10) & "_" & oOccurrence.Name
	Next
End Sub

 Vincent.

Message 8 sur 15
denis.semeniuc
en réponse à: vpeuvion

Bonjour,

 

Ca marche super bien.

Je fait quelques modification dans code pour atendre mon ojectiv.

Voici le code:

Sub main()
	Dim FichierSource As String = "C:\WS\i-Logic\Valve_Tag.ipt" ' Fichier source qui va etre inséré
	oPath = ThisDoc.Path
	

	'oAsmDoc = ThisDoc.FileName(False) 'without extension
	Dim oAsmDoc As AssemblyDocument = ThisApplication.ActiveDocument
	Dim oPrefix As String =Left(oAsmDoc.DisplayName, 9)'ajoute les 9 premiers caractères du nom de l'assemblage
		
	'Get target folder path
	oFolder = oPath & "\" & oPrefix & "_Valve_Tag"	
		
	Dim Nombre As Integer = InputBox("Prompt", "Nombre de fichiers", 0) 'Demande du nombre de fichiers voulu
	Dim ofileList As New List(Of String)
	Dim DossierAsm As String = oAsmDoc.FullDocumentName.Replace(oAsmDoc.DisplayName, "") ' récupération du chemin du dossier qui contient l'assemblage
	'If Not System.IO.Directory.Exists(DossierAsm & "Valve_Tag") Then System.IO.Directory.CreateDirectory(DossierAsm & "Valve_Tag") ' création du dossier "Valve_Tag" dans le dossier qui contient l'assemblage
				
	For i = 01 To Nombre ' copie du fichier source autant de fois qu'il est demandé dans le dossier "Valve_Tag" qui vient d'être créé et ajout du nom complet du fichier dans la liste ofileList
		
		
		My.Computer.FileSystem.CopyFile(FichierSource, oFolder & "\" & oPrefix & "_Valve_tag-" & i & ".ipt")
		'My.Computer.FileSystem.CopyFile(FichierSource, DossierAsm & "Valve_Tag" & "\Valve_tag_" & i & ".ipt")	
			
			'Check for the folder and create it if it does not exist
		If Not System.IO.Directory.Exists(DossierAsm) Then
		System.IO.Directory.CreateDirectory(DossierAsm)
		End If
		
		ofileList.Add(oFolder & "\" & oPrefix & "_Valve_tag-" & i & ".ipt")
		'ofileList.Add(DossierAsm & "Valve_Tag" & "\Valve_Tag-" & i & ".ipt")
		
	Next
	
	Dim oAsmCompDef As AssemblyComponentDefinition = oAsmDoc.ComponentDefinition
	Dim oTG As TransientGeometry = ThisApplication.TransientGeometry
	Dim oMatrix As Matrix = oTG.CreateMatrix
	
	For Each Filename As String In ofileList ' Pour chaque nom de fichier dans la liste : insertion dans l'assemblage
		Dim oOcc As ComponentOccurrence = oAsmCompDef.Occurrences.Add(Filename, oMatrix)
	Next
'	For Each oOccurrence As ComponentOccurrence In oAsmCompDef.Occurrences ' pour chaque occurrence de l'assemblage, si son nom contient "Valve_Tag" 
'		If oOccurrence.Name.Contains("Valve_Tag") Then oOccurrence.Name = oPrefix & "-" & oOccurrence.Name
'	Next
End Sub

Les problemes:

  • Le ficher est en lecture seule. (original proviene de Vault) - Possible de enlever en insertion?
  • si je veut repeter la function un message de error que le fichie existe deja.
  • il garde en memoire le changement dans fichier presedent avec la meme nom.(voir capture), meme si je supprime tous les docier et tous les fichier. 

denissemeniuc_0-1676067268924.png

 

Merci de votre aide infiniment.

 

Message 9 sur 15
vpeuvion
en réponse à: denis.semeniuc

Bonjour, content que ça fonctionne.

 

- Pour le premier problème, vous pouvez utiliser cet extrait de code qui va passer le fichier en lecture seule après avoir copié le fichier : 

Dim MyFile As System.IO.FileInfo = New System.IO.FileInfo("C:\...\...\...\Part1.ipt")
MyFile.IsReadOnly = False

 - Pour le second problème, j'ai modifié le code que vous avez envoyé pour que le compteur ne démarre pas à 1 mais à la valeur de la variable StartNumber. StartNumber = incrément le plus grand des fichiers "Valve_Tag" déjà présents dans l'assemblage.

Sub main()
	Dim FichierSource As String = "C:\WS\i-Logic\Valve_Tag.ipt" ' Fichier source qui va etre inséré
	oPath = ThisDoc.Path
	Dim oAsmDoc As AssemblyDocument = ThisApplication.ActiveDocument
	Dim oAsmCompDef As AssemblyComponentDefinition = oAsmDoc.ComponentDefinition
	Dim StartNumber As Integer = 1
	For Each oOccurrence As ComponentOccurrence In oAsmCompDef.Occurrences ' pour chaque occurrence de l'assemblage, si son nom contient "Valve_Tag" 
		If oOccurrence.Name.Contains("Valve_tag") Then 
			If CInt(oOccurrence.Name.Substring(oOccurrence.Name.IndexOf("-") + 1, oOccurrence.Name.IndexOf(":") - oOccurrence.Name.IndexOf("-") -1)) > StartNumber Then
				StartNumber = CInt(oOccurrence.Name.Substring(oOccurrence.Name.IndexOf("-") + 1, oOccurrence.Name.IndexOf(":") -oOccurrence.Name.IndexOf("-") -1))
			End If
		End If
	Next
	
	Dim oPrefix As String =Left(oAsmDoc.DisplayName, 9)'ajoute les 9 premiers caractères du nom de l'assemblage
		
	'Get target folder path
	oFolder = oPath & "\" & oPrefix & "_Valve_Tag"	
		
	Dim Nombre As Integer = InputBox("Prompt", "Nombre de fichiers", 0) 'Demande du nombre de fichiers voulu
	Nombre = Nombre + StartNumber
	Dim ofileList As New List(Of String)
	Dim DossierAsm As String = oAsmDoc.FullDocumentName.Replace(oAsmDoc.DisplayName, "") ' récupération du chemin du dossier qui contient l'assemblage
				
	For i = StartNumber + 1 To Nombre  ' copie du fichier source autant de fois qu'il est demandé dans le dossier "Valve_Tag" qui vient d'être créé et ajout du nom complet du fichier dans la liste ofileList
		My.Computer.FileSystem.CopyFile(FichierSource, oFolder & "\" & oPrefix & "_Valve_tag-" & i & ".ipt")
		'Check for the folder and create it if it does not exist
		If Not System.IO.Directory.Exists(DossierAsm) Then
			System.IO.Directory.CreateDirectory(DossierAsm)
		End If
		ofileList.Add(oFolder & "\" & oPrefix & "_Valve_tag-" & i & ".ipt")
	Next
	Dim oTG As TransientGeometry = ThisApplication.TransientGeometry
	Dim oMatrix As Matrix = oTG.CreateMatrix
	
	For Each Filename As String In ofileList ' Pour chaque nom de fichier dans la liste : insertion dans l'assemblage
		Dim oOcc As ComponentOccurrence = oAsmCompDef.Occurrences.Add(Filename, oMatrix)
	Next
End Sub

 - Pour le troisième problème, je n'arrive pas à le reproduire de mon côté. Je ne connais pas les modifications que vous avez effectuées sur le fichier avant d'avoir ce message. Est-ce en lien avec un archivage? Ou avec la lecture seule? Je ne sais pas.

 

Vincent.

 

Message 10 sur 15
denis.semeniuc
en réponse à: vpeuvion

Bonjour,

 

@vpeuvion , Merci pour le code.

 

je le corigé, car les composants comance la numeratation a partir de la deusieme, et quand c'ets 0 lui incerer quand meme un.

Voici ma version:

Sub Main()
	Dim FichierSource As String = "C:\WS\i-Logic\Valve_Tag.ipt" ' Fichier source qui va etre inséré
	oPath = ThisDoc.Path
	Dim oAsmDoc As AssemblyDocument = ThisApplication.ActiveDocument
	Dim oAsmCompDef As AssemblyComponentDefinition = oAsmDoc.ComponentDefinition
	Dim StartNumber As Integer = 0
	For Each oOccurrence As ComponentOccurrence In oAsmCompDef.Occurrences ' pour chaque occurrence de l'assemblage, si son nom contient "Valve_Tag" 
		
		If oOccurrence.Name.Contains("Valve_tag") Then 
			If CInt(oOccurrence.Name.Substring(oOccurrence.Name.IndexOf("-") + 1, oOccurrence.Name.IndexOf(":") - oOccurrence.Name.IndexOf("-") -1)) > StartNumber Then
				StartNumber = CInt(oOccurrence.Name.Substring(oOccurrence.Name.IndexOf("-") +1, oOccurrence.Name.IndexOf(":") -oOccurrence.Name.IndexOf("-") -1))
			End If
		End If
	Next
	
		Dim CurrentFileName As String = ThisDoc.FileName(False) 'without extension
		AsmFolderName = CurrentFileName
		Dim oPrefix As String =Left(oAsmDoc.DisplayName, 9)'ajoute les 9 premiers caractères du nom de l'assemblage
		oFolder = oPath & "\" & AsmFolderName & "\" & oPrefix & "_Valve_Tag"	'Get target folder path
		'MessageBox.Show("Tags Dans Assamblage = "& StartNumber, CurrentFileName)
		Dim Nombre As Integer = InputBox("Tags Dans Assamblage = " & StartNumber &vbNewLine &vbNewLine & "Qte Tags", CurrentFileName , 0) 'Demande du nombre de fichiers voulu
		
If Nombre > 0 Then
	Nombre = Nombre + StartNumber
	Dim ofileList As New List(Of String)
	Dim DossierAsm As String = oAsmDoc.FullDocumentName.Replace(oAsmDoc.DisplayName, "") ' récupération du chemin du dossier qui contient l'assemblage
	If StartNumber >= 1 Then
		x = StartNumber + 1
	Else
		x = 1
	End If
For i = x To Nombre  ' copie du fichier source autant de fois qu'il est demandé dans le dossier "Valve_Tag" qui vient d'être créé et ajout du nom complet du fichier dans la liste ofileList
		
		oFilePath = oFolder & "\" & oPrefix & "_Valve_tag-" & i & ".ipt"
		My.Computer.FileSystem.CopyFile(FichierSource, oFilePath)
		
		'Check for the folder and create it if it does not exist
		If Not System.IO.Directory.Exists(DossierAsm) Then
			System.IO.Directory.CreateDirectory(oFolder)
		End If
		
		ofileList.Add(oFilePath)
		Dim MyFile As System.IO.FileInfo = New System.IO.FileInfo(oFilePath)
		MyFile.IsReadOnly = False
		
	Next
	Dim oTG As TransientGeometry = ThisApplication.TransientGeometry
	Dim oMatrix As Matrix = oTG.CreateMatrix
	
	For Each Filename As String In ofileList ' Pour chaque nom de fichier dans la liste : insertion dans l'assemblage
		Dim oOcc As ComponentOccurrence = oAsmCompDef.Occurrences.Add(Filename, oMatrix)
	Next
End If	
AddOccurrencesToFolder()
End Sub


Public Sub AddOccurrencesToFolder()


    Dim oDoc As AssemblyDocument
	 oDoc = ThisApplication.ActiveDocument

    Dim oDef As AssemblyComponentDefinition 
	 oDef = oDoc.ComponentDefinition

    Dim oPane As BrowserPane 
	 oPane = oDoc.BrowserPanes.ActivePane

    Dim oOccurrenceNodes As ObjectCollection 
	 oOccurrenceNodes = ThisApplication.TransientObjects.CreateObjectCollection

    Dim oOcc As ComponentOccurrence
	
	For Each oOcc In oDef.Occurrences
		If oOcc.Name.Contains("Valve_tag")  Then
		 Dim oNode As BrowserNode 
		 oNode = oPane.GetBrowserNodeFromObject(oOcc)

        oOccurrenceNodes.Add(oNode)
	End If
	Next

    Dim oFolder As BrowserFolder 
	 oFolder = oPane.AddBrowserFolder("ValveTag", oOccurrenceNodes)

End Sub

a la fin je ajouter regrupement dans un docier...

maleresement il ne reper pas si le docier  existe deja, et il fait un autre...

@vpeuvion ,Merci beaucoup, tres apricier.  

Message 11 sur 15
vpeuvion
en réponse à: denis.semeniuc

Bonjour, merci, je suis content d'avoir pu vous aider.

Pour le problème du BrowserFolder qui est créé à chaque fois voici un exemple de code qui pourrait vous aider.

Il s'exécute dans un assemblage et vous demande de sélectionner une occurrence, si un dossier Valve_Tag existe, il va ajouter cette occurrence au dossier, s'il n'existe pas il va créer un nouveau dossier et y ajouter cette occurrence.

Vous devez pouvoir assez facilement le combiner à votre code :

Dim oDoc As AssemblyDocument = ThisApplication.ActiveDocument
Dim oPane As BrowserPane = oDoc.BrowserPanes.ActivePane
Dim Exist As Boolean = False
For Each oFolder As BrowserFolder In oPane.TopNode.BrowserFolders
	If oFolder.Name = "Valve_Tag" Then Exist = True
Next
Dim pick As ComponentOccurrence = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter, "Select occurrence")
	Dim oNode As BrowserNode = oPane.GetBrowserNodeFromObject(pick)
If Exist = True Then 
	MessageBox.Show(" Valve_tag folder exist")
	Dim oFolder2 As BrowserFolder = oPane.TopNode.BrowserFolders("Valve_Tag")
	oFolder2.Add(oNode)
Else
	MessageBox.Show(" Valve_tag folder don't exist")
	Dim oFolder2 As BrowserFolder = oPane.AddBrowserFolder("Valve_Tag")
	oFolder2.Add(oNode)
End If

Vincent.

 

Message 12 sur 15
denis.semeniuc
en réponse à: vpeuvion

Bonjour,

 

Merci pour le code, sa function.

 

je vien de modifier lui pour adapter a mes besoin. je enlever la function de indication de composant. tous se fait en mode automatique.

 

Voici ma vertion: 

 

		Dim nPart As String = "Valve_tag"
		Dim nFolder As String = "Valve_Tag"
		Dim oDoc As AssemblyDocument = ThisApplication.ActiveDocument
		Dim oPane As BrowserPane = oDoc.BrowserPanes.ActivePane
		Dim oDef As AssemblyComponentDefinition = oDoc.ComponentDefinition
		Dim oOccurrenceNodes As ObjectCollection = ThisApplication.TransientObjects.CreateObjectCollection
    	Dim oOcc As ComponentOccurrence
		Dim Exist As Boolean = False
		For Each oFolder As BrowserFolder In oPane.TopNode.BrowserFolders
			If oFolder.Name = nFolder  Then Exist = True
		Next
'		Dim pick As ComponentOccurrence = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kAssemblyOccurrenceFilter, "Select occurrence")
'			Dim oNode As BrowserNode = oPane.GetBrowserNodeFromObject(pick)
		For Each oOcc In oDef.Occurrences
			If oOcc.Name.Contains(nPart)  Then
				Dim oNode As BrowserNode  = oPane.GetBrowserNodeFromObject(oOcc)
	        	oOccurrenceNodes.Add(oNode)
	
				If Exist = True Then 
					'MessageBox.Show(" Valve_tag folder exist")
					Dim oFolder2 As BrowserFolder = oPane.TopNode.BrowserFolders(nFolder )
					oFolder2.Add(oNode)
				Else
					'MessageBox.Show(" Valve_tag folder don't exist")
					Dim oFolder2 As BrowserFolder = oPane.AddBrowserFolder(nFolder )
					oFolder2.Add(oNode)
				End If	
			End If
		Next

 

Merci. 

Message 13 sur 15
denis.semeniuc
en réponse à: vpeuvion

Bonjour,

 

En utilisent le code pour incertion des Valve Tag, il apparet un error :

denissemeniuc_0-1676400796097.png

 

A cause que composant ete suprime de browser me ne pas du docier. 

C'est possible de faire qqch avec ca? (exp.: passer ou suivent ...) Je ne veux pas trop charger le code pour le petite nuances comme ca.

Ou c'est plus facile de faire la menage dans docier?

 

Merci.

Message 14 sur 15
vpeuvion
en réponse à: denis.semeniuc

Bonjour, vous pouvez essayer d'ajouter un Try Catch End Try dans votre code.

Try
'Action copier le composant
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

S'il y a une erreur, le message sera affiché et il passera à la suite.

Vincent. 

Message 15 sur 15
denis.semeniuc
en réponse à: vpeuvion

Ca functionne.

 

Merci.

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report