Aller au contenu

Messages recommandés

Posté(e)

Salut tt le monde

voila le pblm:

j ecris une routine en lisp dans laquelle je crée un point, mais je ne sais pas comment lui affecté des coordonnées x,y,z, ca ne marche pas avec les : car caddr....

SVP si qlq 1 a une idée pour depasser cet obstacle je lui serai reconnaissant. :)

 

 

 

merci d avance

Posté(e)

Houlà c'est pas très clair....

 

bah ptet avec une variable !!! Et puis aussi la fonction list...

 

Exemple : 3 points :

(setq pt1 '(1.00 2.00 3.00))
(setq pt2 '(4.00 5.00 6.00))
(setq pt3 '(7.00 8.00 9.00))

Si tu veux un point avec le x de pt1, le y de pt2 et le 7 de pt3, faut faire ça :

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

 

Voilà ! En espérant t'avoir aidé...

 

A bientot !

Matt.

 

[Edité le 19/12/2007 par Matt666]

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

merci infiniment Matt666 pour la reponse.

 

désolé si je n etais pas assez clair.

 

voilà le truc : dans une routine, je crée un point par la command _point P(x,y,z) que pointe qlq part dans le dessin par le curseur, après je fais des calculs qui me donnent une cote Z, ce Z là je veux le mettre à la place de l ancien Z càd ecraser celui de P, mais ca ne marche pas. :(

je ne sais pas comment acceder aux propriétés géometrique pour le changer.

Posté(e)

Salut,

 

Pour obtenir un point saisi à l'écran :

 

(setq pt1 (getpoint "\Spécifiez le point: "))

 

Le retour de cette expresion est une liste de 3 nombres réels affectés à la variable pt, ex :

 

(47.8677 17.2649 0.0)

 

on peut récupérer chaque élément de cette liste avec les fonction car cadr et caddr :

 

(car pt1) retourne 47.8677

(cadr pt1) retourne 17.2649

(caddr pt1) retourne 0.0

 

(on peut reconstituer une nouvelle liste avec la fonction list, exemple pour mettre la valeur 20.0 à la coordonnées z :

 

(setq pt2 (list (car pt1) (car pt2) 20.0)) retourne (47.8677 17.2649 20.0)

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

Posté(e)

Ok.

Tu fais donc ceci pour créer ton point

(command "_point" pause)

Mais il faut récupérer les informations de ton point nouvellement créé...

Donc je ferai ceci :

(setq ent (entlast))
   (command "_point" pause)
   (if (/= ent (entlast))
       (setq ent (entlast))
   )

ent = ename de ton point créé.

Ensuite Tu trouves une coordonnée Z. Disons 50.00

Pour pouvoir modifier une entité en lisp, il faut utiliser entmod.

 

Exemple :

(setq ent (entlast))
   (command "_point" pause)
   (if (/= ent (entlast))
       (setq ent (entlast))
   )
   (setq z 50.00)
   (setq dxf-ent (entget ent))
   (setq lst (cdr (assoc 10 dxf-ent)))
   (setq ent (subst 
           (cons 10 (list 
                   (car lst)
                   (cadr lst)
                   z
               )
           )
           (assoc 10 dxf-ent)
           dxf-ent
       )
   )
   (entmod dxf-ent)
   (entupd ent)

 

Ou plus concis et avec une condition en plus :

(setq ent (entlast))
   (command "_point" pause)
   (if (and 
           (/= ent (entlast))
           (eq "POINT" (cdr (assoc 0 (entlast))))
       )
       (progn
           (setq ent (entlast))
           (entmod (subst 
                   (cons 10 (list 
                           (car (cdr (assoc 10 (entget ent))))
                           (cadr (cdr (assoc 10 (entget ent))))
                           50.00
                       )
                   )
                   (assoc 10 (entget ent))
                   (entget ent)
           ))
           (entupd ent)
       )
   )

Voilà...

A toi de changer le 50.00 par la valeau de ton Z...

 

EDIT : Raah en core doublé par Gile !!! Décidément ;)

 

[Edité le 19/12/2007 par Matt666]

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

merci pour vos reponses matt666 et gile.

le problème persiste encore peut etre que je ss nul :cool: ou que le coopier coller avev modification ne marche pas :cool:

en fait voici la routine, c est prehistorique, je sais, mais ça m évite des tonnes de calculs, le seul pblm c que je veux changer le w=caddr C par Z et qu il soit affiché dans les proprités du point C càd coordoonnées (x,y,z).

 

 

(DEFUN C:Z()

(command "_osnap" "_appint,_cen,_nod")

(setq A (getpoint "\n Saisir point inf:"))

(setq B (getpoint "\n Saisir point sup:" A))

(command "_pline" A B "")

(setq C (getpoint "\n Saisir point cible:"))

(command "_point" C )

(setq X1 (car A ))

(setq X2 (car B ))

(setq u (car C ))

(setq Y1 (cadr A ))

(setq Y2 (cadr B ))

(setq v (cadr C ))

(setq Z1 (caddr A ))

(setq Z2 (caddr B ))

(setq w (caddr C ))

(setq X3 (- X2 X1 ))

(setq Y3 (- Y2 Y1 ))

(setq X4 (* X3 X3 ))

(setq Y4 (* Y3 Y3 ))

(setq d1 (+ X4 Y4))

(setq D (expt d1 0.5))

(setq u1 (- u X1 ))

(setq v1 (- v Y1 ))

(setq u2 (* u1 u1 ))

(setq v2 (* v1 v1 ))

(setq d2 (+ u2 v2 ))

(setq L (expt d2 0.5))

(setq Z3 (- Z2 Z1 ))

(setq Ratio (/ L D ))

(setq Mu (* Ratio Z3 ))

(setq Zc (+ Z1 Mu ))

(setq Z (rtos Zc 2 3))

(setq p (polar C 0 0.5 ))

(command "_text" p "0.4" "100" Z )

(command "_erase" A B "")

(command "_osnap" "_appint,_cen,_nod,_endp,_mid,_int")

)

 

 

SVP aidez moi à surmenter ce haie.

 

merci d avance

 

;)

Posté(e)

Houlàlà... Je comprends pas du tout ce que tu veux faire avec cette routine !!!!

 

Tu veux que ton point soit à z=distance entre a et b, c'est ça ????

 

Je vois pas du tout, désolé !!!

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Salut,

 

Je ne comprends bien non plus ce que tu veux faire, mais je vois que tu calcules des distance avec Pythagore et les coordonnées. Il y a une fonction LISP : distance qui permet de faire ça :

 

(setq D (distance A B))

(setq L (distance A C))

 

ou si tu veux les distances à l'altitude 0.0

 

(setq D (distance (list (car A) (cadr A)) (list (car B) (cadr B))))

(setq L (distance (list (car A) (cadr A)) (list (car C) (cadr C))))

 

Ensuite, l'expression (command "_erase" A B "") est inutile A et B ne sont pas des entités.

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

Posté(e)

salut tt le monde,

désolé de vous avoir embarassé avec moi,

il s agit d une routine qui fait l interpolation en 3D avec écriture du résultat.

dans un premier temps on pointe sur le point de terrain qui a la cote la plus petite (point inf)=A

puis on pointe sur le point haut (par rapport au premier)=B, ensuite on choisit le point dont veut faire le calcul de la cote Zc (point cible)=C, en même temps je crée un point avec la command "_point" que je place dans sur point cible. Des calculs viennent après pour determiner la valeur de la cote cible Zc

une fois determinée je veux remplacer la valeur de la cote du point C par Zc et qu elle soit affichée dans les propriétés géomtriques de C.

 

j espere je j ai expliqué à quoi ça sert la routine.

 

J attends tjrs vos rep et merci d avance.

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é