Aller au contenu

dessiner deux lignes avec angle


Messages recommandés

Posté(e)

bonjour,

j'essaye de dessiner deux lignes avec un angle en introduisant des coordonnées polaires relativess. le souci c'est que l'angle relatif est calculé à partir de l'axe des x et non pas de la première ligne dessinée.

 

j'aimerais bien que quelqu'un m'explique ce que je dois faire

merci

santé et bonheur

Posté(e)

Si tu cliques droit sur POLAIRE et que tu actives tous les angles necessaires et coche "par rapport au dernier segment", tu t'enléveras déjà une épine du pied.

 

Seulement, tu ne seras toujours pas libre de spécifier des angles particuliers mais juste incrémentaux....

 

Sinon, 5 minutes de reflexion.....

 

[NB, ca serait sympa de supprimer ton message en doublon dans le forum VBA]

 

 

 

[Edité le 26/9/2008 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Pour répondre, je pense que le souci est de le faire en direct, sans interrompre la commande.

Sinon, effectivement, les méthodes sont nombreuses.

 

J'essaie de bidouiller en mode dynamique mais le vieil ours que je suis n'a pas l'habitude.

De plus, ca fait 2 fois que je plante AutoCAD 2006 parce que je fais des réglages du mode DYN.

Dans les paramètres de la saisie du pointeur, il y a Polaires et Relatives, essayez voir les collègues.

Chez moi, ca n'est d'aucun effet (toujours aussi merdique, ca reste polaire mais absolu) et ca plante.

 

super :mad:

 

 

[EDITION] tu peux peut-être nous dire ce que tu dessines, lignes poly,...etc ?

C'est facile de faire des macros ou des lisp.

 

 

[Edité le 26/9/2008 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

j'ai déja paramétré l'onglet polaire en cochant la case"" par rapport au dernier segment" mais j'arrive pas à faire la manip en une seule fois.

l'angle qui est pris en compte c'est l'angle par apport à l'axe des X c'est a dire l'angle absolu et non pas relatif.

 

NB: je n'arrive pas a effacer le message qui est sur le forum VBA.

santé et bonheur

Posté(e)

hello,

 

une solution à deux balles mais qui a le mérite de fonctionner

avec les segments de ligne, toutefois,

 

copier le segment sur lui-même

puis rotation du dernier élément par rapport à une extrémité

et donner la valeur de l'angle souhaité.

 

à deux balles, que je disais, j'ai pas menti...

 

amicalement

Posté(e)
j'ai déja paramétré l'onglet polaire en cochant la case"" par rapport au dernier segment" mais j'arrive pas à faire la manip en une seule fois.

l'angle qui est pris en compte c'est l'angle par apport à l'axe des X c'est a dire l'angle absolu et non pas relatif.

 

Je regrette : ça, ca marche, avec le mode polaire activé et en rentrant juste la longueur, l'angle étant celui donné par les incréments en pointillés.

 

je n'arrive pas a effacer le message qui est sur le forum VBA

 

Pour effacer un message sur CADxp, il faut l'éditer afin d'avoir l'option.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Essentiellement pour des lignes, tu peux essayer le code qui suit voir si celui-ci pourrait te convenir. (écrit rapidement, sans test dans différent SCU)

 

(defun c:angle_relatif ( / js oldsnap oldortho dxf_ent aalpha ang_supp)
(princ "\nChoix de la ligne de référence.")
(setq js (ssget "_+.:E:S" '((0 . "LINE"))))
(cond
	(js
		(setq
			oldsnap (getvar "snapang")
			oldortho (getvar "orthomode")
			dxf_ent (entget (ssname js 0))
			alpha (angle (trans (cdr (assoc 10 dxf_ent)) 0 1) (trans (cdr (assoc 11 dxf_ent)) 0 1))
		)
		(initget 1)
		(setq ang_supp (getangle "\nAngle à ajouter: "))
		(setvar "snapang" (+ alpha ang_supp))
		(setvar "orthomode" 1)
		(command "_.line" pause "_none" pause "")
		(setvar "orthomode" oldortho)
		(setvar "snapang" oldsnap)
		(command "_.line" "")
	)
)
(princ)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut bonuscad,

 

Si je peux me permettre une suggestion, avec vl-cmdf on peut utiliser la syntaxe "

 

EDIT : j'ajoute aussi un angle par défaut (90° ou 100gr)

 

(defun c:angle_relatif (/ js oldsnap oldortho dxf_ent aalpha ang_supp)
 (princ "\nChoix de la ligne de référence.")
 (setq js (ssget "_+.:E:S" '((0 . "LINE"))))
 (cond
   (js
    (setq
      dxf_ent (entget (ssname js 0))
      alpha   (angle (trans (cdr (assoc 10 dxf_ent)) 0 1)
	      (trans (cdr (assoc 11 dxf_ent)) 0 1)
       )
    )
    (or
      (setq ang_supp (getangle	(strcat	"\nAngle à ajouter 					(angtos (/ pi 2))
				">: "
			)
	      )
      )
      (setq ang_supp (/ pi 2))
    )
    (vl-cmdf "_.line"
      pause
      (strcat
	"		(angtos (+ alpha ang_supp) (getvar "AUNITS") 15)
      )
      pause
      ""
    )
   )
 )
 (princ)
)

[Edité le 27/9/2008 par (gile)]

 

[Edité le 29/9/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut (gile),

 

Ce qui me gêne un peu dans ta proposition, est l'utilisation de (angtos)

 

On va dire que je pinaille, mais par ce procédé on peu perdre de la précision car la conversion de réel en chaine va être régie par d'autres variables et faire perdre plus ou moins de précision, imprécision qui peut totalement passer inaperçue (c'est ce que je n'aimes pas)

 

Cumuler de l'imprécision abouti a la longue à une erreur, c'est mon point de vue...

 

[Edité le 27/9/2008 par bonuscad]

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut,

 

Une version plus aboutie qui fonctionne aussi avec les segments droits de polylignes.

La ligne ou la polyligne doit être parallèle au plan XY du SCU courant.

L'angle de référence est calculé dans le premier ou dernier quadrant (entre -90° et 90°) par rapport à l'axe X du SCU courant quel que soit le sens de la ligne ou de la polyligne.

 

;;; PolarRel (gile)
;;; Dessine une ligne suivant un angle relatif au segment sélectionné

(defun c:polarel (/ ent pt typ pa p0 ang1 ang2)
 (vl-load-com)
 (if
   (and
     (setq ent (entsel "\nSélectionnez le segment de référence: "))
     (setq pt (trans (osnap (cadr ent) "_nea") 1 0))
     (setq ent (vlax-ename->vla-object (car ent)))
     (setq typ (vla-get-ObjectName ent))
     (or
(and
  (= typ "AcDbLine")
  (setq pa (vlax-curve-getParamAtPoint ent pt))
)
(and
  (= typ "AcDbPolyline")
  (setq pa (vlax-curve-getParamAtPoint ent pt))
  (zerop (vla-GetBulge ent (fix pa)))
)
     )
   )
    (if (or
   (and
     (= typ "AcDbLine")
     (equal (caddr (trans (vlax-curve-getStartPoint ent) 0 1))
	    (caddr (trans (vlax-curve-getEndPoint ent) 0 1))
	    1e-9
     )
   )
   (and	(= typ "AcDbPolyline")
	(equal (vlax-get ent 'Normal)
	       (trans '(0 0 1) 1 0 T)
	       1e-9
	)
   )
 )
      (progn
 (setq ang0 (- (angle '(0 0 0)
		      (vlax-curve-getFirstDeriv ent pa)
	       )
	       (angle '(0 0 0) (getvar "UCSXDIR"))
	    )
 )
 (and (minusp (cos ang0)) (setq ang0 (+ ang0 pi)))
 (or
   (setq ang1 (getangle	(strcat	"\nAngle à ajouter 					(angtos (/ pi 2))
				">: "
			)
	      )
   )
   (setq ang1 (/ pi 2))
 )
 (vl-cmdf "_.line"
	  pause
	  (strcat
	    "		    (angtos (+ ang0 ang1) (getvar "AUNITS") 15)
	  )
	  pause
	  ""
 )
      )
      (princ
 "\nLe segment sélectionné n'est pas parallèle au SCU courant."
      )
    )
    (princ "\nEntité ou segment non valide.")
 )
 (princ)
) 

 

[Edité le 29/9/2008 par (gile)]

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é