kalos Posté(e) le 29 juillet 2010 Posté(e) le 29 juillet 2010 j'ai besoin pour un programme de récupérer le point d'insertion du bloc (setq pnt (cdr (assoc 10 entDef))) cela me renvoit pour pnt:(305494.0 2.25329e+006 0.0) alors que la coordonnée du bloc est:(305495.2435 2253299.4364 0.0) cela ne correspond pas! ou à peu de choses prés, je ne comprends pas...
bonuscad Posté(e) le 29 juillet 2010 Posté(e) le 29 juillet 2010 Déjà bonjour :exclam: Autrement cela est correct. Pour t'en convaincre fais (rtos (car pnt) 2 4) pour le X et (rtos (cadr pnt) 2 4) pour le Y, et tu verras que les valeurs retournées sont identiques.Ne tiens pas compte de l'affichage tronqué des valeurs réelles, Autolisp travaille bien avec la valeur exacte. Lors de l'usage de mantisse élevée (6 chiffres avant la virgule dans tons cas) l'affichage des valeur est tronqué. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
kalos Posté(e) le 29 juillet 2010 Auteur Posté(e) le 29 juillet 2010 Merci pour ta réponse. du coup avec: (prompt (strcat "point d'insertion_" (rtos i) " : " (vl-princ-to-string (rtos (car pnt) 2 4)) "," (vl-princ-to-string (rtos (cadr pnt) 2 4)) ",0\n")) j'obtiens:point d'insertion_0 : 305394.3731,2253291.992,0 on est loin des 305495.2435 2253299.4364 0.0 dans l'éditeur de bloc j'ai bien mon objet à 0,0,0assoc 10 récupere bien les positions X,Y de géométrie du bloc? dans mon cas pas du tout. je dois redéfinir le point d'insertion de mon bloc! comment dois je faire sans perdre les données de mon bloc et sa position?
kalos Posté(e) le 29 juillet 2010 Auteur Posté(e) le 29 juillet 2010 bon, je me suis pas pris la tete, j'ai pris la différence du X et Y et je m'en sers comme point d'insertion par la suite pour effectuer mes rotations. (setq pntX (atof (vl-princ-to-string (rtos (car pnt) 2 4)))) (setq pntX (+ pntX 0.8704)) (setq pntY (atof (vl-princ-to-string (rtos (cadr pnt) 2 4)))) (setq pntY (+ pntY 7.444)) (prompt (strcat "point d'insertion_" (rtos i) " : " (rtos pntX) "," (rtos pntY) ",0\n"))
bonuscad Posté(e) le 29 juillet 2010 Posté(e) le 29 juillet 2010 Attention, j'obtiens:point d'insertion_0 : 305394.3731,2253291.992,0 on est loin des 305495.2435 2253299.4364 0.0 Vérifie bien que tu es dans le SCG (et non dans un SCU proche du SCG) lorsque tu interroge ton point d'insertion. En règle générale (sauf cas très particulier) le lisp retourne les coordonnées de l'objet depuis SCG (quelque soit le SCU en cours) Est ce que: (rtos (car (trans pnt 0 1)) 2 4) et (rtos (cadr (trans pnt 0 1)) 2 4) serait équivalent à:alors que la coordonnée du bloc est:(305495.2435 2253299.4364 0.0) NB: Quand est-il de l'accroche objet utilisé lorsque que tu as interrogé à l'origine ton bloc pour avoir sont point d'insertion? [Edité le 29/7/2010 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
kalos Posté(e) le 29 juillet 2010 Auteur Posté(e) le 29 juillet 2010 ca me donne la meme chose. mais bon j'arrive à bidouiller pour retrouver le bon résultat.J'ai mon pntX et pntY, sous quelle forme je dois intégrer ces coordonnées dans pnt? c'est à dire pntX,pntY dans mon exemple. comment concatener des réels (pntX pntY) avec un caractere (",")ca me serait bien utile pour d'autres choses d'ailleurs quand on me demande une position X,Y (ici pas besoin de Z) (command "_.ROTATE" name "" pnt rot_att) merci d'avance, si ce point ci est enfin résolu, ca me sauverait la vie!
bonuscad Posté(e) le 29 juillet 2010 Posté(e) le 29 juillet 2010 Tu n'es pas très explicite sur ce que tu veux faire... J'ai vaguement l'impression que tu cherche à faire pivoter un attribut contenu dans un bloc (ce qui expliquerai l'écart du point d'insertion; celui de l'attribut n'est pas le même que celui de l'insertion du bloc) Comme je ne suis pas devin... En tout cas le bidouillage en programmation donne rarement de bon résultat ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 29 juillet 2010 Posté(e) le 29 juillet 2010 Salut En tout cas le bidouillage en programmation donne rarement de bon résultat ;) Je rejoins Bonus ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
kalos Posté(e) le 2 août 2010 Auteur Posté(e) le 2 août 2010 bon c'est pas grave mais la bidouille a bien fonctionné et j'avai juste besoin de mettre le poitn d'insertion XY en liste c'est à dire pntXY (defun c:attrot () (setq sset (ssget "X" '((0 . "INSERT") (8 . "moncalqueabloc")))) (if sset (progn (setq i 0 l (sslength sset) ) (while (< i l) (setq name (ssname sset i) loop T) (while loop (setq name (entnext name) entDef (entget name) ) (if (and (= (cdr (assoc 0 entDef)) "ATTRIB") (= (cdr (assoc 2 entDef)) "ROTATION")) (setq rot_att (atof (cdr (assoc 1 entDef))) loop nil) ) (if (= (cdr (assoc 0 entDef)) "SEQEND") (setq loop nil)) ) (setq pnt (cdr (assoc 10 entDef))) (setq pntX (atof (vl-princ-to-string (rtos (car pnt) 2 4)))) (setq pntX (+ pntX 0.8704)) ;bidouille decalage X (setq pntY (atof (vl-princ-to-string (rtos (cadr pnt) 2 4)))) (setq pntY (+ pntY 7.444)) ;bidouille decalage Y (setq pntXY (list pntX pntY)) ;création point d'insertion (command "_.ROTATE" name "" pntXY rot_att) (setq i (1+ i)) ) (prompt "\nRotation des blocs terminés.") ) ) (princ) )
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