Aller au contenu

Problème d'évaluation d'une expression de champs


bonuscad

Messages recommandés

Bonjour,

 

J'ai découvert aujourd'hui l'expression (w2u) dans les formules de champs (fields)

Si manuellement j'arrive parfaitement à la mettre en œuvre, donc ça fonctionne!

 

L'automatiser en lisp me fais buter sur un phénomène bizarre.

 

Voici par exemple une ébauche en cours

(defun c:field_ptUCS ( / AcDoc Space pt obj nw_obj)
 (setq
   AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
   Space
   (if (= 1 (getvar "CVPORT"))
     (vla-get-PaperSpace AcDoc)
     (vla-get-ModelSpace AcDoc)
   )
 )
 (vla-AddPoint Space (vlax-3d-point (setq pt (trans (getpoint "\nPoint?: ") 1 0))))
 (setq obj (entlast))
 (setq nw_obj
   (vla-addMtext Space
     (vlax-3d-point pt)
     0.0
     (strcat
       "%<\\AcExpr (w2u("
       "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
       (itoa (vla-get-ObjectID (vlax-ename->vla-object obj)))
       ">%).Coordinates >%))"
     )
   )
 )
)

 

A l’exécution toutes les expressions sont évaluées (on voit les champs calculés) sauf "AcExpr" (d'ailleurs il est systématiquement "bouffé", il ne reste que "cExpr" ?!?!

 

Je ne vois pas mon erreur (si erreur existe, car c'est peut être un bug)

Vos avis seraient les bienvenus.

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

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

C'est bien une erreur de syntaxe de ma part; il manquait un ">%" à la fin.

 

La correction, pour ceux que ça pourrait interesser...

 

(defun c:field_ptUCS ( / AcDoc Space pt obj nw_obj)
 (setq
   AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
   Space
   (if (= 1 (getvar "CVPORT"))
     (vla-get-PaperSpace AcDoc)
     (vla-get-ModelSpace AcDoc)
   )
 )
 (vla-AddPoint Space (vlax-3d-point (setq pt (trans (getpoint "\nPoint?: ") 1 0))))
 (setq obj (entlast))
 (setq nw_obj
   (vla-addMtext Space
     (vlax-3d-point pt)
     0.0
     (strcat
       "%<\\AcExpr (w2u("
       "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
       (itoa (vla-get-ObjectID (vlax-ename->vla-object obj)))
       ">%).Coordinates >%))>%"
     )
   )
 )
 (prin1)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Hello Bruno

 

SVP c quoi la partie "AcObjProp.16.2" dans ton code ?

 

Cela a t-il un rapport avec :

HKEY_CURRENT_USER / Software / Autodesk / AutoCAD / R1x.x

Cle : R17.0 pour 2007

Cle : R17.1 pour 2008

Cle : R17.2 pour 2009

Cle : R18.0 pour 2010

Cle : R18.1 pour 2011

Cle : R18.2 pour 2012

Cle : R19.0 pour 2013

Cle : R19.1 pour 2014

Cle : R20.0 pour 2015

Cle : R20.1 pour 2016

 

Sous entendu, ton code est-il lie a une version precise d'ACAD / MAP / CIVIL / etc ??

 

Merci d'avance de tes lumieres, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

C'est un bête copier-collé de code à code qui est resté depuis que je me suis penché sur la syntaxe des champs.

A l'époque je l'avais obtenue comme dit ICI

 

Un AcObjProp Object fonctionne tout aussi bien.

 

Il faut croire que les deux syntaxes fonctionnent (certainement pour la compatibilité des anciennes syntaxes)

 

Te l'expliquer j'en serais bien incapable, c'est la soupe interne d'Autodesk... je laisse la main.

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

Lien vers le commentaire
Partager sur d’autres sites

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é