Aller au contenu

Répétition bloc sur polyligne suivant 2 points


Messages recommandés

Posté(e)

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,

Posté(e)

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,

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité