sangracosan Posté(e) le 19 décembre 2007 Posté(e) le 19 décembre 2007 Salut tt le mondevoila 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
Matt666 Posté(e) le 19 décembre 2007 Posté(e) le 19 décembre 2007 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."
sangracosan Posté(e) le 19 décembre 2007 Auteur Posté(e) le 19 décembre 2007 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.
(gile) Posté(e) le 19 décembre 2007 Posté(e) le 19 décembre 2007 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
Matt666 Posté(e) le 19 décembre 2007 Posté(e) le 19 décembre 2007 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.00Pour 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."
sangracosan Posté(e) le 19 décembre 2007 Auteur Posté(e) le 19 décembre 2007 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 ;)
Matt666 Posté(e) le 19 décembre 2007 Posté(e) le 19 décembre 2007 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."
(gile) Posté(e) le 19 décembre 2007 Posté(e) le 19 décembre 2007 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
sangracosan Posté(e) le 24 décembre 2007 Auteur Posté(e) le 24 décembre 2007 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)=Apuis 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.
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