Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

j'utilisais une superbe commande de patrick35, REA (calcul de surfaces interactif, voir ci dessous) quand je travaillais en metres (heureux temps!).

 

Helas maintenant je suis en pieds/pouces, donc bien sur ca ne marche plus: le resultat s'affiche sous la forme qui correspond a mes unites, par exemple 253'-7"1/8 (=253 pieds, 7pouces1/8e), ce qui est absurde car sont des unites de longueur et non de surface, et en plus fausses par un rapport de 12.

Donc je voudrais l'actualiser. Il faut que:

 

-Le resultat obtenu soit multiplie par 12.

-qu'il s'inscrive sans symbole unites: 253 et rien d'autre.

-qu'il inscrive le nom de l'unite de surface a la fin (=en l'occurence sq.ft.)

 

ps. si en plus ca pouvait arrondir a la valeur inferieure/superieure ca m'arrangerait encore plus.

 

Des pistes pour un mauvais lispeur? j'ai essaye de le bricoler moi-meme mais je ne suis arrive a rien qui fonctionne.

 

merci

 

 

 

 

 

 

Voila la commande:

 

 

(defun modif_poly(obj rea arg-list)

(if (and (vlax-read-enabled-p obj)(vlax-read-enabled-p (vlr-data rea)))

(vla-put-textstring (vlr-data rea) (strcat (rtos (vla-get-area obj) 2 1) "0 m2"))

(vlr-remove rea)

)

)

 

(defun effacer_pt(obj rea arg-list)

(vlax-ldata-delete obj "Patrick_35" (vlr-data rea))

(vlax-ldata-delete (vlr-data rea) "Patrick_35" obj)

(vlr-remove rea)

)

 

(defun c:rea(/ n sel_poly sel_text)

(while (not sel_poly)

(setq sel_poly (car (entsel "\nSélection de la polyligne/spline/cercle : ")))

(if sel_poly

(if (or (= (cdr (assoc 0 (entget sel_poly))) "POLYLINE")

(= (cdr (assoc 0 (entget sel_poly))) "LWPOLYLINE")

(= (cdr (assoc 0 (entget sel_poly))) "SPLINE")

(= (cdr (assoc 0 (entget sel_poly))) "CIRCLE"))

(progn

(setq sel_poly (vlax-ename->vla-object sel_poly))

(if (/= (vla-get-objectname sel_poly) "AcDbCircle")

(if (= :vlax-false (vla-get-closed sel_poly))

(progn

(alert "Cette Polyligne/Spline n'est pas fermée")

(setq sel_poly nil)

)

)

)

(if sel_poly

(if (vlax-ldata-get sel_poly "Patrick_35")

(progn

(alert "Polyligne/Spline/Cercle déjà associé à un texte")

(setq sel_poly nil)

)

)

)

)

(progn

(alert "Ce n'est pas une Polyligne/Spline/Cercle")

(setq sel_poly nil)

)

)

)

)

(if sel_poly

(progn

(while (not sel_text)

(setq sel_text (car (entsel "\nSélection du texte : ")))

(if sel_text

(if (or (= (cdr (assoc 0 (entget sel_text))) "TEXT")

(= (cdr (assoc 0 (entget sel_text))) "MTEXT"))

(progn

(setq sel_text (vlax-ename->vla-object sel_text))

(if (vlax-ldata-get sel_text "Patrick_35")

(progn

(alert "Texte déjà associé à une Polyligne/Spline/Cercle")

(setq sel_text nil)

)

)

)

(progn

(setq sel_text nil)

(alert "Ce n'est pas un texte")

)

)

)

)

(if sel_text

(progn

(vla-put-textstring sel_text (rtos (vla-get-area sel_poly)))

(vlr-object-reactor (list sel_poly) sel_text '((:vlr-modified . modif_poly)(:vlr-erased . effacer_pt)))

(vlr-object-reactor (list sel_text) sel_poly '((:vlr-erased . effacer_pt)))

(vlax-ldata-put sel_poly "Patrick_35" sel_text)

(vlax-ldata-put sel_text "Patrick_35" sel_poly)

)

)

)

)

(princ)

)

 

(defun refaire_reacteurs(/ entp entt n)

(vl-load-com)

(if (not appli_patrick_35)

(progn

(setq appli_patrick_35 (ssget "x" (list (cons 102 "{ACAD_XDICTIONARY"))))

(if appli_patrick_35

(progn

(setq n 0)

(while (setq entp (ssname appli_patrick_35 n))

(setq entp (vlax-ename->vla-object entp))

(setq entt (vlax-ldata-get entp "Patrick_35"))

(vlr-object-reactor (list entp) entt '((:vlr-modified . modif_poly)(:vlr-erased . effacer_pt)))

(vlr-object-reactor (list entt) entp '((:vlr-erased . effacer_pt)))

(setq n (1+ n))

)

)

)

)

)

(princ)

)

 

(refaire_reacteurs)

Posté(e)

ok si je remplace

 

(strcat (rtos (vla-get-area obj) 2 1) "0 m2"))

 

par

 

(strcat (rtos (vla-get-area obj) 3 0) " sq.ft."))

 

j'obtiens un resultat du style:

 

23916'-9" sq.ft.

 

1/ c'est cette fois trop grand par un facteur 12: Comment je fais pour le diviser par 12?

2/J'ai toujours le pb d'unite: je voudrais qu'il affiche 23917 sq.ft. (=sans les " et les -9" qui sont le symbole des pieds/pouces, et juste avec juste le resultat dans l'unite la plus grande). Si ce n'est pas possible par le calcul, puis-je rajouter une ligne de code qui va les supprimer du resultat affiche?

 

merci

 

Posté(e)

Salut,

 

La fonction vla-get-area retourne la surface en unité de dessin au carré.

Si tu dessines en pouces le résultat sera des pouces carré.

Si tu veux des pieds carrés, et si je ne m'emmêle pas trop les pinceaux, il faut diviser le résultat par 12², soit 144.

Si tu veux un affichage décimal il faut utiliser 2 comme 2ème argument pour la fonction rtos.

Si tu veux arrondir à l'entier il faut utiliser 0 comme 3ème argument pour la fonction rtos

 

(strcat (rtos (/ (vla-get-area obj) 144) 2 0) " sq.ft.")

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci gile, ca marche,

 

Alors on met le signe / avant la fonction, c'est ca que je ne savais pas, je persistais a la mettre avant le diviseur et donc ca n'allait pas.

J'avais compris le coup du 0 pour arrondir, mais comme il calculait en pouce, il le transformait en pied, (12"= 1') d'ou le rapport de 12

Posté(e)

 

Ameliorations possibles:

 

Pour l'instant REA me demande de copier un texte, et ensuite le transforme en la surface.

 

1/ Comment creer un texte directement, sans copier un existant?

2/ Je voudrais en fait avoir 2 instances du texte qui se mettent a jour: 1 dans les surfaces du dessin, et le meme dans un tableau de surfaces a cote. Comment faire en utilisant la meme polyligne (pour l'instant quand une pline est deja 'utilisee' on ne peut plus la saisir pour un 2eme calcul?

 

merci

Posté(e)

Salut,

 

Regarde le LISP Pline_block sur cette page, il utilise des champs dynamiques comme attributs de bloc, donc possibilité d'extraction dans un tableau avec lien entr la polyligne et les attributs et entre les attributs et le tableau d'extraction.

Ce LISP est prévu pour être modifié selon les besoins de chacun (lire le PDF).

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é