Olivier Eckmann Posté(e) le 29 février 2016 Posté(e) le 29 février 2016 Bonjour, J'ai créé un bloc avec un attribut. J'ai mis un paramètre étirement pour positionner mon attribut où je veux, ainsi qu'un paramètre de rotation pour le faire tourner.Je dois modifier la valeur de rotation par programme (Lisp ou C#) pour mettre tout mes attributs à l'horizontal. Le problème c'est que je n'arrive pas comprendre comment est calculé l'angle de mon paramètre Rotation.Je joins un exemple de mon bloc.J'ai inséré 2 fois le bloc au point 0,0. En haut c'est mon bloc tel que défini : la valeur de rotation est de 0rEn bas c'est le même bloc que j'ai déplacé avec le grip carré de l'étirement, et la valeur de rotation n'est plus égale à 0. Toute position autre que la position de départ me donne un angle différent (sans que j'ai touché au grip de rotation)J'imagine que cet angle est mesurée quelque part à partir de la position de départ, mais je ne vois vraiment pas où.Si quelqu'un a une idée sur la façon dont AutoCAD calcule cet angle?MerciOlivierTEST_BLOC_ROTATION.zip
Lommig Posté(e) le 29 février 2016 Posté(e) le 29 février 2016 Bonjour, J'ai remarqué quelque chose :Si on dessine plusieurs blocs avec une rotation de l'attribut forcée à 0, ils pointent tous vers le même point. Apparemment, il s'agit de la position du grip de rotation dans la définition par défaut du bloc. Pour chaque bloc, la direction vers ce point définit donc le "0" pour la rotation de l'attribut.On peut calculer un V0 (différence entre ce "0" et l'horizontal du dessin) pour chaque bloc... Guillaume AutoCAD, AutoCAD Map3D, AutoCAD Architecture, Revit, COVADIS, InfraWorks 360, ReCap 360, ...BIM Infrastructure
Tramber Posté(e) le 29 février 2016 Posté(e) le 29 février 2016 J'ai mis un paramètre étirement pour positionner mon attribut où je veux, ainsi qu'un paramètre de rotation pour le faire tourner.Je vais regarder le dessin et répondre si j'ai un truc à dire mais je m'arrête ici.Pourquoi un paramètre pour le positionner où tu veux ? Un attribut peut très bien être libre d'être déplacé du moment qu'il n'est pas verrouillé en position. Est-ce parce que tu veux un paramètre de rotation que tu as été obligé de faire un paramètre de position aussi ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 29 février 2016 Posté(e) le 29 février 2016 Ok, si j'ai compris la clé est dans la réponse de Guillaume.Si je m'y mets, je refais des jeux de sélection, ca ne fonctionne pas.C'est un sujet intéressant.Question : ton but est bien d'orienter d'un coup d'un seul à la même valeur absolue un ensemble de ces blocs.Si j'avais pas crèche et garde d'enfants... mais je dois partir.Certain qu'il y a des solutions.Déjà, avec un barre verticale (contrainte) invisible qui sert de référence, ta rotation sera mieux référencée je pense.Une piste. A plus tard, tard B) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Olivier Eckmann Posté(e) le 29 février 2016 Auteur Posté(e) le 29 février 2016 Bonjour, @ Tramber : oui un attribut peut-être libre, mais le grip d'étirement est la seule solution que j'ai trouvé pour "embarquer" en une seule fois l'attribut ET la flèche de position ET le wipeout. Pour le Wipeout je peux passer par un attribut multi-ligne avec masque d'arrière plan, mais pour emmener la flèche je ne sais pas faire autrement. Si tu as une solution moins "compliquée" je suis preneur (si une contrainte de coïncidence peut être utilisée, c'est pas forcément plus simple) @Lommig : Merci pour l'info, je vais regarder cet angle vers la position de départ. Olivier
Tramber Posté(e) le 29 février 2016 Posté(e) le 29 février 2016 J'ai répondu entre temps.Il y a des solutions. Tu sais où est le problème : la référence de la rotation. Je vois un point bleu accroché nulle part. Juste à l'Est.C'est Guillaume qui nous a mis la puce à l'oreille.Je dois y aller ;) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
zebulon_ Posté(e) le 29 février 2016 Posté(e) le 29 février 2016 Bonjour, est-ce que la flèche doit être absolument de cette forme ? Sinon, si une flèche plus classique est possible, je crois que cela serait beaucoup plus simple à gérer avec une ligne de repère multiple à laquelle on associe un bloc avec attribut. Du coup, on peut rajouter/enlever des flèches. Pour la rotation, c'est plus délicat. La ligne de repère multiple n'a un paramètre de rotation du texte que lorsqu'il s'agit d'une ligne de repère multiple avec un texte. Si c'est une ligne de repère multiple avec un bloc, ce paramètre n'existe pas. A priori, il faudra faire une rotation de toute la ligne de repère, y compris les flèches. Avec des lignes de repère lrepere (du menu cotation), on arrive à faire tourner plus facilement les blocs associés aux flèches. Mais cela reste un ensemble de 2 objets, une flèche et un bloc qui lui est associé. Si on bouge le bloc, la flèche se modifie. Par contre, si on modifie (ou on supprime) la flèche, le bloc ne bougera pas. Dans le fichier, il y a les 2 cas : ligne de repère multiple (que je préfère) et ligne de repère AmicalementVincentTestLrep.zip C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
(gile) Posté(e) le 29 février 2016 Posté(e) le 29 février 2016 Salut, J'ai un peu modifié le bloc : remplacé l'action d'étirement par une action d'étirement polaire et mis le paramètre d'étirement à l'horizontale (Angle1 = 0.0 par défaut).D'après les rapides tests que j'ai fait, en attribuant à la propriété RotationAttribut l'inverse de Angle1 on remet l'attribut à l'horizontale. private void AttribHorizontal(BlockReference br) { double angle = 0.0; DynamicBlockReferenceProperty attRot = null; foreach (DynamicBlockReferenceProperty prop in br.DynamicBlockReferencePropertyCollection) { if (prop.PropertyName == "Angle1") angle = (double)prop.Value; if (prop.PropertyName == "RotationAttribut") attRot = prop; } if (attRot != null) attRot.Value = -angle; }TEST_ATTRIB.zip Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Olivier Eckmann Posté(e) le 1 mars 2016 Auteur Posté(e) le 1 mars 2016 Bonjour, @Zebulon : effectivement les lignes de repère pourraient être une solution. Je ne suis pas fan de la ligne de repère multiple, car même si c'est rare chez les clients, elles n'apparaissent pas dans un AutoCAD 2007 ou antérieur. Pour la ligne de repère simple, effectivement, la rotation est un peu plus compliqué à mettre en oeuvre, mais je garde l'idée sous le coude si je ne m'en sort pas avec mon bloc. @Gile : merci pour le bloc, mais je vais rester avec mon étirement car il permet de garder mon attribut horizontal lors de l'étirement interactif. Merci pour le code qui m'a permis d'accéder aux propriétés dynamique sur mon bloc. Avec un peu de trigo j'ai pu affecter la bonne valeur de rotation à mon attribut.Pour info, je pense que tu le sais mais si quelqu'un tombe dessus, dans mon attribut j'essayais de mettre un champ Surface ou Longueur avec la référence à un ObjectID du genre : "%<\\AcObjProp.16.2 Object(%<\\_ObjId " +id.OldId.ToString() + ">%).Area \\f \"%lu2%pr2%ps[s=,m²]\">% Dans le cas d'un attribut ligne, il suffit de renseigner le TextString, puis un Regen pour que ça se mette à jour, par contre pour un attribut multiligne, si on change juste le TextString il fallait que je quitte, puis ré-ouvre le fichier pour que le champ se mette à jour. Finalement, j'ai trouvé qu'en utilisant ce code ça fonctionnait. AttributeReference ar = (AttributeReference)tr.GetObject(idAtt, AcDbServices.OpenMode.ForWrite); if (ar.Tag.ToUpper() == sTag.ToUpper()) { if (ar.IsMTextAttribute) { MText mtxt = ar.MTextAttribute; mtxt.Contents = sVal; ar.MTextAttribute = mtxt; ar.UpdateMTextAttribute(); br.RecordGraphicsModified(true); } else ar.TextString = sVal; } La modification directe du Contents ne fonctionnait pas.Si ça peut servir. Merci à tous Olivier
zebulon_ Posté(e) le 1 mars 2016 Posté(e) le 1 mars 2016 Bonjour, Je ne suis pas fan de la ligne de repère multiple, car même si c'est rare chez les clients, elles n'apparaissent pas dans un AutoCAD 2007 ou antérieur. c'est vrai qu'elles mériteraient quelques améliorations, mais globalement c'est mieux foutu que les lignes de repère de cotation. Les points qui mériteraient d'être améliorés dans les mleader :- le masque d'arrière plan n'est pas dans la définition du style de mleader- la cotation des tolérances géométriques est absente dans mleader et il faut reprendre les anciennes lrepere pour cela.- d'autres points, certainement... AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
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