BenhuR Posté(e) le 10 février 2018 Posté(e) le 10 février 2018 Bonjour , sans faire de lisp , ni tableau , créer un champs automatique qui combine deux information champs , les divisé multiplier et indiqué la valeur .le but créer un texte pente lié a une ligne .j'arrive a affiché la distance de cette ligne , l’écart de Z entre les 2 sommets , et donc je me dis que que l'on combiné ces valeurs ? non ? sans lisp ni tableau , je vous vois venir , simple ,simple toujours simple. du concret :la distance : %<\AcObjProp Object(%<\_ObjId 140702321951504>%).Length \f "%lu2%pr2">% ecart Z : %<\AcObjProp Object(%<\_ObjId 140702321951504>%).Delta \f "%lu2%pt4%pr2">% Comment récupérer les valeurs les multiplier diviser et afficher un résultat. Citer ya que se qui ne cherche pas , qui ne trouve rien
lecrabe Posté(e) le 10 février 2018 Posté(e) le 10 février 2018 Hello En theorie avec les champs et une formule de calcul avec les champs, on doit y arriver ! Mais je n'y arrive pas sur une simple ligne 2D ... Peut etre suis je trop fatigue !? Formule theorique en 2D = 100 x DeltaY / DeltaX DeltaY = %%).Delta \f "%lu6%pt2%zs8">%DeltaX = %%).Delta \f "%lu6%pt1%zs8">% **** Merci Gilles pour ta routine Lisp **** (defun c:PentePC (/ p1 p2 a) (if (and (setq p1 (getpoint "\nPremier point: ")) (setq p2 (getpoint "\nDeuxieme point: ")) (setq a (angle p1 p2)) ) (entmake (list '(0 . "TEXT") '(100 . "AcDbEntity") '(100 . "AcDbText") '(10 0. 0. 0.) (cons 40 (getvar 'textsize)) (cons 1 (strcat (rtos (abs (* 100 (/ (sin a) (cos a)))) 2 2) " %") ) (cons 50 (if (minusp (cos a)) (+ pi a) a ) ) '(72 . 1) (cons 11 (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.)) p1 p2)) '(73 . 1) ) ) ) (princ)) Bye, lecrabe Citer Autodesk Expert Elite Team
lecrabe Posté(e) le 10 février 2018 Posté(e) le 10 février 2018 Hello Mais comme je suis Vieux et Tetu, j'ai reussi ! (En fait j'ai cherche en Mode "Je me complique la Vie" ) Formule theorique en 2D = 100 x DeltaY / DeltaX Le BON DeltaY = %%).Delta \f "%lu2%pt2%pr2">%Le BON DeltaX = %%).Delta \f "%lu2%pt1%pr2">% Bye, lecrabe Citer Autodesk Expert Elite Team
Tramber Posté(e) le 10 février 2018 Posté(e) le 10 février 2018 Pour la distance, on peut mettre un facteur de conversion, c'est facile dans les options du champ.Mais on voit bien, en manuel sur les différences en X,Y ou Z ou les trois, qu'il n'est pas possible de spécifier le facteur.Donc distance oui, différence non ! Ici j'ai un [0.01], il suffit peut-être de le tricher par prog et l'injecter dans le code pour la différence. Je sais que cela se pratique.(jamais fait). %%).Length \f "%lu2%ct8[0.01]">% Citer Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 10 février 2018 Posté(e) le 10 février 2018 Salut, D'abord, il me semble qu'il faut corriger une petite erreur de raisonnement. La pente c'est le rapport entre la différence d'altitudes entre les deux points et la distance horizontale (donc pas la longueur de la ligne. Ceci dit, on peut quand même y arriver, je te propose deux formules. La première en calculant la distance horizontale avec Pythagore :Delta.Z / sqrt(Delta.X * Delta.X + Delta.Y * Delta.Y) La seconde en utilisant la trigonométrietang(asin(Delta.Z / Length)) Pour construire la formule de champ : tu lances la commande CHAMPtu choisis Objet dans le panneau de gauche et tu sélectionnes la lignetu choisis Différence (Delta) dans le panneau central et décoches tout sauf Z dans celui de droitetu copies l'expression de champ (panneau du bas)dans le panneau de gauche, tu choisis maintenant : Formuledans la case Formule: tu colles l'expression de champ (c'est le résultat qui s'affiche)tu ajoutes derrière ce champ le signe diviser : /, puis sqrt (pour racine carrée) et enfin une parenthèse ouvrante : (dans la panneau de gauche tu reviens à Objet (la ligne est toujours sélectionnée)tu coches X et décoches Z pour avoir le Delta Xtu copies l'expression de champtu retournes dan la Formuleà la suite de ce que tu as déjà entré, tu colles le nouveau champ puis * (multiplier) puis à nouveau le champ (mise au carré) et enfin un +retour dans Objet pour copier le Delta Yet enfin, de retour dans Formule, tu fais comme pour X et tu fermes la parenthèse ) L'expression de champ dans la boite de dialogue devrait ressembler à ça (FldPtr est un pointeur sur un champ):%<\AcExpr (%<\_FldPtr 729000976>%/sqrt(%<\_FldPtr 728999792>%*%<\_FldPtr 728999120>%+%<\_FldPtr 728997744>%*%<\_FldPtr 728996048>%)) \f "%lu2">%en développé c'est ça :%<\\AcExpr (%<\\AcObjProp Object(%<\\_ObjId 8796087805376>%).Delta \\f \"%lu2%pt4\">%/sqrt(%<\\AcObjProp Object(%<\\_ObjId 8796087805376>%).Delta \\f \"%lu2%pt1\">%*%<\\AcObjProp Object(%<\\_ObjId 8796087805376>%).Delta \\f \"%lu2%pt1\">%+%<\\AcObjProp Object(%<\\_ObjId 8796087805376>%).Delta \\f \"%lu2%pt2\">%*%<\\AcObjProp Object(%<\\_ObjId 8796087805376>%).Delta \\f \"%lu2%pt2\">%)) \\f \"%lu2\">% Pour l'autre formule, je te laisse faire (c'est plus rapide).L'expression dans la boite de dialogue est plus simple:%<\AcExpr (tang(asin(%<\_FldPtr 728769280>%/%<\_FldPtr 728769152>%))) \f "%lu2">%De même que l'expression développée :%<\\AcExpr (tang(asin(%<\\AcObjProp Object(%<\\_ObjId 8796087805376>%).Delta \\f \"%lu2%pt4\">%/%<\\AcObjProp Object(%<\\_ObjId 8796087805376>%).Length \\f \"%lu2\">%))) \\f \"%lu2\">% Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 10 février 2018 Posté(e) le 10 février 2018 J'avais oublié, pour une valeur en pourcentage, il suffit d'ajouter 100* au début des formules (pour multiplier le résultat par 100) ou d'affecter un facteur de conversion de 100 au champ formule (il faut faire Evaluer avant) et ont peut aussi modifier ce format (précision, suffixe). Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 10 février 2018 Posté(e) le 10 février 2018 Comme le processus est un peu fastidieux, voici un petit LISP qui crée le champ pour la ligne sélectionnée et insère un texte multiligne contenant le champ au point spécifié. Le LISP utilise les paramètre de texte courant et un formatage de champ basique.Libre à chacun de l'adapter pour ses besoins spécifiques. ;; SLOPEFIELD ;; Insère un texte multiligne contenant un champ indiquant la pente (3D) de la ligne sélectiionnée (defun c:slopefield (/ line pt doc id) (vl-load-com) (and (setq line (car (entsel "\nSélectionnez une ligne: "))) (setq line (vlax-ename->vla-object line)) (= (vla-get-ObjectName line) "AcDbLine") (setq pt (getpoint "\nSpecifiez le point d'insertion: ")) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (setq id (vla-GetObjectIdString (vla-get-Utility doc) line :vlax-false)) (vla-AddMText (vla-get-Block (vla-get-ActiveLayout doc)) (vlax-3d-point pt) 0.0 (strcat "%<\\AcExpr (100*tang(asin(%<\\AcObjProp Object(%<\\_ObjId " id ">%).Delta \\f \"%lu2%pt4\">%/%<\\AcObjProp Object(%<\\_ObjId " id ">%).Length>%))) " "\\f \"%lu2%pr2%ps[,%]\">%" ; <- formatage du texte ) ) ) (princ) ) Format de champ :%lu2 : unités décimales (CF la variablle système LUNITS)%pr2 : précision (2 décimales)%ps[,%] : [préfixe,suffixe] Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 10 février 2018 Posté(e) le 10 février 2018 Génial !J'utilise les champs depuis toujours mais je n'avais travaillé, je l'avoue, la zone de formule.Il faut dire qu'ici on a parlé en large et en travers notamment ces années où l'on avait découvert comment bien manipuler tout cela par lisp mais que je lisais aussi en travers. J'ai fait la procédure et me dis vraiment que j'ai manqué un chapitre sur ce tout petit carré de formule où l'on travaille vraiment ses données d'objet en collant d'autres formules :P Juste le sentiment d'avoir jamais fait assez gaffe à l’existence d'une bonne fonctionnalité.Merci pour le rappel. Citer Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 10 février 2018 Posté(e) le 10 février 2018 Le problème, c'est qu'il n'existe pas, à ma connaissance de documentation sur les fonctions utilisables dans les formules. On donc un peu obligé d'y aller par tâtonnement. Par exemple, pour la tangente, j'ai d'abord essayé tan (comme dans les langages que je connais) et ça ne marchait pas ; j'ai ensuite essayé tg comme on écrivait quand j'étais au collège, pas mieux ; puis tangente en toutes lettres, non plus ; finalement tang a marché, mais j'ai l'impression d'avoir eu de la chance, c'est bien la première fois que je je vois ce symbole pour la tangente d'un angle. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 Coucou Fantastique, bravo (gile)Je n'ai pas besoin de ce genre de champ ayant des outils mais ça ne m'empêche pas de bayer devant tant de virtuositéJ'ai lu la question, j'ai séché très vite (après la distance) et j'ai conclu que je ne viendrais pas répondre simplement pour dire que je n'y arrivait pasEt quand j'ai vu que (gile) avait répondu je n'ai pas retenu ma souris qui piaffait de cliquer sur le lien et elle a bien fait.Encore bravo d'apporter la preuve que la ténacité, basée sur une connaissance parfaite des arcanes logicielles, paye et est rentable. Amicalement Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
lili2006 Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 Bonjour à toutes et tous, Salut Gilles, Chez moi => Il semble qu'il ne reconnaisse pas Delta Z => Pourquoi passer par la trigo alors que l'on pourrait écrire simplement: Pente = DeltaZ/dh ? Merci d'avance, Citer Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 Salut lili2006 Il semble qu'il ne reconnaisse pas Delta Z Il semble tout simplement que ton delta Z est égal à 0.0, autrement dit que ta ligne est horizontale (parallèle au plan XY). Pourquoi passer par la trigo alors que l'on pourrait écrire simplement:CitationPente = DeltaZ/dh ?Personnellement je n'ai pas trouvé de moyen d'obtenir directement la distance horizontale (dh), mais si tu as vu un truc qui m'aurait échappé, dis nous où ça se trouve. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 Hello 1) MERCI Gilles pour la Routine VLisp ! GRRR, j'avais deja essaye tan & tangente mais pas TANG !! 2) RAPPELs : les champs dynamiques sont apparus avec la version 2005 et les Formules avec la 2006 ... 3) Je connais les champs dynamiques depuis "toujours" mais je les ai reellement utilises qu'a partir de la version 2008/2009 (Pourquoi je ne sais pas !?) 4) Lors de "mes" formations AutoCAD, j'essaye de parler des champs dynamiques (si j'ai le temps) au niveau 1 : recuperation des longueurs / surfaces ... avec un eventuel facteur d'echelle pour les conversions M / CM / MM ... 5) Et si j'ai "un poil de temps", (dans l'Espace PAPIER) je fais realiser la formule : 1000 / Echelle_Personnalisee_de_la_Fenetre_FMULT (Avec ZERO decimale) ainsi on dispose d'un champ dynamique refletant l'Echelle de Trace/Impression de la FMULT concernee ... NOTE: 1000 pour les DWG en M -- 10 pour les DWG en CM -- 1 pour les DWG en MM 6) Voir l'Image : http://dl.free.fr/odikPQ7XS 7) Question pour Gilles (ou autre Grand Maitre du Lisp/VLisp/Dotnet, etc sous AutoCAD): y a t-il une limite physique a la longueur d'un champ dynamique en terme d'expression ?? J'ai deja mis dans un champ dynamique (en formule) la somme de 2/3/4 Longueurs/Surfaces ... 8) Demande pour Gilles - SVP serait il possible d'envisager une routine LSP qui :- Selection classique de N Polylignes (Closes ou NON) (2D ou 3D) - Mais pas les 3DMesh !- Construction des N champs dynamiques permettant de recuperer la Longueur - Construction et placement de la formule de la Somme des N champs ... 9) NOTE: j'ai deja utilise les champs dynamiques sur les Volumes 3D ACIS d'AutoCAD !En essayant des proprietes NON proposees et CA MARCHE !! Ainsi on peut recuperer en Formule le VOLUME et AREA d'un Solid 3D ACIS alors que ces proprietes ne sont pas proposees par AutoCAD !!!%%).Area \f "%lu2">%%%).Volume \f "%lu2">% Et avec des Formules (sur les objets 2D ou 3D) on peut faire des JOLIES choses ... Bon Dimanche, Bye, lecrabe Citer Autodesk Expert Elite Team
Tramber Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 2) RAPPELs : les champs dynamiques sont apparus avec la version 2005 et les Formules avec la 2006 ...Je comprends mieux car je me souviens très bien, 2005, avoir fait le tour. Je comprends mieux mon ignorance maintenant.9) NOTE: j'ai deja utilise les champs dynamiques sur les Volumes 3D ACIS d'AutoCAD !En essayant des proprietes NON proposees et CA MARCHE !! Ainsi on peut recuperer en Formule le VOLUME et AREA d'un Solid 3D ACIS alors que ces proprietes ne sont pas proposees par AutoCAD !!!%%).Area \f "%lu2">%%%).Volume \f "%lu2">%Ben ça alors !!! Le problème, c'est qu'il n'existe pas, à ma connaissance de documentation sur les fonctions utilisables dans les formules. On donc un peu obligé d'y aller par tâtonnement.C'est justement ce que j'allais demander. J'ai cherché un peu... Prochain coup, j'essaie de penser à tout ça et merci à l'auteur du sujet (s'il s'en sort) d'avoir fait tirer quelques tiroirs B) Citer Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 7) Question pour Gilles (ou autre Grand Maitre du Lisp/VLisp/Dotnet, etc sous AutoCAD): y a t-il une limite physique a la longueur d'un champ dynamique en terme d'expression ?? J'ai deja mis dans un champ dynamique (en formule) la somme de 2/3/4 Longueurs/Surfaces ...Je n'en ai aucune idée. 8) Demande pour Gilles - SVP serait il possible d'envisager une routine LSP qui :- Selection classique de N Polylignes (Closes ou NON) (2D ou 3D) - Mais pas les 3DMesh !- Construction des N champs dynamiques permettant de recuperer la Longueur - Construction et placement de la formule de la Somme des N champs ... Tant qu'à utiliser un LISP, tu as TotalPerim (sur cette page) qui fait ça et même plus sans champ dynamique. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 8) Demande pour Gilles - SVP serait il possible d'envisager une routine LSP qui :- Selection classique de N Polylignes (Closes ou NON) (2D ou 3D) - Mais pas les 3DMesh !- Construction des N champs dynamiques permettant de recuperer la Longueur - Construction et placement de la formule de la Somme des N champs ... (defun c:PolyLength (/ doc expr ss) (vl-load-com) (if (and (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))) (setq pt (getpoint "\nSpécifiez le point d'insertion: ")) ) (progn (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) expr "%<\\AcExpr 0" ) (vlax-for pl (setq ss (vla-get-ActiveSelectionSet doc)) (setq expr (strcat expr "+%<\\AcObjProp Object(%<\\_ObjId " (vla-GetObjectIdString (vla-get-Utility doc) pl :vlax-false) ">%).Length>%" ) ) ) (vla-Delete ss) (setq expr (strcat expr " \\f \"%lu2%pr2%ps[longueur totale: ,m]\">%")) ; formatage du champ (terpri) (prompt expr) (vla-AddMText (vla-get-Block (vla-get-ActiveLayout doc)) (vlax-3d-point pt) 0.0 expr ) ) ) (princ) ) Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 Re, autrement dit que ta ligne est horizontale (parallèle au plan XY). Bah non, elle est comme sur l'image du post la distance horizontale (dh) Oups, désolé, l'habitude de travailler sur des Profils,..On définit cette distance par différence d'abscisse curviligne, mais ce n'est pas le cas ici,... Citer Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 lili2006, Relis bien le premier message et mes réponses. J'ai dit : "parallèle au plan XY", pas "parallèle à l'axe X". Nous parlons de la pente en 3D où le dénivelé correspond à la différence des coordonnées Z des points de départ et de fin et où la distance horizontale correspond à la longueur de la ligne projetée sur le plan XY. D'où l'utilisation de Pythagore ou de la trigonométrie. Si on parle de la représentation 2D d'une pente (coupe, profil), il suffit de calculer le rapport entre le delta Y et le delta X Un petit screencast. En LISP: (defun c:slope2d (/ line pt doc id) (vl-load-com) (and (setq line (car (entsel "\nSélectionnez une ligne: "))) (setq line (vlax-ename->vla-object line)) (= (vla-get-ObjectName line) "AcDbLine") (setq pt (getpoint "\nSpecifiez le point d'insertion: ")) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (setq id (vla-GetObjectIdString (vla-get-Utility doc) line :vlax-false)) (vla-AddMText (vla-get-Block (vla-get-ActiveLayout doc)) (vlax-3d-point pt) 0.0 (strcat "%<\\AcExpr abs(100*%<\\AcObjProp Object(%<\\_ObjId " id ">%).Delta \\f \"%pt2\">%/%<\\AcObjProp Object(%<\\_ObjId " id ">%).Delta \\f \"%pt1\">%) " "\\f \"%lu2%pr2%ps[,%]\">%" ; <- formatage du texte ) ) ) (princ) ) Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 Re, Reoups, à force de faire trop de chose on finit par ne plus rien faire,.. ça va bien en 2D aussi avec les champs, merci ! Désolé du dérangement et merci pour slope2d, Citer Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lecrabe Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 Hello Lilian Bosser un Dimanche: franchement tu es sur la Mauvaise Pente (ou Slope) ! Bye, lecrabe Citer Autodesk Expert Elite Team
lili2006 Posté(e) le 11 février 2018 Posté(e) le 11 février 2018 tu es sur la Mauvaise Pente (ou Slope) ! Hihi ! ça fait quelques mois déjà et j'ai l'impression de ne pas avancer,..(Toujours pas eu le tps de regarder tes supers docs !!, mais en raccourcit sur le bureau ,) Citer Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
BenhuR Posté(e) le 12 février 2018 Auteur Posté(e) le 12 février 2018 Bon bah merci , si moi je suis un super utilisateur , vous vous êtes des extrémistes , je reviendrais plus tard pour vous donnez un nouveau défi . Donc Problème résolu pour moi , j'ai appris le champs formule grâce au screencast . la solution : %<\AcExpr ((100*%<\_FldPtr 2444499792>%)/%<\_FldPtr 2444499856>%) \f "%lu2%pr2%ps[,%]">% en rappel de départ :la distance : %<\AcObjProp Object(%<\_ObjId 140702321951504>%).Length \f "%lu2%pr2">% ecart Z : %<\AcObjProp Object(%<\_ObjId 140702321951504>%).Delta \f "%lu2%pt4%pr2">% Sujet résolu merci les geeks j'ai plus qu'a dynamisé çà en bloc . Edit : après quelque test , arrhhhh , la distance prise par le champs est la distance réel de l'objet et pas en plan XY , donc ça fausse tout. Re-edit : je suis trop con , suffit de lire et de comprendre . Citer ya que se qui ne cherche pas , qui ne trouve rien
lecrabe Posté(e) le 12 février 2018 Posté(e) le 12 février 2018 Hello Bien content que l'on ait pu t'aider et resoudre ton probleme ! J'espere que le Derive de ton sujet (En effet c la faute des Extremistes) ne t'a pas trop "perturbe" !? Bonne Semaine, Bye, lecrabe Citer Autodesk Expert Elite Team
(gile) Posté(e) le 12 février 2018 Posté(e) le 12 février 2018 Salut, Il me semble que tu fais toujours l'erreur géométrique que j'ai noté dans mon premier message : la pente n'est pas le rapport entre le dénivelé (delta Z) et la longueur de la ligne, mais le rapport entre le dénivelé et la distance horizontale (longueur de la ligne projetée sur XY). La formule n'est donc pas : 100 * deltaZ / longueurmais, en utilisant Pythagore :100 * deltaZ / sqrt(sqr(deltaX) + sqr(deltaY)) Un screencast. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 12 février 2018 Posté(e) le 12 février 2018 Coucou Si je peux me permettre : je confirmeDécidément on n'est pas d'accord avec Lili2006 !Les pentes en % sont bel et bien ce qu'exprime (gile), je confirme à nouveauIls doivent être bien formés les jeunes du lycée !!! (hihi) Amicalement tout de même ! Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
Messages recommandés