lecrabe Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 Hello J'ai trouve ce Lisp (qui marche sur theswamp) qui dessine une belle sinusoidale en cliquant sur N points ! :) Donc il faut "suivre a la main" une Pline existante !? :o Mais je desire plutot pouvoir selectionner N Plines (closes ou non) et dessiner par dessus en Pline sur le calque courant de belles sinusoidales avec peut etre une question relative au rayon/envergure de la sinusoidale ! On passe toujours par les vertex donc si il y a des arcs (on s'en fout) de meme si elle est splinee ou lisse ... Merci d'avance, Le Decapode Code en provenance de theswamp :http://www.theswamp.org/index.php?topic=32289.0 ;; http://www.theswamp.org/index.php?topic=32289.0 ;; Draw a Wave from a Pline (defun c:WavePline (/ DivideDistance EntList Blg Pt nPt cnt Dist Sc ) (defun DivideDistance ( sPt ePt dist / Ang tempDist SpDist Amnt ) (setq Ang (angle sPt ePt)) (setq tempDist (distance sPt ePt)) (setq SpDist (/ tempDist (setq Amnt (fix (/ tempDist dist))))) (setq Amnt (1+ Amnt)) (setq cnt (+ Amnt cnt)) (repeat Amnt (setq EntList (cons (cons 42 (setq Blg (- Blg))) (cons (cons 41 0.) (cons (cons 40 0.) (cons (cons 10 (list (car sPt) (cadr sPt))) EntList ) ) ) ) ) (setq sPt (polar sPt Ang SpDist)) ) EntList ) ;------------------------------------------------- (setq Dist 0.4) (setq Sc (getvar 'LtScale)) (setq EntList (list (cons 90 2) (cons 100 "AcDbPolyline") (cons 100 "AcDbEntity") (cons 0 "LWPOLYLINE") ) ) (setq Blg 1.) (setq cnt 0) (if (setq Pt (getpoint "\n Select first point: ")) (progn (while (setq nPt (getpoint Pt "\n Select next point: ")) (setq EntList (DivideDistance Pt nPt (* Dist Sc))) (setq Pt nPt) (setq cnt (1+ cnt)) ) (entmake (subst (cons 90 cnt) '(90 . 2) (reverse EntList))) ) ) (princ) ) Autodesk Expert Elite Team
zebulon_ Posté(e) le 23 mars 2010 Posté(e) le 23 mars 2010 Bonjour, rajouter la fonction (defun getPolySegs (ent / entl p1 pt bulge seg ptlst) (cond (ent (setq entl (entget ent)) ;; save start point if polyline is closed (if (= (logand (cdr (assoc 70 entl)) 1) 1) (setq p1 (cdr (assoc 10 entl))) ) ;; run thru entity list to collect list of segments (while (setq entl (member (assoc 10 entl) entl)) ;; if segment then add to list (if (and pt bulge) (setq seg (list pt bulge)) ) ;; save next point and bulge (setq pt (cdr (assoc 10 entl)) bulge (cdr (assoc 42 entl)) ) ;; if segment is build then add last point to segment ;; and add segment to list (if seg (setq seg (append seg (list pt)) ptlst (cons seg ptlst)) ) ;; reduce list and clear temporary segment (setq entl (cdr entl) seg nil ) ) ) ) ;; if polyline is closed then add closing segment to list (if p1 (setq ptlst (cons (list pt bulge p1) ptlst))) ;; reverse and return list of segments (reverse ptlst) ) qui ne marche cependant pas pour les polylignes splinées. Et changer la fin du lisp WavePline en quelque chose du style : (setq Blg 1.) (setq cnt 0) (setq pl (car (entsel))) (setq lseg (getpolysegs pl)) (foreach seg lseg (setq EntList (DivideDistance (car seg) (caddr seg) (* Dist Sc))) (setq cnt (1+ cnt)) ) (entmake (subst (cons 90 cnt) '(90 . 2) (reverse EntList))) (princ) AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
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