Bien le bonjour... J'utilise la très bonne LISP "REA-ATT V2.00" mais je souhaiterai qu'il me force l'affichage des zéros. Je m'explique, lorsqu'il trouve 8.12m² il me l'écrit tel quel. mais quand il trouve un tout pile il me marque 8m² alors que je veux 8,00m². Petit rappelle... ;;;=================================================================
;;;
;;; REA-ATT.LSP V2.00
;;;
;;; Associer un Attribut à une poly fermée
;;;
;;; Copyright (C) Patrick_35
;;;
;;;=================================================================
(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) 10000) 2 2) "M2"))
(vlr-remove rea)
)
)
(defun effacer_pt(obj rea arg-list)(setq aa obj bb rea)
(vlax-ldata-delete obj "Patrick_35" (vlr-data rea))
(vlax-ldata-delete (vlr-data rea) "Patrick_35" obj)
(vlr-remove rea)
)
(defun c:srea-att(/ sel rec)
(if (setq sel (car (nentsel "Sélection d'un objet lié : ")))
(progn
(setq sel (vlax-ename->vla-object sel))
(if (setq rec (vlax-ldata-get sel "Patrick_35"))
(progn
(mapcar 'vlr-remove
(vl-remove-if-not
'(lambda (x) (if (eq (type (vlr-data x)) 'VLA-OBJECT)
(if (vlax-read-enabled-p (vlr-data x))
(or (eq (vla-get-ownerid (vlr-data x)) (vla-get-ownerid sel))
(eq (vla-get-ownerid (vlr-data x)) (vla-get-ownerid rec))
)
)
)
)
(cdr (car (vlr-reactors :vlr-object-reactor)))
)
)
(vlax-ldata-delete sel "Patrick_35" rec)
(vlax-ldata-delete rec "Patrick_35" sel)
(princ "\nLiaison effacée.")
)
(alert "Pas de liaison")
)
)
)
(princ)
)
(defun c:rea-att(/ 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 (member (cdr (assoc 0 (entget sel_poly))) '("POLYLINE" "LWPOLYLINE" "SPLINE" "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 attribut")
(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 (nentsel "\nSélection de l'attribut : ")))
(if sel_text
(if (= (cdr (assoc 0 (entget sel_text))) "ATTRIB")
(progn
(setq sel_text (vlax-ename->vla-object sel_text))
(if (vlax-ldata-get sel_text "Patrick_35")
(progn
(alert "Attribut déjà associé à une Polyligne/Spline/Cercle")
(setq sel_text nil)
)
)
)
(progn
(setq sel_text nil)
(alert "Ce n'est pas un attribut")
)
)
)
)
(if sel_text
(progn
(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)
(vla-put-textstring sel_text (strcat (rtos (/ (vla-get-area sel_poly) 10000) 2 2) "M2"))
)
)
)
)
(princ)
)
(defun refaire_reacteurs(/ entp entt)
(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))
(if (setq entt (vlax-ldata-get entp "Patrick_35"))
(progn
(vla-put-textstring entt (strcat (rtos (/ (vla-get-area entp) 10000) 2 2) "M2"))
(vlr-object-reactor (list entp) entt '((:vlr-modified . modif_poly)(:vlr-erased . effacer_pt)))
(vlr-object-reactor (list entt) entp '((:vlr-erased . effacer_pt)))
)
(vlax-ldata-delete entp "Patrick_35")
)
(setq n (1+ n))
)
)
)
)
)
(princ)
)
(refaire_reacteurs)
(princ "\nREA-ATT.LSP chargé. Tapez REA-ATT ou SREA-ATT pour l'exécuter")
(princ) MERCI d'avance de votre aide et soutien :P