serge77 Posté(e) le 20 octobre 2006 Posté(e) le 20 octobre 2006 Le sujet n'est pas très clair mais c'est pourtant ce à quoi je veux arriver. Salut à tous, Mon problème: Je fais des tracés de circuit de convoyeur. Jusque là pas de probleme.Une fois que j'ai tracé mon circuit avec une polylignes, je là divise en autant de point que j'ai de charges qui se promènent dessus avec la commande DIVISER.Je voudrais pouvoir numéroter ces points 1,2,3...J'espère que c'est possible et que vous allez pouvoir m'aider.Merci d'avance
(gile) Posté(e) le 20 octobre 2006 Posté(e) le 20 octobre 2006 Salut, Peut-être ici ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
serge77 Posté(e) le 20 octobre 2006 Auteur Posté(e) le 20 octobre 2006 Merci gile Ca a l'air d'etre effectivement ce que je recherche mais pas moyen de le faire fonctionnerMessage :Ce n'est pas un objet curviligne valable pour cette fonction! Et vu que je ne connais pas le lisp, je ne suis pas sorti de l'auberge.
(gile) Posté(e) le 20 octobre 2006 Posté(e) le 20 octobre 2006 As tu supprimé les espaces après les signes Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 20 octobre 2006 Posté(e) le 20 octobre 2006 Sinon, tu peux essayer ça (la hauteur du texte est la hauteur de texte courante à l'échelle des cotes courante) : (defun c:incdiv (/ ent obj long dist nb n AcDoc Space ins txt txtlst) (vl-load-com) (while (not (setq ent (car (entsel "\nSélectionnez l'objet à diviser: "))) ) ) (setq obj (vlax-ename->vla-object ent)) (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getEndParam (list obj)) ) (prompt "\nL'objet ne peut pas être divisé.*Incorrect*") (progn (initget 7) (setq nb (getint "\nEntrez le nombre de segments: ") long (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) dist (/ long nb) n 0 AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-StartUndoMark AcDoc) (repeat nb (setq ins (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n)))) ) (vla-addPoint Space (vlax-3d-point ins)) (setq txt (vla-addText space (itoa n) (vlax-3d-point (polar ins (/ pi 4) (* (getvar "TEXTSIZE") (getvar "DIMSCALE") 0.2) ) ) (* (getvar "TEXTSIZE") (getvar "DIMSCALE")) ) ) (setq txtlst (cons txt txtlst)) [surligneur];;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Aligne le texte sur la polyligne (vla-Rotate txt (vlax-3d-point ins) (angle '(0 0 0) (vlax-curve-getFirstDeriv obj (vlax-curve-getParamAtPoint obj ins) ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[/surligneur] ) (if (= (vla-get-closed obj) :vlax-true) (vla-put-TextString (car txtlst) "0") ) (initget "Oui Non") (if (= "Oui" (getkword "\nInverser le sens ? : ")) (foreach tx txtlst (vla-put-TextString tx (itoa (rem (- nb (atoi (vla-get-TextString tx))) nb)) ) ) ) (if (and (= (vla-get-closed obj) :vlax-true) (setq dep (car (entsel "\nSélectionnez un chiffre pour le nouveau de départ (ou ENTER): " ) ) ) (member (setq txt (vlax-ename->vla-object dep)) txtlst) ) (progn (setq dif (- nb (atoi (vla-get-TextString txt)))) (foreach tx txtlst (vla-put-TextString tx (itoa (rem (+ dif (atoi (vla-get-TextString tx))) nb)) ) ) ) ) (vla-EndUndoMark AcDoc) ) ) (princ) ) si tu préfères que le texte ne soit pas orienté le long de l'objet, supprime la partie [surligneur]surlignée[/surligneur] [Edité le 20/10/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
serge77 Posté(e) le 20 octobre 2006 Auteur Posté(e) le 20 octobre 2006 Merci gile ton lisp marche nickel. Et en enlevant les espaces, le premier aussi. Juste un point: sur une polyligne fermée comment choisir le point de départ et le sens de rotationde l'incrémentation. Dernière chose, aquoi correspond la valeur LUPREC dans le premier lisp [Edité le 20/10/2006 par serge77] [Edité le 20/10/2006 par serge77]
(gile) Posté(e) le 20 octobre 2006 Posté(e) le 20 octobre 2006 Juste un point: sur une polyligne fermée comment choisir le point de départ et le sens de rotationde l'incrémentation. Le point de départ est le point de départ de la polyligne quand elle a été créée, on pourrait le modifier, mais ça n'est pas si simple.Pour le sens de l'incrémentation, je pourrais modifier le LISP pour que l'incrémentation démarre du point le plus proche du point de sélection (si j'ai le temps) en attendant tu peux inverser l'ordre des sommets de la polyligne avec r_pline. Dernière chose, aquoi correspond la valeur LUPREC dans le premier lisp La variable système LUPREC stocke le nombre décimales affichées pour les unités de longueur. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
serge77 Posté(e) le 20 octobre 2006 Auteur Posté(e) le 20 octobre 2006 encore merci, tout est ok pour inverser l'ordre d'incrémentation.Reste le point de départ.Mais c'est déjà très bien.
(gile) Posté(e) le 20 octobre 2006 Posté(e) le 20 octobre 2006 Je modifie le code ci-dessus, il est proposé à l'utilisateur d'inverser l'ordre de l'incrémentation, puis, pour les polylignes fermées, de sélectionner un chiffre pour un nouveau point de départ. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
serge77 Posté(e) le 23 octobre 2006 Auteur Posté(e) le 23 octobre 2006 Bonjour gile, Je te remercie des efforts que tu fais, ca devient vraiment bien sauf le premier point qui ne change pas et la numérotation démarre à 0. [Edité le 23/10/2006 par serge77]
(gile) Posté(e) le 23 octobre 2006 Posté(e) le 23 octobre 2006 Peux tu préciser, ta demande ? Le point de départ (ou de fin si la poly est fermée) est effectivement le point 0 (normal, non ?). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
serge77 Posté(e) le 24 octobre 2006 Auteur Posté(e) le 24 octobre 2006 Le premier point, j'aurai préféré qu'il soit à 1 mais ce n'est pas grave par contre quand il me demande "spécifiez un chiffre pour le nouveau départ", il ne se passe rien.
(gile) Posté(e) le 24 octobre 2006 Posté(e) le 24 octobre 2006 salut, l'invite : "spécifiez un chiffre pour le nouveau départ" est mal formulée, j'aurais dû écrire : "Sélectionnez un chiffre pour le nouveau départ". Il faut sélectionner à l'écran le chiffre qui deviendra le nouveau N° 0. Je pourrais mettre le départ à 1, mais celà suppose de traiter différemmment les polylignes ouvertes et fermées. J'essaye de voir ça (si j'ai le temps). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
serge77 Posté(e) le 24 octobre 2006 Auteur Posté(e) le 24 octobre 2006 Salut, Effectivement en selectionnant à l'écran ca marche bien.Merci
(gile) Posté(e) le 24 octobre 2006 Posté(e) le 24 octobre 2006 Re, Voici une nouvelle version, avec le point de départ en N°1 et le point de fin des polylignes ouvertes en N°n+1 pour n divisions. (defun c:incdiv (/ ent obj long dist nb n AcDoc Space ins txt txtlst) (vl-load-com) (while (not (setq ent (car (entsel "\nSélectionnez l'objet à diviser: "))) ) ) (setq obj (vlax-ename->vla-object ent)) (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getEndParam (list obj)) ) (prompt "\nL'objet ne peut pas être divisé.*Incorrect*") (progn (initget 7) (setq nb (getint "\nEntrez le nombre de segments: ") long (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) dist (/ long nb) n -1 AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-StartUndoMark AcDoc) (repeat (if (= (vla-get-closed obj) :vlax-true) nb (1+ nb) ) (setq ins (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n)))) ) (vla-addPoint Space (vlax-3d-point ins)) (setq txt (vla-addText space (itoa (1+ n)) (vlax-3d-point (polar ins (/ pi 4) (* (getvar "TEXTSIZE") (getvar "DIMSCALE") 0.2) ) ) (* (getvar "TEXTSIZE") (getvar "DIMSCALE")) ) ) (setq txtlst (cons txt txtlst)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;; ;;; Aligne le texte sur la polyligne (vla-Rotate txt (vlax-3d-point ins) (angle '(0 0 0) (vlax-curve-getFirstDeriv obj (vlax-curve-getParamAtPoint obj ins) ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ) (initget "Oui Non") (if (= "Oui" (getkword "\nInverser le sens ? : ")) (foreach tx txtlst (vla-put-TextString tx (if (= (vla-get-closed obj) :vlax-true) (itoa (1+ (rem (- nb (atoi (vla-get-TextString tx)) -1) nb)) ) (itoa (- nb (atoi (vla-get-TextString tx)) -2)) ) ) ) ) (if (and (= (vla-get-closed obj) :vlax-true) (setq dep (car (entsel "\nSélectionnez un chiffre pour le nouveau de départ (ou ENTER): " ) ) ) (member (setq txt (vlax-ename->vla-object dep)) txtlst) ) (progn (setq dif (- nb (atoi (vla-get-TextString txt)))) (foreach tx txtlst (vla-put-TextString tx (itoa (1+ (rem (+ dif (atoi (vla-get-TextString tx))) nb)) ) ) ) ) ) (vla-EndUndoMark AcDoc) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
serge77 Posté(e) le 24 octobre 2006 Auteur Posté(e) le 24 octobre 2006 Félicitations et merci beaucoup.Tout fonctionne très bien.Je crois que je vais demander une formation Lisp.
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