Invité Quieto Posté(e) le 27 janvier 2011 Posté(e) le 27 janvier 2011 Je reviens vers vous, avec un des module que j'integrerais plus tard à ma macro complete. L'idée est de faire choisir à l'utilisateur : * Une face sur laquelle editer une nouvelle esquisse (dans un corps crée pour l'occasion) * De choisir le centre et un point d'un cercle crée avec la macro (en cliquant sur la localisation) Le probleme : j'ai pas de soucis pour determiner le rayon en fonction des coordonnées des points saisis par l'utilisateur. En revanche, les coordonnées du centre sont assez ... aléatoires. Je m'explique : des fois, en particulier sur certaine faces et en vue normales à ces faces, le code fonctionne correctement. En revanche, quand on est en perspective, voir meme en vue normale à certaines faces , les coordonnées devienne n'importe quoi. Une idée sur la question ? Sub CATMain() Dim myDoc As PartDocumentSet myDoc = CATIA.ActiveDocument Dim myPart As PartSet myPart = myDoc.Part Dim myBodies As bodiesSet myBodies = myPart.bodies Dim myMainBody As BodySet myMainBody = myPart.MainBody Dim myBody As BodySet myBody = myBodies.Add() Dim mySelectionDim Status Dim InputObjectType(0) Set mySelection = myDoc.Selection InputObjectType(0) = "Face" Status = mySelection.SelectElement2(InputObjectType, "Select a face", True) If (Status = "cancel" ) Then Exit Sub Set myFace = mySelection.Item(1).Reference mySelection.Clear Dim mySketches As Sketches Set mySketches = myBody.Sketches Dim mySketch As Sketch Set mySketch = mySketches.Add(myFace) Dim myFactory2D As Factory2D Set myFactory2D = mySketch.OpenEdition() Dim myTempDocSet myTempDoc = CATIA.ActiveDocumentDim SelectionSet Selection = myTempDoc.SelectionDim Location(1)Dim RLocation(1) myPart.InWorkObject = mySketch Status = myTempDoc.Indicate2D("Select a location", Location)If (Status = "Cancel" ) Then Exit Sub XCenter = Location(0)YCenter = Location(1) Status = myTempDoc.Indicate2D("Select a radius location", RLocation)If (Status = "Cancel" ) Then Exit Sub XRadius = RLocation(0)YRadius = RLocation(1) Carre1 = Abs((XRadius - XCenter) * (XRadius - XCenter))Carre2 = Abs((YRadius - YCenter) * (YRadius - YCenter))Somme = Carre1 + Carre2Radius = Sqr(Somme) Dim Circle2D As Circle2DSet Circle2D = myFactory2D.CreateClosedCircle(XCenter, YCenter, Radius) myPart.Update End Sub
marc54 Posté(e) le 27 janvier 2011 Posté(e) le 27 janvier 2011 Bonjour Quieto, Je crois que j'ai eu le même problème il y a peu de temps :http://www.catiav5forum.de/wbb3/wbb/index.php?page=Thread&postID=27956&highlight=indicate2D#post27956 Que je n'ai pas résolu ...J'utilise indicate2D en drafting et je n'ai pas de souci. Par contre, dans un sketch c'est 0 ! Les coordonnées retournées doivent dépendre du facteur de zoom, du positionnement du sketch en 3D, ou de la température extérieure ... Marc http://www.3dsys.fr
Invité Quieto Posté(e) le 31 janvier 2011 Posté(e) le 31 janvier 2011 Bon des nouvelles de ma part : Il semble que Indicate2D mesure les coordonnées du clic par rapport au repère de la PART , les transforme , et place le point par rapport au repère de l'esquisse. La transformation :La coordonnée en X affiché par Indicate2D est la même que celle mesurée par rapport à l'origine de la PartLa coordonnée en Y est le resultat de la division de la coordonnée mesurée par rapport à l'origine de la Part, par une des composantes d'un des vecteurs directeur du plan d'esquisse (obtenue grace à GetAbsoluteAxisData), avec en plus une opération sur le signe que je n'ai pas encore réussie à isoler ... Pour plus d'infos, je renvoie sur le thread que j'ai ouvert sur COE :http://www.coe.org/Collaboration/DiscussionForum/ActiveDiscussions/tabid/210/aff/10/aft/132314/afv/topic/afpgj/1/Default.aspx#136118
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant