bono05 Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Bonjour à tous, Je doit souvent dessiner des longueurs de cable sur plan, et bien entendu il y a plusieurs longueurs différentes.Actuellement j'utilise donc plusieurs types de ligne avec les différentes longueurs (1m,2m,3m,ect...). Voici ma demande: Serait-il possible que si je dessine un spline, que celle ci se modifie automatiquement en fonction de sa longueur (en définissant l'echelle du plan bien entendu)?Bref je voudrai facilement pouvoir dessiner une spline d'un point A à un point B, et qu'il m'indique automatiquement la longueur au mètre près!Je vous laisse en lien un exemple de ce dont je parle... http://cjoint.com/?dfj721LldChttp://cjoint.com/?dfj721LldC Merci!!!!!!!!! [Edité le 5/3/2010 par bono05]
Tramber Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 J'allais simplement conseiller un CHAMP mais je m'aperçois avec effroi que le spline a un champ AIRE mais pas un champ LONGUEUR. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
lecrabe Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Hello A mon avis on ne va quand meme pas generer des types de ligne complexes pour chaque longueur de cable ! Donc pour moi la solution est la suivante ... Un programme Lisp/VLisp (qui permet la selection de spline, polyligne, ligne, arc) par la methode de selection classique d'AutoCAD Question 1 : Nombre de decimales (0 par defaut)Question 2 : Suffixe eventuel (m par defaut)Question 3 : Espacement entre les textes (etiquettes)Question 4 : Couleur de masquage pour le MText (Defaut = 2 = Jaune) Le programme genere des MTEXT avec le texte "voulu" et un masque d'arriere plan de la couleur voulu sur tous les objets selectionnes et concernes et ce sur la calque courant ! Ainsi les splines, polylignes, etc ne sont pas coupees mais simplement recouvertes par les MTEXT et leur rectangle de masquage ... Par contre il faudra analyser la courbure des splines : bonjour la complexite !- Ne pourrais tu pas utiliser plutot des polylignes classiques splinees, cela pourrait s'averer plus simple pour le developpement !? Mais bon, je ne suis pas developpeur ! Le Decapode "fort interesse par ce programme futur" Autodesk Expert Elite Team
Tramber Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 (defun c:splm( / Space enti tex) (vl-load-com) (setq Space(vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))) (setq enti(vlax-ename->vla-object(car(entsel "\nSélectionnez une spline")))) (if enti (progn (while(not(=(vla-get-objectname enti)"AcDbSpline")) (setq enti(vlax-ename->vla-object(car(entsel "\nCet objet n'est pas une spline recommencez :"))))) (setq long(vlax-curve-getDistAtParam enti(vlax-curve-getEndParam enti))) (setq tex (vla-addMtext Space (vlax-3d-point(getpoint "\nPoint D'insertion")) 0.0 (strcat(rtos(vlax-curve-getDistAtParam enti(vlax-curve-getEndParam spli))2 0)"m"))) (vla-put-BackgroundFill tex :vlax-true)) ) ) Truc tout bête. Tiens, c'est marrant, chez moi la couleur par défaut du masquage est rouge ! (Autodesk Mechanical Desktop 2010) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
bono05 Posté(e) le 5 mars 2010 Auteur Posté(e) le 5 mars 2010 @lecrabePour ma part si c'est plus simple d'utiliser des polylignes splinées(?), je veux bien faire le test. @TramberLa commande de ce lisp n'est pas splm? Car cela ne fonctionne pas avec... Merci de vos solutions, cela devient déjà très intéressant!!!! :D
bonuscad Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 La commande de ce lisp n'est pas splm? Car cela ne fonctionne pas avec... Une petite erreur de variable dans le code.Remplace (vlax-curve-getEndParam spli) par (vlax-curve-getEndParam enti) et cela fonctionnera. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Tramber Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 J'aime bien quand tout le monde suit, reste attentif et ne bavarde pas. Bonus, 1 bon point ! (J'ai même pas testé mon gribouilli !) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
bono05 Posté(e) le 5 mars 2010 Auteur Posté(e) le 5 mars 2010 J'ai testé et maintenant c'est ok... Maintenant je constate des solutions en selection de splines, mais aucune en créatiion de splines?N'est-ce peut-être tout simplement pas possible alors, vous en pensez quoi? Enfin si seule la selection serait possible , je serai plutôt attiré par l'idée de Lecrabe...désolé Tramber. ;)
Patrick_35 Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Salut J'ai fait un lisp qui donne un total sur les objets sélectionés @+ [Edité le 5/3/2010 par Patrick_35] Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Enfin si seule la selection serait possible , je serai plutôt attiré par l'idée de Lecrabe...désolé Tramber. ;) C'est la même puisque j'ai écrit en programme ce qu'il expirmait, cher ami. mais aucune en créatiion de splines Esay is the word, smile is the action ! (defun c:splm( / Space enti tex) (vl-load-com) (setq Space(vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))) (command "_.spline"(while (not (zerop (getvar "cmdactive")))(command pause))) (setq enti(vlax-ename->vla-object(entlast))) (if enti (progn (while(not(=(vla-get-objectname enti)"AcDbSpline")) (setq enti(vlax-ename->vla-object(car(entsel "\nCet objet n'est pas une spline recommencez :"))))) (setq long(vlax-curve-getDistAtParam enti(vlax-curve-getEndParam enti))) (setq tex (vla-addMtext Space (vlax-3d-point(getpoint "\nPoint D'insertion")) 0.0 (strcat(rtos(vlax-curve-getDistAtParam enti(vlax-curve-getEndParam enti))2 0)"m"))) (vla-put-BackgroundFill tex :vlax-true)) ) ) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Salut, En retard mais un peu plus abouti (options nombre de décimales, suffixe, espacement moyen et couleur de fond paramétrables et conservées dans le dessin).Deux commandes : SPLM pour dessiner des splines 'à la volée' et SSPLM pour traiter un jeu de sélection Nouvelle version : correction d'un bug avec le choix de la couleur, ajout d'une option "Réserve" Nouvelle version : ajout d'une option "conVersion" ;; Paramètres conservés dans le dessin (defun splmParams (flag / prec suf spc col rsv cvr opt) (setq prec (cond ((vlax-ldata-get "splmParams" "prec")) ((vlax-ldata-put "splmParams" "prec" 0)) ) suf (cond ((vlax-ldata-get "splmParams" "suf")) ((vlax-ldata-put "splmParams" "suf" "m")) ) spc (cond ((vlax-ldata-get "splmParams" "spc")) ((vlax-ldata-put "splmParams" "spc" 2.)) ) col (cond ((vlax-ldata-get "splmParams" "col")) ((vlax-ldata-put "splmParams" "col" 2)) ) rsv (cond ((vlax-ldata-get "splmParams" "rsv")) ((vlax-ldata-put "splmParams" "rsv" 0.)) ) cvr (cond ((vlax-ldata-get "splmParams" "cvr")) ((vlax-ldata-put "splmParams" "cvr" 1.)) ) ) (princ (strcat "\nParamètres courant Décimales: " (itoa prec) " Suffixe: \"" suf "\" Espacement: " (rtos spc) " Couleur: " (itoa col) " Réserve: " (rtos rsv) " Conversion: " (rtos cvr) ) ) (if flag (while (or (initget "Couleur Décimales Espace Suffixe Réserve conVersion" ) (setq opt (getkword "\nSpécifiez une option [Couleur/Décimales/Espace/Suffixe/Réserve/conVersion] : " ) ) ) (cond ((= opt "Couleur") (if (setq col (acad_colordlg col nil)) (vlax-ldata-put "splmParams" "col" col) (setq col (vlax-ldata-get "splmParams" "col")) ) ) ((= opt "Décimales") (if (setq prec (getint (strcat "\nNombre de décimales : ") ) ) (vlax-ldata-put "splmParams" "prec" prec) (setq prec (vlax-ldata-get "splmParams" "prec")) ) ) ((= opt "Espace") (if (setq spc (getdist (strcat "\nEspacement : ")) ) (vlax-ldata-put "splmParams" "spc" spc) (setq spc (vlax-ldata-get "splmParams" "spc")) ) ) ((= opt "Suffixe") (if (setq suf (getstring (strcat "\nSuffixe : "))) (vlax-ldata-put "splmParams" "suf" suf) (setq suf (vlax-ldata-get "splmParams" "suf")) ) ) ((= opt "Réserve") (if (setq rsv (getdist (strcat "\nRéserve : ")) ) (vlax-ldata-put "splmParams" "rsv" rsv) (setq rsv (vlax-ldata-get "splmParams" "rsv")) ) ) ((= opt "conVersion") (initget 2) (if (setq cvr (getdist (strcat "\nConversion : ")) ) (vlax-ldata-put "splmParams" "cvr" cvr) (setq crv (vlax-ldata-get "splmParams" "cvr")) ) ) ) ) ) (list prec suf spc col rsv cvr) ) ;; Ajout des Mtextes sur l'entité (defun splmAddMtext (ent params / len txt inc div dist pt ang) (vl-load-com) (setq len (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)) txt (strcat (rtos (/ (+ len (nth 4 params)) (nth 5 params)) 2 (car params) ) (cadr params) ) inc (if (zerop (setq div (atof (rtos (/ len (caddr params)) 2 0)))) len (/ len div) ) dist (/ inc 2.) pt (vlax-curve-getPointAtDist ent dist) ) (while (and (setq pt (vlax-curve-getPointAtDist ent dist)) ( ) (setq ang (angle '(0. 0. 0.) (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent pt) ) ) ) (and (minusp (cos ang)) (setq ang (+ ang pi))) (entmake (list '(0 . "MTEXT") '(100 . "AcDbEntity") '(100 . "AcDbMText") (cons 10 pt) (cons 40 (getvar 'textsize)) '(71 . 5) (cons 1 txt) (cons 7 (getvar 'textstyle)) (cons 50 ang) '(90 . 1) (cons 63 (cadddr params)) ) ) (setq dist (+ dist inc)) ) ) ;; Commande SPLM ;; Ajout de mtextes sur une spline dessinée à la volée (defun c:splm (/ params pt) (setq params (splmParams nil)) (while (not (or (initget "Paramètres") (vl-consp (setq pt (getpoint "\nSpécifiez le premier point ou [Paramètres] : " ) ) ) ) ) (setq params (splmParams T)) ) (vl-cmdf "_.spline" pt) (while ( (vl-cmdf pause) ) (splmAddMtext (entlast) params) (princ) ) ;; Commande PLM ;; Ajout de mtextes sur une spline dessinée à la volée (defun c:plm (/ params pt) (setq params (splmParams nil)) (while (not (or (initget "Paramètres") (vl-consp (setq pt (getpoint "\nSpécifiez le premier point ou [Paramètres] : " ) ) ) ) ) (setq params (splmParams T)) ) (vl-cmdf "_.pline" pt) (while ( (vl-cmdf pause) ) (splmAddMtext (entlast) params) (princ) ) ;; Commande SSPLM ;; Ajout de mtextes sur les objets sélectionnés (defun c:ssplm (/ params n ss) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (setq params (splmParams T) n -1 ) (if (setq ss (ssget '((-4 . " (0 . "ARC,CERCLE,ELLIPSE,LINE,LWPOLYLINE,SPLINE") (-4 . " (0 . "POLYLINE") (-4 . " (-4 . "&") (70 . 112) (-4 . "not>") (-4 . "and>") (-4 . "or>") ) ) ) (while (setq ent (ssname ss (setq n (1+ n)))) (splmAddMtext ent params) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Hello Gilles Sorry mais sous MAP 2006 & MAP 2008, j'ai l'erreur : Commande: splm Paramètres courant Décimales: 0 Suffixe: "m" Espacement: 2 Couleur: 2Spécifiez le premier point ou [Paramètres] : _.splineSpécifiez le premier point ou [OBjet]:Spécifiez le point suivant: Spécifiez le point suivant ou [Clore/Tolérance] :Spécifiez le point suivant ou [Clore/Tolérance] :Spécifiez le point suivant ou [Clore/Tolérance] :Spécifiez le point suivant ou [Clore/Tolérance] :Spécifiez le point suivant ou [Clore/Tolérance] : Spécifiez la tangente de départ: Spécifiez la tangente de fin: Commande: ; erreur: groupe DXF incorrect: (63) SVP pourrais tu gerer AUSSI nos cheres Polylignes ? Merci d'avance, Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Oupss !... Il y avait effectivement un petit oubli de ma part (le code 63 est celui de la couleur pour le fond) J'ai ajouté la commande PLM pour dessiner des polylignes 'à la volée'. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 Hello Super ca fonctionne BIEN ! :) Mais SVP je sollicite une fonction PLMS pour traiter N Polylignes deja existantes !! comme je peux traiter N Splines existantes avec SSPLM Encore Merci, Le Decapode "fretillant avec ses etiquettes de longueur" Autodesk Expert Elite Team
(gile) Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 SSPLM fonctionne avec tous les objets curvilignes exceptées le droites et demi droites... ;) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 5 mars 2010 Posté(e) le 5 mars 2010 ReHello Je suis une TRUFFE, je viens en effet de m'apercevoir que SSPLM fonctionne avec tout ou presque ! :cool: Honte au vieux Decapode, Mille Mercis, Le Decapode Autodesk Expert Elite Team
bono05 Posté(e) le 8 mars 2010 Auteur Posté(e) le 8 mars 2010 Bonjour à tous, Heureux de vous retrouver en forme en ce lundi matin!Je constate que vous n'avez pas chômé sur mon problème... :D Et je vous en remercie. Après un petit test j'aurai les remarques suivantes: -Comment , a l'avance, pouvoir choisir la taille du texte? Car je l'ai essayé sur un plan et l'échelle du texte est beaucoup trop grande?!Dans mon cas ce sont souvent des petites longueurs et donc avec le problème de grandeur du texte cela ne fonctionne pas?Et en bonus une petite option ou il rajouterai 1 ou 2 m automatiquement (ou non) à la taille du spline? Dans mon cas un spline represente un cable et le trait comprend une reserve de 1 ou 2M en fonction de sa taille. Enfin quand je change la couleur dans l'option...elle reste jaune! Alors je la change dans le lisp... Voilà...merci!!!!! [Edité le 8/3/2010 par bono05]
(gile) Posté(e) le 8 mars 2010 Posté(e) le 8 mars 2010 Salut, -Comment , a l'avance, pouvoir choisir la taille du texte? Car je l'ai essayé sur un plan et l'échelle du texte est beaucoup trop grande?! La taille du texte est la taille courante (TEXTSIZE) Et en bonus une petite option ou il rajouterai 1 ou 2 m automatiquement (ou non) à la taille du spline? Option rajoutée dans la nouvelle version Enfin quand je change la couleur dans l'option...elle reste jaune! Réparé dans la nouvelle version Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bono05 Posté(e) le 8 mars 2010 Auteur Posté(e) le 8 mars 2010 Cher Gile, Retest....et questions: La spline devrait faire 6M...et elle en fait 600m! J'ai changé les unités mais cela ne modifie rien? Ai-je raté quelque chose? Peux-tu faire en sorte que les mtext suivent la spline si on modifie sa longeur? autant en mesure que en alignement (texte sur la spline?) Encore merci!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(gile) Posté(e) le 8 mars 2010 Posté(e) le 8 mars 2010 La spline devrait faire 6M...et elle en fait 600m! J'ai changé les unités mais cela ne modifie rien? Ai-je raté quelque chose? La valeur affichée dans le mtexte est la longueur de la spline en unités de dessin.Ce que tu as raté, c'est de préciser : "je travaille en centimètres et je voudrais afficher le résultat en mètres" ce qui n'est pas forcément évident (je travaille le plus souvent en millimètres et lecrabe en mètres par exemple).Je vais voir si j'ai le temps de rajouter une option... Peux-tu faire en sorte que les mtext suivent la spline si on modifie sa longeur? autant en mesure que en alignement (texte sur la spline?) Ce que tu demandes là est faisable, mais pas en 5mn. Ça nécessite l'utilisation de réacteurs et devient du coup plus complexe. Je crains de ne pas pouvoir te faire ça. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bono05 Posté(e) le 8 mars 2010 Auteur Posté(e) le 8 mars 2010 Gile, Je resterai donc encre attentif à la première demande...concernant la deuxième je comprend tout à fait que cela peut être compliqué. Sache que je te remercie pour le travail accompli et suis déjà très heureux d'avoir les options présentes. Merci!!!!!!!!!!!!!!!!! :)
(gile) Posté(e) le 8 mars 2010 Posté(e) le 8 mars 2010 voilà, j'ai rajouté une option "conVersion" : entrer 100 pour afficher des mètres quand l'unité de dessin est le centimètre. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bono05 Posté(e) le 8 mars 2010 Auteur Posté(e) le 8 mars 2010 C'est super gile....puis-je encore te demander un truc? Le fait est que l'on utilise uniquement les longueurs pairs...Donc je ne devrai pas avoir de 7m (par ex), mais 8m alors... :exclam: Je comprendrai si cela ne serai pas facilement réalisable. Et enfin...est-ce possible qu'il n'affiche qu'une seule fois sa longueur au milieu sur le cable (donc pas comme l'option "espace"), l'idée est par après de faire un décompte avec toutes les longueurs en reprenant ce texte. Mais comme il est parfois marqué plusieurs fois cela ne va pas. Encore et encore merci !!!!!!!
lecrabe Posté(e) le 8 mars 2010 Posté(e) le 8 mars 2010 Hello En l'etat actuel, la routine de notre "cher et indispensable" Gilles fonctionne tres bien sous MAP 2006 et sous MAP 2010 ! :) Elle me convient parfaitement :D Encore Merci a Gilles pour son "devouement", Le Decapode Autodesk Expert Elite Team
bono05 Posté(e) le 9 mars 2010 Auteur Posté(e) le 9 mars 2010 Le fait est que l'on utilise uniquement les longueurs pairs...Donc je ne devrai pas avoir de 7m (par ex), mais 8m alors...Je comprendrai si cela ne serai pas facilement réalisable. Après discussion, ce n'est pas vraiment nécessaire....et tant mieux!! Et enfin...est-ce possible qu'il n'affiche qu'une seule fois sa longueur au milieu sur le cable (donc pas comme l'option "espace"), l'idée est par après de faire un décompte avec toutes les longueurs en reprenant ce texte. Mais comme il est parfois marqué plusieurs fois cela ne va pas. J'ai constaté que si je faisait un espace de texte très important...il ne s'affiche qu'une seule fois au milieux! Donc problème également réglé pour moi! :D Maintenant concernant le block de couleur autour du texte...serait-il possible de le rendre transparent? un peu comme la commande (express tools) textmask? Milles merci !!!!!!!! Ps: maintenant je constate que mon idée de départ est très apprécié par d'autres...et tant mieux! [Edité le 9/3/2010 par bono05]
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