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 : 

Vue de détails avec ilogic

22 RÉPONSES 22
RÉSOLU
Répondre
Message 1 sur 23
louisphilippe.dujardin
1064 Visites, 22 Réponses

Vue de détails avec ilogic

Bonjour à toutes et à tous,

 

Je suis occupé à configurer une plan 2d avec ilogic. Je souhaiterais faire une vue de détails avec une règle ilogic. Ma règle fonctionne mais la vue de détail pointe sur une curve aléatoirement. Je souhaiterais que la vue de détails pointe sur une courbe que j'ai appelé "Mur_PP" dans mon 3D.

La vue de détails doit pointer sur un Point2d. Mais je n'arrive pas à convertir ma curve "Mur_PP" en Point2d.

Est-ce que quelqu'un pourrais me dire comment avancé sur mon problème.

Dans ma règle ci-dessous, la curve "Item(6)  devrait être remplacée par la courbe "Mur_PP".

 

Je joins des fichier exemples. La règle s'appelle vue de détails dans le plan 2d.

 

Merci d'avance.

 

Louis-Philippe

 

Sub Main()
Dim oDrawing As DrawingDocument = ThisApplication.ActiveDocument	
Dim oSheet As Sheet = oDrawing.ActiveSheet
Dim oView As DrawingView = oSheet.DrawingViews.Item(1)
Dim oReferDoc As AssemblyDocument = oView.ReferencedDocumentDescriptor.ReferencedDocument
Dim oAssyDef As AssemblyComponentDefinition = oReferDoc.ComponentDefinition
Dim Occ As ComponentOccurrence
Dim oCurve As DrawingCurve
Dim oLine As DrawingCurve



Dim oTG As TransientGeometry = ThisApplication.TransientGeometry

		If oView.DrawingCurves(Occ).Count > 0 Then
			Dim oCollection As ObjectCollection = ThisApplication.TransientObjects.CreateObjectCollection
			Dim oCurves As DrawingCurvesEnumerator = oView.DrawingCurves(Occ)
				For Each oCurve In oCurves
					If oCurve.CurveType = kLineSegmentCurve Then
						Call oCollection.Add(oCurve)
					End If
				Next
				
				oLine = oCurves.Item(6)
			
		 End If

Dim Test_1 = ThisDrawing.Sheets.ItemByName("Test:1")
Dim VUE1 = Test_1.DrawingViews.ItemByName("VUE1")
Dim Mur_PP = VUE1.GetIntent("Maconnerie test:1", "Mur PP")



				Dim oMidpoint As Point2d
				Dim oStartpoint As Point2d
				Dim oEndpoint As Point2d
				Dim oMurPPPoint As Point2d

				Dim oGeometryIntent As GeometryIntent 
'				oMurPPPoint =oSheet.CreateGeometryIntent(Mur_PP, PointIntentEnum.kEndPointIntent) 
				oMidpoint = oLine.MidPoint
				oStartpoint = oLine.StartPoint
				oEndpoint = oLine.EndPoint
'				oGeometryIntent = oSheet.CreateGeometryIntent(oLine, PointIntentEnum.kEndPointIntent)
				
'		
			    ' Set a reference to the TransientGeometry object.

								
				Dim PmX As Double = oMidpoint.X
				Dim PmY As Double = oMidpoint.Y
				Dim PsX As Double = oStartpoint.X
				Dim PsY As Double = oStartpoint.Y
				Dim PeX As Double = oEndpoint.X
				Dim PeY As Double = oEndpoint.Y

				
			    ' Set a reference to the parent drawing view of the selected curve
			    Dim oDrawingView As DrawingView = oCurve.Parent

		


	oTG = ThisApplication.TransientGeometry

	'Dimension de la box de la DetailViewometry


	EscGPosA = oTG.CreatePoint2d(PeX-1, PeY+1)
	EscGPosB = oTG.CreatePoint2d(PeX+3, PeY-3)


	'Position de la vue de détail
	oPoint = oTG.CreatePoint2d(0, 0)  
	oPoint.X = oPoint.X + 5
	oPoint.Y = oPoint.Y + 5
    
    
    Dim oDetailView As DetailDrawingView
		

	oDetailView = oSheet.DrawingViews.AddDetailView(oDrawingView, oPoint,kFromBaseDrawingViewStyle, False, EscGPosA, EscGPosB, , oDrawingView.Scale * 2)


End Sub	

 

Étiquettes (3)
22 RÉPONSES 22
Message 2 sur 23

Rebonjour à tous,

 

Je ne sais pas ce sujet n'intéresse personne ou je me suis mal exprimé dans l'explication de mon problème.

L'objectif est de faire une vue de détail avec Ilogic. Je souhaite que le l’extrémité de ma ligne que j'ai appelé (Mur_PP) dans ma pièce soit le départ de la zone de la vue de détail. (image ci-dessous). J'ai posté ci-dessus un exemple.

Je suis coincé depuis un moment là dessus, et je ne trouve pas d'info sur le Web.

🙏Merci de pouvoir m'aider.

 

Louis-Philippe

 

 

Image sans titre.jpg

Message 3 sur 23

Bonjour @louisphilippe.dujardin ,

 

Votre question est parfaitement claire et très bien rédigée.

 

Mais malheureusement notre expert iLogic à très peu de temps en ce moment... Je vois que vous avez posé la question sur le forum anglais également mais que vous n'avez pas eu de réponse encore, peut-être en ouvrant un nouveau sujet vous aurez plus de chance ?

Fabian Perrée
Giùp.fr | LinkedIn

Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Cliquez ici pour accéder à toutes mes formations en ligne
Inventor 2022 : Modélisation et documentation de systèmes mécaniques
Message 4 sur 23

Salut @louisphilippe.dujardin 

Désolé de cette réponse très tardive.

Après lecture de ton code, je vois premièrement des incohérences. Doubles déclarations pour les mêmes éléments...une boucle dont tu ne te sers pas au final. Des variables inutilisées...

 

Une première piste, la ligne de géométrie que tu as renommée "Mur_PP" est un libellé dans l'environnement pièce que tu peux aller chercher comme ceci, toujours dans l'environnement pièce :

Sub ToggleGeometryNameGraphics()
    Dim sGeometryName As String
    sGeometryName = "Mur_PP"
    
    Dim oDoc As PartDocument
    Set oDoc = ThisApplication.ActiveDocument
    
    Dim oGraphicsColl As ClientGraphicsCollection
    Set oGraphicsColl = oDoc.ComponentDefinition.ClientGraphicsCollection
    
    Dim oClientGraphics As ClientGraphics
    Dim oNode As GraphicsNode
    For Each oClientGraphics In oGraphicsColl
        If oClientGraphics.ClientId = "NamedEntityGraphicsID" Then
            For Each oNode In oClientGraphics
                If oNode.DisplayName = sGeometryName Then
                    oNode.Visible = Not oNode.Visible
                    oDoc.Update
                End If
            Next
        End If
    Next
End Sub

Le code ci-dessus fonctionne dans l'environnement pièce, mais pas dans l'environnement dessin.

Bien que la commande "capturer l'état actuel" de la ligne permette d'y accéder directement, depuis l'environnement de la pièce ou du dessin, les manipulations en iLogic pur sont très limitées. La fonction est relativement nouvelle, et la documentation, très limitée également.

J'essaierai de faire davantage de recherches sur le sujet 😉


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 5 sur 23

Bonjour @ThomasB44 ,

 

Je te remercie d'avoir pris le temps de lire mon sujet, je n'y croyais plus. 😉

 

Effectivement, il y a beaucoup de choses inutilisées dans mon code, ce sont les restes de tout ce que j' ai essayé ainsi que d'éléments que j'aurai sans doute besoin pour la suite.

 

J'avoue ne pas bien comprendre le fonctionnement de ton code. l'objectif de ce que je cherche a faire est de pointer la box de la Vue de Détails sur un élément géométrique de la pièce.

Il n'y a effectivement pas beaucoup de documentation à ce sujet.

 

J'avoue que je ne vois toujours pas comment avancer plus loin.

Je te remercie pour ton temps.

 

Louis-Philippe

 

Message 6 sur 23

Salut @louisphilippe.dujardin 

Le code que j'ai indiqué permet juste, dans l'environnement pièce, de retrouver la ligne que tu as renommée. Le code oNode.Visible est juste un exemple, on pourrait très bien faire autre chose à la place. oNode représente ici ton libellé "Mur_PP".

 

Pour créer la vue de détail, pas de soucis, ton code est correct.

 

La difficulté majeure est de passer du libellé "Mur_PP" à la DrawingCurve qu'il représente, et ce, dans l'environnement de dessin !

J'ai essayé, mais en vain pour le moment.

Je vais retenter ma chance.


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 7 sur 23

Salut @louisphilippe.dujardin 

J'ai fini par comprendre...

Déjà en français ça s'appelle un "libellé" et en anglais c'est "named geometry", c'est pour ça qu'on trouvait rien ou presque. Ensuite il fallait savoir utiliser l'Attribute Manager en filtrant sur les objets iLogic renommés.

 

Teste cette règle dans l'environnement de dessin en renommant le libellé de ta pièce "Libellé de géométrie" ou bien dans le code :

Dim oDoc As DrawingDocument 
oDoc = ThisApplication.ActiveDocument
Dim oSheet As Sheet
oSheet = oDoc.ActiveSheet
Dim oView As DrawingView
oView = oSheet.DrawingViews.Item(1)
Dim oRefDoc As PartDocument
oRefDoc = oView.ReferencedDocumentDescriptor.ReferencedDocument

Dim oObjColl As ObjectCollection
oObjColl = ThisApplication.TransientObjects.CreateObjectCollection
oObjColl = oRefDoc.AttributeManager.FindObjects("iLogicEntityNameSet", "iLogicEntityName", "Libellé de géométrie")
Dim oObj As Object
oObj = oObjColl.Item(1)
Dim oDwgCurve As DrawingCurve
oDwgCurve = oView.DrawingCurves(oObj).Item(1)

Dim oPoint As Point2d
oPoint = oDwgCurve.MidPoint
Dim oTG As TransientGeometry 
oTG = ThisApplication.TransientGeometry
Dim oCornerOne As Point2d
oCornerOne = oTG.CreatePoint2d(oPoint.X - 2 , oPoint.Y - 2)
Dim oCornerTwo As Point2d
oCornerTwo = oTG.CreatePoint2d(oPoint.X + 2 , oPoint.Y + 2)

Dim oDetailView As DetailDrawingView
oDetailView = oSheet.DrawingViews.AddDetailView(oView, oPoint, _
kFromBaseDrawingViewStyle, False, oCornerOne, oCornerTwo, , oView.Scale * 2)

 


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 8 sur 23

Bonjour Thomas,

 

Merci beaucoup pour tes recherches, effectivement en cherchant "named geometry" , on trouve plus d'info.

 

J'ai appliqué ton code, et il m'indiquait un message d'erreur.

Après avoir cherché, je me suis rendu compte que ma vue contient un assemblage et pas une pièce.

 

En appliquant ton code à une vue qui contient une pièce, ça fonctionne parfaitement.

 

J'ai adapté ton code en remplaçant

 

Dim oRefDoc As PartDocument

Par

Dim oRefDoc As AssemblyDocument

et en adaptant le libellé de la géométrie par

oObjColl = oRefDoc.AttributeManager.FindObjects(,"Maconnerie test:1", "Mur PP")

Mais ça ne fonctionne pas. il me met : "Paramètre incorrect. (Exception de HRESULT : 0x80070057 (E_INVALIDARG))"

Je ne suis pas certain de bien définir le libellé de la géométrie lorsqu'il fait partie d'une pièce d'un assemblage.

 

En cherchant un peu, j'ai l’impression que ça ne fonctionne pas encore dans le cas d'un assemblage.

 

on avance! je continue aussi à chercher.

 

Merci beaucoup.

 

 

 

 

 

 

 

 

Message 9 sur 23

Salut @louisphilippe.dujardin 

Les libellés n'existent que dans l'environnement pièce. Je ne savais pas qu'il s'agissait d'un ensemble.

Le problème est effectivement la déclaration de oRefDoc. Il faudrait savoir comment retrouver la pièce qui contient le libellé. On peut changer le code pour l'adapter à un assemblage, mais as tu une règle logique pour trouver la bonne pièce ? A moins de boucler sur toutes les occurrences jusqu'à trouver le bon libellé, mais l'exécution du code prendra plus de temps.


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 10 sur 23

Salut @ThomasB44 ,

 

Je pense qu'on peut essayer de trouver la première occurrence de l’assemblage.

et dans cette occurrence qui est une Pièce, rechercher l'objet "Mur PP".

Je m'arrange pour que la pièce soit en 1er.

 

Je viens d'essayer mais je bloque.

On peut essayer de boucler, il n'y a pas beaucoup de pièces.

 

 

Message 11 sur 23

Il y a une petite astuce...il faut passer par EdgeProxy

Ce code regarde dans la 1ère occurrence de l'ensemble :

Dim oDoc As DrawingDocument 
oDoc = ThisApplication.ActiveDocument
Dim oSheet As Sheet
oSheet = oDoc.ActiveSheet
Dim oView As DrawingView
oView = oSheet.DrawingViews.Item(1)
Dim oRefDoc As AssemblyDocument
oRefDoc = oView.ReferencedDocumentDescriptor.ReferencedDocument
Dim oOcc As ComponentOccurrence
oOcc = oRefDoc.ComponentDefinition.Occurrences.Item(1)
Dim oPartDoc As PartDocument
oPartDoc = oOcc.Definition.Document

Dim oObjColl As ObjectCollection
oObjColl = ThisApplication.TransientObjects.CreateObjectCollection
oObjColl = oPartDoc.AttributeManager.FindObjects("iLogicEntityNameSet", "iLogicEntityName", "Libellé de géométrie")
Dim oEdge As Inventor.Edge
oEdge = oObjColl.Item(1)
Dim oEdgeProxy As Inventor.EdgeProxy
oOcc.CreateGeometryProxy(oEdge, oEdgeProxy)
Dim oDrawCurves As DrawingCurvesEnumerator
oDrawCurves = oView.DrawingCurves(oEdgeProxy)
Dim oDwgCurve As DrawingCurve
oDwgCurve = oDrawCurves.Item(1)

Dim oPoint As Point2d
oPoint = oDwgCurve.MidPoint
Dim oTG As TransientGeometry 
oTG = ThisApplication.TransientGeometry
Dim oCornerOne As Point2d
oCornerOne = oTG.CreatePoint2d(oPoint.X - 2 , oPoint.Y - 2)
Dim oCornerTwo As Point2d
oCornerTwo = oTG.CreatePoint2d(oPoint.X + 2 , oPoint.Y + 2)

Dim oDetailView As DetailDrawingView
oDetailView = oSheet.DrawingViews.AddDetailView(oView, oPoint, _
kFromBaseDrawingViewStyle, False, oCornerOne, oCornerTwo, , oView.Scale * 2)

Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 12 sur 23

 

Lorsqu'il exécute la règle, il me met une erreur lorsqu'il déclare oEdge.

Dim oEdge As Inventor.Edge
oEdge = oObjColl.Item(1)

 

ERR1.JPG

Par contre il trouve bien 'Mur PP' dans la première occurrence de l’assemblage.

 

Par contre une question un peu plus générale, je ne comprend pas bien le concept de 'Proxy'.

 

On avance, je pense qu'on est proche d'y arriver.

merci beaucoup pour ta recherche et ton partage d'info.

 

Message 13 sur 23

Bizarre, je n'ai pas d'erreur de mon côté.

Cette ligne de code :

oEdge = oObjColl.Item(1)

Peut retourner une erreur si oObjColl est vide.

Place une boite de message avant cette ligne, et renseigne ceci pour voir : oObjColl.Count

 

Les proxies permettent de manipuler des objets dans un contexte. C'est assez rare d'avoir à s'en servir, mais je n'y arrivais pas autrement.


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 14 sur 23

Il me retourne bien : 1

et effectivement sur

oEdge = oObjColl.Item(2)

et me donne erreur de paramètre ce qui est logique car que 1 objet dans la collection.

 

 

Message 15 sur 23

Salut @ThomasB44,

 

Je viens de comprendre pourquoi il me met ce message d'erreur.

L'objet "Mur PP" est une face dans ma pièce et pas une arrête.

 

Soit je nome l’arrête supérieur de ma surface ou bien il y a moyen de de viser sur la surface.

En référencent une arrête ça marche en tout cas.

Message 16 sur 23

Yeeeeeeesssss !!!!

 

J'ai modifié mon code en faisant une faceproxy et plus une Edge proxy.

Dim oDoc As DrawingDocument 
oDoc = ThisApplication.ActiveDocument

Dim oSheet As Sheet
oSheet = oDoc.ActiveSheet

Dim oView As DrawingView
oView = oSheet.DrawingViews.Item(1)

Dim oRefDoc As AssemblyDocument
oRefDoc = oView.ReferencedDocumentDescriptor.ReferencedDocument

Dim oOcc As ComponentOccurrence
oOcc = oRefDoc.ComponentDefinition.Occurrences.Item(2)

Dim oPartDoc As PartDocument
oPartDoc = oOcc.Definition.Document

Dim oObjColl As ObjectCollection
oObjColl = ThisApplication.TransientObjects.CreateObjectCollection
oObjColl = oPartDoc.AttributeManager.FindObjects(, , "Mur PP")


Dim oFace As Inventor.Face
oFace = oObjColl.Item(1)


Dim oFaceProxy As Inventor.FaceProxy
oOcc.CreateGeometryProxy(oFace, oFaceProxy)

Dim oDrawCurves As DrawingCurvesEnumerator
oDrawCurves = oView.DrawingCurves(oFaceProxy)

Dim oDwgCurve As DrawingCurve
oDwgCurve = oDrawCurves.Item(1)

Dim oPoint As Point2d
oPoint = oDwgCurve.MidPoint
Dim oTG As TransientGeometry 
oTG = ThisApplication.TransientGeometry
Dim oCornerOne As Point2d
oCornerOne = oTG.CreatePoint2d(oPoint.X - 2 , oPoint.Y - 2)
Dim oCornerTwo As Point2d
oCornerTwo = oTG.CreatePoint2d(oPoint.X + 2 , oPoint.Y + 2)

Dim oDetailView As DetailDrawingView
oDetailView = oSheet.DrawingViews.AddDetailView(oView, oPoint, _
kFromBaseDrawingViewStyle, False, oCornerOne, oCornerTwo, , oView.Scale * 2)

 Et ça marche... MERCI MERCI.....

 

 

 

Message 17 sur 23

Parfait 👍😉


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 18 sur 23

J'ai re transposé mon code dans mon plan avec l'intégralité du code.
Et lors de la déclaration de oDwgCurve = oDrawCurves.Item(1)
ça ne marche plus.
J'ai fait un oDrawCurve.Count , mais il me renvoit 0.
Je ne comprend pas pourquoi.
Désolé.

Message 19 sur 23

S'il te renvoie 0 sans produire d'erreur, c'est que le code est correct.

Attention tu as mis :

oOcc = oRefDoc.ComponentDefinition.Occurrences.Item(2)

Il regarde donc la 2ème occurrence de ton assemblage.

Messagebox.Show("Nom de l'occurrence : " & oOcc.Name,"iLogic"

Qui ne doit pas contenir de libellé selon ton critère de recherche.


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 20 sur 23

Quand Je fais

MessageBox.Show(oObjColl.Count, "Ilogic")

il me renvois bien : 1

 

Mais c'est a l’étape suivante

Dim oFaceProxy As Inventor.FaceProxy
oOcc.CreateGeometryProxy(oFace, oFaceProxy)


Dim oDrawCurves As DrawingCurvesEnumerator
oDrawCurves = oView.DrawingCurves(oFaceProxy)

MessageBox.Show(oDrawCurves.Count, "Title")


Dim oDwgCurve As DrawingCurve
oDwgCurve = oDrawCurves.Item(1)

 Là il me renvoie 0 alors que le même code dans mon ensemble Sample fonctionne bien( renvoie 1).

Est-ce que quelque chose pourrait l’empêcher de créer oDrawcurves?

 

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