Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

je fait un premier (getpoint...

puis je voudrais pouvoir proposer à l'utilisateur de rentrer un point OU une distance, et après le traiter à la suite du genre "(if c'est un point ...) " ou "(if c'est un réel ...)".

 

Je pense que c'est avec initget et getdist, mais je n'arrive pas à cause des points 3D... (mais peut-être que je me trompe...)

 

Merci d'avance.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

comme ceci

 

(initget 9) ;;interdit une entrée nulle, mais accepte un point hors-limite

(setq p1 (getpoint "\nPoint de base: "))

(initget 7) ;;interdit une entréé nulle, = zéro et négative

(setq d1 (getdist p1 "\nDistance: "))

 

NB (getdist) accepte aussi bien une simple entrée numérique au clavier qu'un autre point saisi graphiquement.

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

Posté(e)

OK, merci,... Mais...

La commande getdist fourni q'une distance, alors que ce qui m'interresserait c'est un point avec des coordonnées...

c'est à dire qu'à la demande du second point, soit je click un point, (donc coordonnées immédiate), soit je donne une distance et ensuite je la traite en (list x y z) (ou je dit que ma distance est en Z par exemple) pour avoir mon second point en coordonnées...

Donc mes difficultés sont :

1 - Faire accepté comme réponse à UNE question un réel OU des coordonnées...

2 - faire reconnaitre que ma variable est un réel (alors traitement), ou des coordonnées (alors rien du tout, je continu simplement...)

En fait c'est comme la commande _line : après le premier point, pour le second je lui donne ou des coordonnées, ou un distance...

 

En fait, pour être clair, ce que je cherche à faire c'est de tracer une ligne dans le sens des Z, sans retourner le SCU, en demandant 2 points ou une distance comme pour une ligne normale... j'ai fait ce qui suit, mais je voudrais avoir la possibilité, si je veux, de rentrer une distance à la place du second point...

 

(defun c:lz (/ pt1 xpt1 ypt1 pt2 zpt2 pt2z)

(princ "\n Ligne vers Z \n")

(setq pt1 (getpoint "\n Spécifiez le premier point (départ ligne):"))

(setq xpt1 (car pt1))

(setq ypt1 (cadr pt1))

(setq zpt1 (caddr pt1))

(setq pt2 (getpoint "\n Spécifiez le point suivant :"))

(setq zpt2 (caddr pt2))

(While (= zpt2 zpt1)(alert "Erreur : Distance Z = 0")

(setq pt2 (getpoint "\n Spécifiez le point suivant :"))

(setq zpt2 (caddr pt2)))

(progn

(setq pt2z (list xpt1 ypt1 zpt2))

(command "_line" pt1 pt2z "") )

)

 

 

merci...

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Comme (getdist), (getpoint) accepte une entré clavier, qui sera compris comme une distance.

 

Pour ce faire (getpoint) prendra la direction de la position du curseur (pour avoir l'angle de direction) et te retournera un point sous forme de liste.

 

Tu peux aussi fourni en entrèe (comme pour la commande ligne) @25<45

Le point retouné sera une liste calculée par rapport a ton dernier point de longueur 25 avec un angle de 45 (dans les unitées actives)

 

Donc en résumé, tu n'as point a te soucier si c'est une distance ou tout autre forme d'entrée valide

(getpoint) te retournera toujours un point sous forme de liste.

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

Posté(e)

Si tu veux utiliser getdist pour spécifier la distance avec le pointeur :

 

(defun c:lz (/ pt1 pt2 dist)
 (princ "\n Ligne vers Z \n")
 (setq	pt1 (getpoint pt1 "\n Spécifiez le premier point (départ ligne):")
pt2 pt1
 )
 (while (= (caddr pt1) (caddr pt2))
   (if	(not (setq pt2
	    (getpoint "\n Spécifiez le second point ou : "
	    )
     )
)
     (setq dist (getdist pt1 "\nSpécifiez la distance: ")
    pt2	 (list (car pt1) (cadr pt1) (+ (caddr pt1) dist))
     )
     (setq pt2	(list (car pt1) (cadr pt1) (caddr pt2))
     )
   )
 )
 (command "_.line" pt1 pt2 "")
 (princ)
) 

 

Sinon, pour récupérer le z d'un autre point avec le pointeur ou le spécifier au clavier, il y a les filtres de coordonnées.

 

En mode macro :

 

^C^C_line;\.xy;@;\; 

 

[Edité le 11/4/2006 par (gile)]

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

Posté(e)

Merci

Juste un éclairsisement, dans ton lisp je ne comprend pas :

 

(setq pt1 (getpoint pt1 "\n Spécifiez le premier point (départ ligne):")

pt2 pt1

)

 

le second pt1(après getpoint) ?

 

le pt2 pt1) en fin de liste.

 

merci

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Je répond à la place de (gile)

 

Avec (setq, tu peux affecter plusieurs variable d'affilé sans répéter (setq var valeur) à chaque fois.

(setq var1 valeur var2 autrevaleur var3 encore-une-autre .......) est valide.

 

Donc pt2 prend la valeur de pt1 .Ils deviennent identique et permettent dans ce cas précis de rentrer dans la boucle (while puis qu'ils vérifient sa condition d'égalité.

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

Posté(e)

Un grand merci, j'ai tout compris... sauf ....

...le premier pt1 après getpoint... je sais que l'on peut rentrer un point avant la commande getpoint pour avoir une "ligne élastique", mais là le pt1 n'est pas encore défini et je ne vois pas à quoi il sert...

 

Autre chose vite fait : la macro bouton, je l'aime beaucoup et j'y avais pensé, mais je retrouve le problème de rappel de commande avec "entrée" qui ne fonctionne pas... même problème que dans mon message précedent en fait :

 

http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=9695#pid36933

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

J'ai un peu revu le lisp de Gile... Pour Avis...merci

(j'ai enlevé le premier "pt1" après getpoint -voir ma remarque précedente...ainsi que la demande getdist...)

 

(defun c:lz (/ pt1 pt2)

(princ "\n Ligne suivant Z \n")

(setq pt1 (getpoint "\n Spécifiez le premier point (départ ligne):")

pt2 pt1

)

(while (= (caddr pt1) (caddr pt2))

(progn

(initget 1)

(setq pt2 (getpoint pt1 "\n Spécifiez le second point ou une distance: "))

(setq pt2 (list (car pt1) (cadr pt1) (caddr pt2))))

)

(command "_.line" pt1 pt2 "")

(princ)

)

 

Ca me va bien comme ça, sauf que j'aurais bien aimé que la distance de ligne déssiné soit la distance donné... A part retourné le SCU, n'y a t'il pas un moyen de "forcer" la possibilité de déplacement de la souris dans un seul sens ??? (celui des Z ici...)

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

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é