FRAXA Posté(e) le 31 juillet 2007 Posté(e) le 31 juillet 2007 Bonjour à tous!Est-il possible de créer un polyligne avec plusieurs poignées déplacables mais qui garde au final, une longueur constante.Le but est de simuler le déplacement d'une lance à incendie dans un atelier.Merci d'avance pour vos réponses. HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800
Tramber Posté(e) le 4 août 2007 Posté(e) le 4 août 2007 Pour étirer en même temps plusieurs points d'une polyligne, il faut utiliser MAJ en cliquant dans les poignées. Après, l'étirement est groupé. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
lecrabe Posté(e) le 4 août 2007 Posté(e) le 4 août 2007 Bonjour Tramber et MERCI :) Et encore un truc que je connaissais pas avec AutoCAD !!! :o Merci pour le SHIFT et sélection de multiples vertex pour étirer la polyligne ! Cela existe depuis quand (si tu te souviens) ? Le Decapode "ignare" Autodesk Expert Elite Team
FRAXA Posté(e) le 6 août 2007 Auteur Posté(e) le 6 août 2007 Très intèressant Tramber et encore merci pour cette astuce, mais je cherche autre chose.Comme je le disais sur mon précédent post, le but c'est de similuer le déplacement d'une lance à incendie dans un atelier.Ce que je voudrais c'est une polyligne avec 6 poignées. La première fixe, mais les 5 autres mobiles et une longueur totale toujours égale à 20m. HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800
Tramber Posté(e) le 7 août 2007 Posté(e) le 7 août 2007 Cela existe depuis quand (si tu te souviens) ? Depuis que je le sais au moins, pas mal de temps ! Je l'ai appris soit dans CADxp soit dans un bouquin de Serge (Camiré). Il y a même une fonctionnalité de division (relire l'aide car je ne me souviens plus exactement). Fraxa, ta lance sera réalisable avec les blocs dynamiques à partir de la V2006. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
FRAXA Posté(e) le 8 août 2007 Auteur Posté(e) le 8 août 2007 Fraxa, ta lance sera réalisable avec les blocs dynamiques à partir de la V2006Je m'en doutais, vivement que je passe à une version supérieure.En tout cas ce post m'aura au moins permis d'apprendre une nouvelle fonctionnalité.Merci Tramber HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800
(gile) Posté(e) le 8 août 2007 Posté(e) le 8 août 2007 Salut, J'ai essayé de faire quelque chose en LISP, en l'état, ça ne fonctionne qu'en 2d (plan XY du SCU parallèle au SCG) et avec des polylignes sans arcs. L'utilisateur sélectionne la polyligne puis sélectionne un sommet pour l'étirer.Une ligne élastique rouge simule en dynamique la nouvelle polyligne de même longueur.Quand l'utilisateur clique un point, la polylignes modifiée.Il peut sélectionner un nouveau sommet pour l'étirer tant que la commande est active (faire Entrée, Espace ou clic droit pour sortir de la commande). (defun c:const (/ erreur plst2grvecs osmo pl pt par p-1 p+1 old plst len nb gr p0 new dif ind e-len pti endpt grlst ) (vl-load-com) (defun erreur (msg) (if (/= msg "Fonction annulée") (princ (strcat "Erreur: " msg)) ) (redraw) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setvar "OSMODE" osmo) (setq *error* m:err m:err nil ) (princ) ) (defun plst2grvecs (plst / n veclst) (repeat (setq n (1- (length plst))) (setq veclst (cons 1 (cons (trans (nth (1- n) plst) 0 1) (cons (trans (nth n plst) 0 1) veclst) ) ) n (1- n) ) ) (grvecs veclst) ) (setq m:err *error* *error* erreur osmo (getvar "OSMODE") ) (setvar "OSMODE" 1) (while (not (and (setq pl (car (entsel "\nSélectionnez une polyligne ouverte: "))) (setq pl (vlax-ename->vla-object pl)) (= (vla-get-ObjectName pl) "AcDbPolyline") (= (vla-get-Closed pl) :vlax-false) ) ) ) (while (setq pt (getpoint "\nSpécifiez un sommet à déplacer: ")) (if (and (setq pt (trans pt 1 0)) (setq par (vlax-curve-getParamAtPoint pl pt)) (setq par (atoi (rtos par))) ) (progn (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq plst (split-list (vlax-get pl 'Coordinates) 2) len (vla-get-Length pl) nb (length plst) ) (cond ((= par 0) (setq p+1 (vlax-curve-getPointAtParam pl 1) old (vlax-curve-getDistAtParam pl 1) ) (while (and (setq gr (grread T 12 0)) (/= (car gr) 3)) (redraw) (setq p0 (trans (cadr gr) 1 0) endpt (polar p+1 (angle p+1 p0) old) grlst (append (list (list (car endpt) (cadr endpt))) (sublst plst 2 nil) ) ) (plst2grvecs grlst) ) ) ((= par (1- nb)) (setq p-1 (vlax-curve-getPointAtParam pl (1- par)) old (- len (vlax-curve-getDistAtPoint pl p-1) ) ) (while (and (setq gr (grread T 12 0)) (/= (car gr) 3)) (redraw) (setq p0 (trans (cadr gr) 1 0) endpt (polar p-1 (angle p-1 p0) old) grlst (append (sublst plst 1 par) (list (list (car endpt) (cadr endpt))) ) ) (plst2grvecs grlst) ) ) (T (setq p-1 (vlax-curve-getPointAtParam pl (1- par)) p+1 (vlax-curve-getPointAtParam pl (1+ par)) old (- (vlax-curve-getDistAtPoint pl p+1) (vlax-curve-getDistAtPoint pl p-1) ) ) (while (and (setq gr (grread T 12 0)) (/= (car gr) 3)) (redraw) (setq p0 (trans (cadr gr) 1 0) new (min (+ (distance p-1 p0) (distance p0 p+1)) (- len (vlax-curve-getDistAtParam pl (1- par)) ) ) dif (- old new) ind (- (length plst) 2) ) (if ( (progn (while ( (vlax-curve-getDistAtParam pl ind) ) ) (abs dif) ) (setq ind (1- ind)) ) (setq pti (nth ind plst)) (cond (( (setq endpt (polar p-1 (angle p-1 p0) new) grlst (append (sublst plst 1 par) (list (list (car endpt) (cadr endpt))) ) ) ) ((= ind par) (setq endpt (polar p0 (angle p0 p+1) (- new (distance p-1 p0)) ) grlst (append (sublst plst 1 par) (list (list (car p0) (cadr p0))) (list (list (car endpt) (cadr endpt))) ) ) ) (( (setq endpt (polar pti (angle pti (nth (1+ ind) plst)) (+ e-len dif) ) grlst (append (sublst plst 1 par) (list (list (car p0) (cadr p0))) (sublst plst (+ 2 par) (- ind par)) (list (list (car endpt) (cadr endpt))) ) ) ) ) ) (progn (setq pti (nth ind plst)) (if (= par (- nb 2)) (setq endpt (polar p0 (angle p0 p+1) (- old (distance p-1 p0)) ) grlst (append (sublst plst 1 par) (list (list (car p0) (cadr p0))) (list (list (car endpt) (cadr endpt))) ) ) (setq endpt (polar pti (angle pti (last plst)) (+ (distance pti (last plst)) dif) ) grlst (append (sublst plst 1 par) (list (list (car p0) (cadr p0))) (sublst plst (+ 2 par) (- ind par)) (list (list (car endpt) (cadr endpt))) ) ) ) ) ) (plst2grvecs grlst) ) ) ) (redraw) (vlax-put pl 'coordinates (apply 'append grlst)) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) (princ "\nLe point spécifié n'est pas sur la polyligne.") ) ) (setvar "OSMODE" osmo) (setq *error* m:err m:err nil ) (princ) ) ;;; SUBLST Retourne une sous-liste ;;; Premier élément : 1 ;;; (sublst '(1 2 3 4 5 6) 3 2) -> (3 4) ;;; (sublst '(1 2 3 4 5 6) 3 -1) -> (3 4 5 6) ;;; (sublst '(1 2 3 4 5 6) 3 12) -> (3 4 5 6) ;;; (sublst '(1 2 3 4 5 6) 3 nil) -> (3 4 5 6) (defun sublst (lst start leng / rslt) (or ( (setq leng (- (length lst) (1- start))) ) (repeat leng (setq rslt (cons (nth (1- start) lst) rslt) start (1+ start) ) ) (reverse rslt) ) ;; SPLIT-LIST Retourne une liste de sous-listes ;; Arguments ;; - lst : la liste à fractionner ;; - num : un entier, le nombre d'éléments des sous listes ;; Exemples : ;; (split-list '(1 2 3 4 5 6 7 8) 2) -> ((1 2) (3 4) (5 6) (7 8)) ;; (split-list '(1 2 3 4 5 6 7 8) 3) -> ((1 2 3) (4 5 6) (7 8)) (defun split-list (lst n) (if lst (cons (sublst lst 1 n) (split-list (sublst lst (1+ n) nil) n) ) ) ) [Edité le 8/8/2007 par (gile)][Edité le 9/8/2007 par (gile)] [Edité le 9/8/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
FRAXA Posté(e) le 9 août 2007 Auteur Posté(e) le 9 août 2007 Bonjour Gile !J'ai un message d'erreur qui apparait après avoir sélectionner le sommet: " Erreur: no function definition: SPLIT-LIST".Ton LISP fonctionne sous 2005? HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800
(gile) Posté(e) le 9 août 2007 Posté(e) le 9 août 2007 OUPS !! :red: L'erreur vient de moi, j'avais (encore) oublié de joindre les sous-routines nécessaire au bon fonctionnement du LISP.C'est répéré, j'ai modifié le code ci-dessus. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
FRAXA Posté(e) le 9 août 2007 Auteur Posté(e) le 9 août 2007 Génial!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Un gand merci à toi, M Gile. HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800
(gile) Posté(e) le 9 août 2007 Posté(e) le 9 août 2007 J'ai modifié le code, il persistait quelques petites erreurs. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
FRAXA Posté(e) le 10 août 2007 Auteur Posté(e) le 10 août 2007 Effectivement ça marche mieux HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800
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