bonjour;
comment inserer la valeur du resultat du calcul de l'air d'un objet automatiquement, car quand on utilse les outils de mesure de l'air le resultat s'affiche mais on ne peut pas l'inserer a moins de faire un copier coller lde a valeur.
donc ce que je cherche c'est transcrire directement la valeur de l'air de l'objet sur le plan. et si possible pouvoir specifier l'unité par exmple en m².
Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original: inserer la valeur de la surface automatiquement
Résolu ! Accéder à la solution.
Après, on peut ajouter m² dans le textmult.
C'est un peu long s'il y a beaucoup d'objet à étiqueter de la sorte. Peut-être faut-il alors s'atteler à créer un lisp ?
La commande CHAMP (_FIELD pour la commande en Anglais) devrait faire l'affaire.
Taper la commande CHAMP, sélectionner Object dans la catégorie de Champ, sélectionner l'objet, sélectionner Aire dans la liste des Propriétés, sélectionner le point pour positionner le champ.
En effet, on gagne quelques étapes. Je ne connaissais pas cette commande. On en apprend tous les jours
Juste au cas où, pour simple information, dans la boite de dialogue CHAMP, le bouton Format supplémentaire permet d'insérer un Suffixe ou un Préfixe a la valeur du champ. Dans ce cas, insérer comme Suffixe "m²" et le résultat sera celui recherché.
merci pour vos réponses;
ce que je cherche c'est inserer la valeur de l'air des pieces d'un plan ,, par exmple une chambre qui va etre dessiner entre des lignes et qui n'est pas un objet en soi méme,, comme ci on coter l'air d'une surface qui n'est pas un objet.
encore une fois merci.
Bonjour,
Ceci ? Ecris en 2008 ça pourrait convenir...
(vl-load-com) (defun c:surf_plancher ( / AcDoc Space nw_style e_last pt_in htx rtx obj ename nw_obj) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((null (tblsearch "LAYER" "__METRE_Plancher")) (vlax-put (vla-add (vla-get-layers AcDoc) "__METRE_Plancher") 'color 3) ) ) (cond ((null (tblsearch "STYLE" "Romand-Field")) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Romand-Field")) (mapcar '(lambda (pr val) (vlax-put nw_style pr val) ) (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag) (list "romand.shx" 0.0 (/ (* 15.0 pi) 180) 1.0 0.0) ) ) ) (setq e_last (entlast)) (while (setq pt_in (getpoint "\nSpécifiez un point intérieur <Entrée pour finir>: ")) (bpoly pt_in nil '(0 0 1)) (cond ((not (eq e_last (entlast))) (if (not htx) (progn (initget 6) (setq htx (getdist pt_in (strcat "\nSpécifiez la hauteur du champ <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq htx (getvar "TEXTSIZE")) ) ) (if (not rtx) (if (not (setq rtx (getorient pt_in "\nSpécifiez l'orientation du champ <0.0>: "))) (setq rtx 0.0)) ) (setq obj (entlast) ename (vlax-ename->vla-object obj) ) (vlax-put ename 'Layer "__METRE_Plancher") (setq nw_obj (vla-addMtext Space (vlax-3d-point (trans pt_in 1 0)) 0.0 (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (itoa (vla-get-ObjectID ename)) ">%).Area \\f \"%lu2%pr2%ps[S=," "m²]\">%" ) ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation) (list 5 (getvar "TEXTSIZE") 5 (trans pt_in 1 0) "Romand-Field" "__METRE_Plancher" rtx) ) (setq e_last (entlast)) ) (T (princ "\nAucun contour trouvé.") ) ) ) (prin1) )
Avec les champs, est-il aussi possible de faire une opération ? Par exemple, si on veut multiplier par 2 l'aire donnée ?
Est-il possible également de retrouver les xdata associées à l'objet ?
JM
Oui,
Dans la section Format supplémentaire, dans Facteur de conversion, entrer le facteur de multiplication, le résultat affiché sera la valeur extraite de l’objet dans ce cas l'aire, multiplié par ce facteur.
Par contre les xdata associées à l'objet ne sont pas exposés avec les champs.
bonjour,
merci CADaStroumph pour ta reponse mais il faut dire que je n'ai rien compris je n'ai ton experience donc si c possible de decoder ton msg, s'agit il d'une routine lisp??? si c'est le pourrais tu m'expliquer comment l'integrer et l'utilser sur autocad? merci d'avance
bonjour,
merci cadastroumph pour ta reponse mais faut dire que je n'ai rien compris, s'agit il d'une routine lisp? et si c'est le cas pourrais tu m'indiquer comment l'integrer dans mon autocad et l'utiliser, merci d'avance.
Bonjour,
Tu copie-colle le code dans le bloc-note.
Tu fais fichier "enregistrer sous" en fixant l'extention à ".lsp" , tu choisis un dossier.
Puis depuis ton navigateur de dossier, tu fais glisser se fichier enregistré dans la fenêtre GRAPHIQUE d'Autocad, la nouvelle commande SURF_PLANCHER sera dispo.
Cette manip simple te permmettra d'essayer la routine (on peut aussi coller directement le code en ligne de COMMANDE d'Autocad, sans l'enregistrer dans un fichier).
Après si tu veux pouvoir en disposer à tout moment, il y a d'autres procédures de chargement...
bonjour
encore une fois merci cadastroumph pour tes explications, ça a marcher
CADaStroumph a écrit :Bonjour,
Tu copie-colle le code dans le bloc-note.
Tu fais fichier "enregistrer sous" en fixant l'extention à ".lsp" , tu choisis un dossier.
Puis depuis ton navigateur de dossier, tu fais glisser se fichier enregistré dans la fenêtre GRAPHIQUE d'Autocad, la nouvelle commande SURF_PLANCHER sera dispo.
Cette manip simple te permmettra d'essayer la routine (on peut aussi coller directement le code en ligne de COMMANDE d'Autocad, sans l'enregistrer dans un fichier).
Après si tu veux pouvoir en disposer à tout moment, il y a d'autres procédures de chargement...
CADaStroumph a écrit :Bonjour,
Tu copie-colle le code dans le bloc-note.
Tu fais fichier "enregistrer sous" en fixant l'extention à ".lsp" , tu choisis un dossier.
Puis depuis ton navigateur de dossier, tu fais glisser se fichier enregistré dans la fenêtre GRAPHIQUE d'Autocad, la nouvelle commande SURF_PLANCHER sera dispo.
Cette manip simple te permmettra d'essayer la routine (on peut aussi coller directement le code en ligne de COMMANDE d'Autocad, sans l'enregistrer dans un fichier).
Après si tu veux pouvoir en disposer à tout moment, il y a d'autres procédures de chargement...
Bonjour,
Je rebondis tardivement sur ce sujet super intéressant.
J'ai tenté de bidouiller le code pour l'adapter à mes besoins, mais mes connaissances en LISP étant limitées, ça ne marche pas.
Buts recherchés :
- créer les champs dans le calque courant, et pas dans un nouveau calque (qui n'est pas dans ma charte)
- créer les champs dans le style de texte courant (raisons = dito)
- exprimer les valeurs en m² pour un dessin en centimètres
Quelqu'un pourrait-il m'aider à faire ça ?
Merci !!!
Bonjour,
Est-ce les modifications souhaitées?
(vl-load-com) (defun c:surf_plancher ( / AcDoc Space e_last pt_in htx rtx obj ename nw_obj) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (setq e_last (entlast)) (while (setq pt_in (getpoint "\nSpécifiez un point intérieur <Entrée pour finir>: ")) (bpoly pt_in nil '(0 0 1)) (cond ((not (eq e_last (entlast))) (if (not htx) (progn (initget 6) (setq htx (getdist pt_in (strcat "\nSpécifiez la hauteur du champ <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq htx (getvar "TEXTSIZE")) ) ) (if (not rtx) (if (not (setq rtx (getorient pt_in "\nSpécifiez l'orientation du champ <0.0>: "))) (setq rtx 0.0)) ) (setq obj (entlast) ename (vlax-ename->vla-object obj) ) (vlax-put ename 'Layer (getvar "CLAYER")) (setq nw_obj (vla-addMtext Space (vlax-3d-point (trans pt_in 1 0)) 0.0 (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (itoa (vla-get-ObjectID ename)) ">%).Area \\f \"%lu2%pr2%ps[S=,m²]%ct8[0.001]\">%" ) ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation) (list 5 (getvar "TEXTSIZE") 5 (trans pt_in 1 0) (getvar "TEXTSTYLE") (getvar "CLAYER") rtx) ) (setq e_last (entlast)) ) (T (princ "\nAucun contour trouvé.") ) ) ) (prin1) )
Bonjour,
Merci beaucoup pour cette réponse.
La modif est presque parfaite : le résultat est trop grand d'un facteur 10 (je sais corriger).
Personnellement, je préfère supprimer le préfixe "S=" avant la valeur de la surface et laisser un blanc entre la valeur et le suffixe "m²" (je sais modifier).
Pour résumer j'ai remplacé la ligne
">%).Area \\f \"%lu2%pr2%ps[S=,m²]%ct8[0.001]\">%"
par
">%).Area \\f \"%lu2%pr2%ps[, m²]%ct8[0.0001]\">%"
En revanche, j'ai encore besoin d'aide parce que je ne sais pas modifier la précision : comment faire pour n'avoir qu'une décimale ?
Et ce qui serait top, ce serait de sauter l'étape "direction du texte", en supposant que l'utilisateur s'est mis dans le bon SCU.
Merci !!!!
Hello
Welcome to the Autodesk/AutoCAD Forums !
%pr2 ---> 2 decimales
%pr1 ---> 1 decimale
%pr0 ---> 0 decimale
Patrice BRAUD
Parfait, merci !
Si quelqu'un sait comment supprimer l'étape "direction du texte" ce sera parfait !
Hello
Tu commentes CETTE LIGNE :
;; (if (not (setq rtx (getorient pt_in "\nSpécifiez l'orientation du champ <0.0>: "))) (setq rtx 0.0))
Et tu ajoutes CECI (juste derriere - ligne suivante) :
(setq rtx 0.0)
Patrice BRAUD
Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.