Raph_38 Posté(e) le 1 juillet 2016 Posté(e) le 1 juillet 2016 Bonjour à tous, n'ayant pas le temps et surtout les compétences nécessaires afin de réaliser le lisp dont je décris la fonction plus bas, je me permet de demander si un pro du lisp pourrais me coder ce dont j'ai besoin ;) Situation : Je réalise actuellement un plan de réseaux d'évacuations d'eau usée enterrés sur un gros bâtiment.Pour info, le réseau est réalisé en polyligne. - J'utilise un lisp "zfe" (et j'en profite au passage pour remercier son auteur "joch04" d'avoir partagé le fruit de son travail) qui calcule les fils d'eau du réseau à chaque sommet de la polyligne (après avoir renseigné le fil d'eau de départ, et la pente du réseau)- Ce lisp ajoute (sur un calque "ZFE" qu'il crée ) un texte (pas un Mtext) contenant le fil d'eau calculé. Le point d'insertion "Bas Gauche" de ce texte est situé sur le sommet calculé de la polyligne. Ma demande : - Serait-il possible d'avoir un lisp qui, quand on cliquerait sur un de ces textes, transformerait ce dernier en ligne de repère (en utilisant le style de ligne de repère "courant" du plan)- La pointe de la flèche étant positionnée au point d'insertion du texte sélectionné.- le petit plus (mais pas forcément nécessaire) serait que le lisp demande où positionner le texte de la ligne de repère en cliquant sur un point du dessin Voilà, j'espère que quelqu'un aura la gentillesse, le temps et la motivation pour réaliser ce lisp qui me soulagerait d'une tâche relativement fastidieuse. Merci ;) Raph. Celui qui pose une question est bête 5 minutes, celui qui n'en pose pas l'est toute sa vie !
Raph_38 Posté(e) le 4 juillet 2016 Auteur Posté(e) le 4 juillet 2016 Personne ? Raph. Celui qui pose une question est bête 5 minutes, celui qui n'en pose pas l'est toute sa vie !
(gile) Posté(e) le 4 juillet 2016 Posté(e) le 4 juillet 2016 Salut, (defun c:text2leader (/ ent elst txt p0 p1) (and (setq ent (car (entsel "\nSélectionnez le texte: "))) (setq elst (entget ent)) (= (cdr (assoc 0 elst)) "TEXT") (setq txt (cdr (assoc 1 elst))) (setq p0 (trans (cdr (assoc 10 elst)) ent 1)) (setq p1 (getpoint p0 "\nEntrez le point suivant: ")) (command "_.leader" p0 p1 "" txt "" "_erase" ent "") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Raph_38 Posté(e) le 4 juillet 2016 Auteur Posté(e) le 4 juillet 2016 Je te remercie beaucoup (gile) c'est exactement ce que je recherchais je vais en profiter pour étudier ça afin de comprendre comment tu as procédé Nota : J'ai changé "_.leader" en "_.mleader" ce qui correspond plus à mes attentes. Une question : pourquoi avoir mis une fonction AND au début ? Raph. Celui qui pose une question est bête 5 minutes, celui qui n'en pose pas l'est toute sa vie !
Patrick_35 Posté(e) le 4 juillet 2016 Posté(e) le 4 juillet 2016 Salut La fonction And (tant que ...) permet de tester si toutes les conditions sont remplies afin de lancer la commande. La lecture du lispSi tu fais une sélection (non nil)Je récupère les codes dxf dans un setq, la valeur est forcement non nilSi c'est un texte (valeur vraie)Je définies des variables, les valeurs sont forcement non nilAlors je fais ma commande En résumé (and (non nil) (non nil) T (non nil) (non nil) (non nil) Ma_commande) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Raph_38 Posté(e) le 4 juillet 2016 Auteur Posté(e) le 4 juillet 2016 Patrick tu ma tuer Va vraiment falloir que je potasse le cours lisp de rebcao qui dors chez moi depuis pas mal de temps. Raph. Celui qui pose une question est bête 5 minutes, celui qui n'en pose pas l'est toute sa vie !
Patrick_35 Posté(e) le 4 juillet 2016 Posté(e) le 4 juillet 2016 Je vais essayer d'être plus clair Dès que le AND rencontre une valeur nil dans les conditions, il s'arrête de suite. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 4 juillet 2016 Posté(e) le 4 juillet 2016 Avec mleader, je modifierais un peu la commande pour paramétrer le nombre de points à 2 dans les options. Si la valeur courante est différente la commande plantera. L'utilisation du (and ...) permet juste un code plus concis mais pas forcément plus compréhensible. C'est un peu dévoyer la finalité d'opérateur logique du and (qui retourne T ou nil) pour n'utiliser que "l'évaluation de court-circuit" (l'évaluation s'arrête et retourne nil dès qu'une expression retourne nil). Plus conventionnellement, on écrirait : (defun c:text2mleader (/ ent elst txt p0 p1) (if (setq ent (car (entsel "\nSélectionnez le texte: "))) (progn (setq elst (entget ent)) (if (= (cdr (assoc 0 elst)) "TEXT") (progn (setq txt (cdr (assoc 1 elst))) (setq p0 (trans (cdr (assoc 10 elst)) ent 1)) (setq p1 (getpoint p0 "\nEntrez le point suivant: ")) (command "_.mleader" "_Options" "_Maxpoints" 2 "_eXit" p0 p1 txt "_erase" ent "") ) (prompt "\nL'objet sélectionné n'est pas un texte.") ) ) (prompt "\nAucun object sélectionné.") ) (princ) ) Mais les opérateurs logiques permettent aussi d'alerter l'utilisateur en cas de saisie incorrecte. Comme and, or retourne T dès qu'une des expressions qui lui sont passées retourne une valeur non nil ou nil si elles sont toutes nil.(defun c:text2mleader (/ ent elst txt p0 p1) (and (or (setq ent (car (entsel "\nSélectionnez le texte: "))) (prompt "\nAucun objet sélectionné.") ) (setq elst (entget ent)) (or (= (cdr (assoc 0 elst)) "TEXT") (prompt "\nL'objet sélectionné n'est pas un texte.") ) (setq txt (cdr (assoc 1 elst))) (setq p0 (trans (cdr (assoc 10 elst)) ent 1)) (setq p1 (getpoint p0 "\nEntrez le point suivant: ")) (command "_.mleader" "_Options" "_Maxpoints" 2 "_eXit" p0 p1 txt "_erase" ent "") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 4 juillet 2016 Posté(e) le 4 juillet 2016 Hello Gilles MAGNIFIQUE ! Merci, Bye, lecrabe Autodesk Expert Elite Team
Raph_38 Posté(e) le 4 juillet 2016 Auteur Posté(e) le 4 juillet 2016 tout simplement génial ... merci encore les gars ;) Raph. Celui qui pose une question est bête 5 minutes, celui qui n'en pose pas l'est toute sa vie !
sylarr Posté(e) le 6 septembre 2023 Posté(e) le 6 septembre 2023 Je ranime ce sujet, est-ce que vous savez si c'est possible d'avoir la même avec des multitexts ?
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