Aller au contenu

point d\'insertion


Messages recommandés

Posté(e)

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...

 

Posté(e)

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

Posté(e)

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,0

assoc 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?

Posté(e)

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"))

Posté(e)

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

Posté(e)

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!

Posté(e)

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

Posté(e)

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)
)

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é