Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Toujours debutant en lip,

 

J aurai besoin d un lisp pour ecrire la valeur de la surface d une polyligne avec deux chiffres apres la virgule ,

et ce, apres avoir clique sur la polyligne. (PS : je ne souhaite pas passer par les champs...)

 

Merci d avance pour votre aide...

Posté(e)

Salut,

 

pour t'aider à réaliser ton lisp, voici quelques pistes :

 

- Sélection de la polyligne :

entsel

- Transformation en objet :

(vlax-ename->vla-object car (entsel))

- Utilise la fonction

(vlax-dump-object "nomdelobjet" T)

pour connaitre les propriétées de ta polyligne. Ainsi tu trouvera l'élément donnant l'aire.

 

- récupère cette valeur avec :

(vla-get ....)

- ensuite tu insère un MTEXT dans lequel tu injecte l'aire obtenue

- tu laisse la main à l'utilisateur lors de la commande "MOVE" pour qu'il place le texte ou bon lui semble.

 

N'hésite à poster des bouts de ton code pour que l'on t'aide si tu rencontre des difficultées. ;)

PIRO Charles

Developpeur Revit, RV/RA - Formateur Revit

PIRO CIE

Posté(e)

yo

plus haut c'est pour du visual lisp

maintenant si tu veux le faire en lip (comme tu dis)

 

il faut

- lancer la command "aire" sur ta polylign

- récupérer la valeur surface dans la variable "area"

- après l’insérer dans texte

- pour les 2 chiffres apres la virgule voir la fonction

(rtos (getvar "area") 2 2)

dans les 2 cas fait ton prog apres il y aura toujours quelqu'un pour d'aider

te le donner tout cuit ne te fera pas progresser

bon courage

Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

Posté(e)

voilà ce que j'ai, mais c'est 1 chiffre après la virgule, je pense qi'il n'y a pas grand chose à changer pour 2 chiffres, mais je fais moi aussi par tatonnement. bon courage

 

ps, il faut que le style de texte ait une hauteur

SURF.LSP

Posté(e)

Salut à tous,

 

Pour 2 décimales, je pense qu'il faut changer cette ligne

(setq a (rtos (/ c 10000) 2 1))

par celle-ci

(setq a (rtos (/ c 10000) 2 2))

 

Et je pense aussi qu'il faut éviter de nommer ton LiSP "S", car cette commande est un alias à Style...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut,

 

c'est un bon début mais perfectible !!

 

(defun c:s ()
(princ "\nChoix d'une polyligne:")
(setq s (ssget))
(command "_area" "e" s)
(setq c (getvar "area"))
(setq a (rtos (/ c 10000) 2 1))
(setq b (strcat a "m2"))
(princ "\n POSITION ET ANGLE DU TEXTE \n")
(command "texte" pause pause B)
;(setq x (entlast))
;(PRINC "\n POSITION DU TEXTE \n")
;(command "deplacer" x "" "0,0" pause)
(princ "\n TRAITEMENT TERMINE \n")
)

 

(defun c:s ()

Comme l'a dis denis au dessus, S comme lettre c'est pas top. SURF c'est mieux.

Il est également préférable de déclarer tes variables comme ceci :

(defun c:SURF ( / s c a b x)

 

(princ "\nChoix d'une polyligne:")
(setq s (ssget))

Pour la sélection d'une polyligne, tu peux faire comme ceci :

(setq s (entsel "\nSélectionner une polyligne: "))

 

Pour la précision, Denis t'a répondu !

 

Sinon, pour les commandes, utilise les commandes internationales. Pour les connaitres utilise cette syntaxe

(getcname "commande")

Donc pour "texte", ce sera "_TEXT" et pour deplacer "_MOVE".

 

La fin de ton prog est améliorable mais c'est surtout une question de préférence !

PIRO Charles

Developpeur Revit, RV/RA - Formateur Revit

PIRO CIE

Posté(e)

Ces derniers jours une connaissance (pas virtuelle) m'a demandé un coup de main pour lui écrire un lisp sur des longueurs cumulées de polyligne.

 

Je lui ai pondu ça, si ça peut vous donner des idées...

 

(vl-load-com)
(defun c:cumul_length ( / js n ename l_cumul ent_text dxf_ent key)
   (princ "\nSélectionner les polylignes pour avoir le cumul.")
   (or
       (setq js (ssget "_I" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))
       (setq js (ssget "_P" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))
   )
   (cond
       (js
           (sssetfirst nil js)
           (initget "Existant Nouveau _Existent New")
           (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")
               (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>")))))
           )
       )
       (T
           (setq js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))
       )
   )
   (cond
       (js
           (setq l_cumul 0.0)
           (repeat (setq n (sslength js))
               (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n)))))
               (if (vlax-property-available-p ename 'Length)
                   (setq l_cumul (+ (vlax-get ename 'Length) l_cumul))
               )
           )
           (princ (strcat "\nLe total cumulé des polylignes sélectionnées est de " (rtos l_cumul)))
           (setq ent_text
               (entmakex
                   (list
                       (cons 0 "MTEXT")
                       (cons 100 "AcDbEntity")
                       (cons 100 "AcDbMText")
                       (cons 1 (strcat (rtos l_cumul 2 2) " cm"))
                       (cons 10 (trans (getvar "VIEWCTR") 0 1))
                       (cons 40 (getvar "TEXTSIZE"))
                       (cons 50 (- 0 (getvar "VIEWTWIST")))
                       (cons 7 (getvar "TEXTSTYLE"))
                       (cons 71 7)
                       (cons 72 5)
                   )
               )
               dxf_ent (entget ent_text)
           )
           (while (and (setq key (grread T 4 0)) (/= (car key) 3))
               (cond
                   ((eq (car key) 5)
                       (setq dxf_ent (subst (cons 10 (trans (cadr key) 1 0)) (assoc 10 dxf_ent) dxf_ent))
                       (entmod dxf_ent)
                   )
               )
           )
       )
   )
   (prin1)
)

 

De mon coté j'ai voulu essayer une version avec des repères multiple, la voilà..

 

(vl-load-com)
(defun c:cumul_length ( / js n ename l_cumul l_pt nb)
 (princ "\nSélectionner les polylignes pour avoir le cumul.")
 (or
   (setq js (ssget "_I" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))
   (setq js (ssget "_P" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>"))))
 )
 (cond
   (js
     (sssetfirst nil js)
     (initget "Existant Nouveau _Existent New")
     (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")
       (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>")))))
     )
   )
   (T
     (setq js
       (ssget
         '(
           (0 . "*POLYLINE")
           (-4 . "<NOT")
             (-4 . "&") (70 . 112)
           (-4 . "NOT>")
         )
       )
     )
   )
 )
 (cond
   (js
     (setq l_cumul 0.0 l_pt nil tmp_l '())
     (repeat (setq n (sslength js))
       (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n)))))
       (if (vlax-property-available-p ename 'Length)
         (setq
           l_cumul (+ (vlax-get ename 'Length) l_cumul)
           l_pt (cons (vlax-curve-GetpointAtParam ename (* 0.5 (vlax-curve-getEndParam ename))) l_pt)
         )
       )
     )
     (princ (strcat "\nLe total cumulé des polylignes sélectionnées est de " (rtos l_cumul)))
     (entmake
       (append
         (list
           '(0 . "MULTILEADER")
           '(100 . "AcDbEntity")
           '(100 . "AcDbMLeader")
             '(300 . "CONTEXT_DATA{")
             '(40 . 1.0)
             '(41 . 4.0)
             '(140 . 4.0)
             '(145 . 2.0)
             '(174 . 1)
             '(175 . 6)
             '(176 . 2)
             '(177 . 0) 
             '(290 . 1)
             (cons 304 (rtos l_cumul))
             '(11 0.0 0.0 1.0)
             '(13 1.0 0.0 0.0)
             '(42 . 0.0)
             '(43 . 0.0)
             '(44 . 0.0)
             '(45 . 1.0)
             '(170 . 1)
             '(90 . -1073741824)
             '(171 . 3)
             '(172 . 5)
             '(91 . -1073741824)
             '(141 . 0.0)
             '(92 . 15726992)
             '(291 . 0)
             '(292 . 0)
             '(173 . 0)
             '(293 . 0)
             '(142 . 0.0)
             '(143 . 0.0)
             '(294 . 0)
             '(295 . 0)
             '(296 . 0)
             '(110 122.689 121.446 0.0)
             '(111 1.0 0.0 0.0)
             '(112 0.0 1.0 0.0)
             '(297 . 0)
               '(302 . "LEADER{")
               '(290 . 1)
               '(291 . 1)
               (cons 10 (list (/ (apply '+ (mapcar 'car l_pt)) (setq nb (length l_pt))) (/ (apply '+ (mapcar 'cadr l_pt)) nb)))
               '(11 -1.0 0.0 0.0)
               '(90 . 0)
               '(40 . 18.4914)
         )
         (repeat nb
           (setq tmp_l
             (append
               '((304 . "LEADER_LINE{"))
               (list (cons 10 (nth (setq nb (1- nb)) l_pt)))
               (list (cons 91 nb))
               '((305 . "}"))
               tmp_l
             )
           )
         )
         (list
               '(303 . "}")
             '(301 . "}")
           '(90 . 279680)
           '(170 . 1)
           '(91 . -1056964608)
           '(171 . -2)
           '(290 . 1)
           '(291 . 1)
           '(41 . 0.36)
           '(42 . 4.0)
           '(172 . 2)
           '(173 . 1)
           '(95 . 6)
           '(174 . 1)
           '(175 . 2)
           '(92 . -1056964608)
           '(292 . 0)
           '(93 . -1056964608)
           '(10 1.0 1.0 1.0)
           '(43 . 0.0)
           '(176 . 0)
           '(293 . 0)
           '(294 . 0)
           '(178 . 0)
           '(179 . 3)
           '(45 . 1.0)
         )
       )
     )
     (sssetfirst nil (ssadd (entlast)))
   )
 )
 (prin1)
)

 

Pour cette dernière le repère est grippé, il suffit d'activé une poignée sur le texte pour pouvoir la déplacer et que les ligne de repères suivent.

 

Amusez vous !

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

Posté(e)

Hello Bruno

 

Merci pour la communaute et BON retablissement !

 

et avec 2 micro-modifs j'en ai derive la version pour les Aires/Surfaces ...

 

Bye, lecrabe

Autodesk Expert Elite Team

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é