ludok Posté(e) le 8 mars 2010 Posté(e) le 8 mars 2010 Bonjour,Déjà merci pour toutes les réponses à mes questions que j'ai eu jusque là grace a ce forum!Mais aujourd'hui j'ai un problème dont je ne trouve pas la solution.J'aimerais pouvoir répéter un bloc possédant 2 points distants sur une polyligne. En gardant ces 2 points toujours sur la polyligne!!! Or la seule commande qui se rapproche "MESURER" répéte le bloc sur un seule point.Existe-t-il une commande ou faut il que je fasse appel à un Lisp? Merci,
albator44 Posté(e) le 8 mars 2010 Posté(e) le 8 mars 2010 Bonjour,Je ne comprend pas, peux tu expliquer autrement?
ludok Posté(e) le 8 mars 2010 Auteur Posté(e) le 8 mars 2010 Alors,Imaginons que je veuille répéter un rectangle (bloc) sur une courbe (polyligne).Seulement j'aimerais que ce soit toujours les DEUX coins supérieurs (2 pts) qui soient coincidents avec la polyligne et NON pas 1 seul point définis comme avec la commande "MESURER".Dans mon cas, je travaille sur des convoyeurs à chaines transportants des charges plus ou moins importantes. Ces charges sont reliées avec le convoyeur par 2 axes différents. Et j'aimerais pouvoir répéter ma charge un certain nombre de fois dans les courbes pour pouvoir tracer le débattement de la charge grace à une spline.J'espere avoir été assez clair!Ci dessous un exemple de charge reliée à un convoyeur aérien par 2 axes avant une courbe: http:// http://www.frostfrance.com/joomla/images/stories/frost/convoyeurs_aeriens_frost_137.jpg Merci,
(gile) Posté(e) le 8 mars 2010 Posté(e) le 8 mars 2010 Salut, Tu peux essayer ça : (defun c:chariot (/ *error* curve endParam bloc pt1 pt2 seg len angBase dist space cen circ lst ext copy ) (vl-load-com) (defun *error* (msg) (or (= msg "Fonction annulée") (princ (strcat "Erreur: " msg)) ) (vla-EndUndoMark *acdoc*) (princ) ) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (if (and (setq curve (car (entsel "\nSélectionnez la courbe: "))) (setq endParam (vlax-curve-getEndParam curve)) (setq bloc (car (entsel "\nSélectionnez l'objet: "))) (setq pt1 (getpoint "\nSpécifiez le premier point sur le bloc: ")) (setq pt2 (getpoint pt1 "\nSpécifiez le second point sur le bloc: ") ) (setq seg (getdist "\nSpécifiez la longueur du segment: ")) (setq curve (vlax-ename->vla-object curve) bloc (vlax-ename->vla-object bloc) len (vlax-curve-getDistAtParam curve endParam) angBase (angle pt1 pt2) rad (distance pt1 pt2) dist 0.0 space (vla-get-ModelSpace *acdoc*) ) ) (progn (vla-StartUndoMark *acdoc*) (while ( (setq cen (vlax-curve-getPointAtDist curve dist) param (vlax-curve-getParamAtPoint curve cen) circ (vla-AddCircle space (vlax-3d-Point cen) rad) lst (3d-coord->pt-lst (vlax-invoke circ 'IntersectWith curve acExtendNone) ) ext (car (vl-remove-if '(lambda (x) ( ) (vl-sort lst '(lambda (x1 x2) ( (vlax-curve-getparamAtPoint curve x2) ) ) ) ) ) dist (+ dist seg) ) (vla-Delete circ) (setq copy (vla-copy bloc)) (vla-Move copy (vlax-3d-point pt1) (vlax-3d-point cen)) (vla-Rotate copy (vlax-3d-point cen) (+ angBase (angle cen ext)) ) ) (vla-EndUndoMark *acdoc*) ) ) (princ) ) ;;; 3d-coord->pt-lst Convertit une liste de coordonnées 3D en liste de points ;;; (3d-coord->pt-lst '(1.0 2.0 3.0 4.0 5.0 6.0)) -> ((1.0 2.0 3.0) (4.0 5.0 6.0)) (defun 3d-coord->pt-lst (lst) (if lst (cons (list (car lst) (cadr lst) (caddr lst)) (3d-coord->pt-lst (cdddr lst)) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ludok Posté(e) le 9 mars 2010 Auteur Posté(e) le 9 mars 2010 Excelent! C'est exactement ce que je charchais. Merci,
lili2006 Posté(e) le 9 mars 2010 Posté(e) le 9 mars 2010 Bonjour à toutes et tous, En effet !! Vraiment terrible !! Merci (gile) :D Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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