Aller au contenu

LISP Hachures + Métrés


Tom693

Messages recommandés

Bonjour Fraid,

Voici ma barre de commande.

Commande: AH
Pick a point within boundary: -boundary Commande inconnue "-BOUNDARY".  Appuyez sur F1 pour obtenir de l'aide.
Commande:
Commande: AH
Commande inconnue "AH".  Appuyez sur F1 pour obtenir de l'aide.
Commande: _AREA
Spécifiez le premier coin ou [Objet/Ajouter une aire/Soustraire une aire] <Objet>: O
Sélectionnez des objets: L
*Sélection non valable*
Attend un point ou Dernier
; erreur: Fonction annulée

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Je pense que le fichier à été développé en anglais mais il n'a pas été écris à l'internationale. Pour cela il suffit de rajouter un underscore ("_") devant chaque nom de commande dans ton fichier s'il n'y en a pas (idem pour les options de commandes). Par exemple remplacer "-BOUNDARY" par "_-BOUNDARY"

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

il y a 21 minutes, Luna a dit :

Coucou,

Je pense que le fichier à été développé en anglais mais il n'a pas été écris à l'internationale. Pour cela il suffit de rajouter un underscore ("_") devant chaque nom de commande dans ton fichier s'il n'y en a pas (idem pour les options de commandes). Par exemple remplacer "-BOUNDARY" par "_-BOUNDARY"

Bisous,
Luna

Bonjour Luna,

 

Je pense que cela en fait également partie. Toutefois j'essaie de suivre ou le message d'erreur s'affiche (je débute en LISP) et j'ai comme l'impression que après la commande  "_AREA" cela merde quelque part. Qu'il n'arrive pas à sélectionner et à supprimer.

Lien vers le commentaire
Partager sur d’autres sites

En regardant ton programme, même de base il est non fonctionnel...
Je vais regarder pour écrire quelque chose de plus solide parce qu'en l'état, ce programme ne sert à rien (peut-être suis-je médisante mais cela ressemble fortement à du ChatGPT qui baragouine du LISP sans comprendre ce qu'il fait..)

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

il y a 1 minute, Fraid a dit :

Quand je regarde ce lisp, ça pique les yeux ...

Si tu nous expliquais ce que tu veux faire exactement.

On peut surement t'écrire un p'tit truc moins bancale.

Sinon, je me permet de te souhaiter une bienvenu sur le site.

Ne te brules pas les yeux pour si peu ^^

 

Alors ce que j'aimerais est assez simple sur le papier. Je souhaite avec ce lisp qu'en créant une hachure, la surface apparait.

Le fichier que je vous ai partagé est issus de cette vidéo. C'est exactement le résultat que j'aimerais obtenir.

 

Lien vers le commentaire
Partager sur d’autres sites

Coucou,
Quelque chose comme cela peut-être ?

(defun c:AH (/ acc mode pt obj txt)
  (setq acc (getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (initget "Supprimer Conserver")
  (setq mode (cond ((getkword "\nSupprimer ou conserver le contour ? [Supprimer/Conserver] <Conserver> : ")) ("Conserver")))
  (command "_-BOUNDARY" (setq pt (getpoint "\nSpécifiez un point interne : ")) "")
  (setq obj (vlax-ename->vla-object (entlast)))
  (cond
    ( (= "Supprimer" mode)
      (setq txt (rtos (vla-get-area obj)))
      (entdel (entlast))
    )
    ( (= "Conserver" mode)
      (setq txt (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID obj)) ">%).Area \\f \"%lu2\">%"))
    )
  )
  (command "_-HATCH" "_Properties" "ANSI31" "" "" pt "")
  (command "_-TEXT" "_Justify" "_MC" pt "" "" txt)
  (setvar "OSMODE" acc)
  (princ)
)

Pour info, la première question "Supprimer/Conserver" permet de définir si tu souhaites supprimer le contour généré. S'il est supprimé alors le texte inséré sera un simple texte. Si le contour est conservé alors le texte sera sous forme de champs dynamique pointant sur la propriété "Aire" du contour, permettant ainsi de mettre à jour le texte si le contour est modifié.

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

il y a 10 minutes, Luna a dit :

Coucou,
Quelque chose comme cela peut-être ?

(defun c:AH (/ acc mode pt obj txt)
  (setq acc (getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (initget "Supprimer Conserver")
  (setq mode (cond ((getkword "\nSupprimer ou conserver le contour ? [Supprimer/Conserver] <Conserver> : ")) ("Conserver")))
  (command "_-BOUNDARY" (setq pt (getpoint "\nSpécifiez un point interne : ")) "")
  (setq obj (vlax-ename->vla-object (entlast)))
  (cond
    ( (= "Supprimer" mode)
      (setq txt (rtos (vla-get-area obj)))
      (entdel (entlast))
    )
    ( (= "Conserver" mode)
      (setq txt (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID obj)) ">%).Area \\f \"%lu2\">%"))
    )
  )
  (command "_-HATCH" "_Properties" "ANSI31" "" "" pt "")
  (command "_-TEXT" "_Justify" "_MC" pt "" "" txt)
  (setvar "OSMODE" acc)
  (princ)
)

Pour info, la première question "Supprimer/Conserver" permet de définir si tu souhaites supprimer le contour généré. S'il est supprimé alors le texte inséré sera un simple texte. Si le contour est conservé alors le texte sera sous forme de champs dynamique pointant sur la propriété "Aire" du contour, permettant ainsi de mettre à jour le texte si le contour est modifié.

Bisous,
Luna

C'est exactement ca mais une erreur apparait au moment du placement du texte.

image.png.c445e8d20f186e1d38ada81aee10ca9f.png

Lien vers le commentaire
Partager sur d’autres sites

il y a 36 minutes, lecrabe a dit :

Hello @Tom693

SVP et si tu essayais la routine jointe ... Un poil differente de ton besoin !?

Bye, lecrabe

 

HatchArea.zip 77.94 Ko · 1 téléchargement

Salut lecrabe et merci pour ton retour. 

Je vois que tu es toujours à l'affut pour aider les gens 🙂 

L'idée est d'avoir le texte qui s'affiche au milieu de la hachure avec l'aire de celle-ci. Les tables par calques sont pratiques mais dans le cas présent c'est pour avoir un plan avec l'ensemble des superficies sans avoir à créer des textes dans tout les sens. 

Lien vers le commentaire
Partager sur d’autres sites

il y a 3 minutes, Luna a dit :

Alors... Il s'agit d'utiliser mon programme SANS MODIFICATIONS car je n'ai pas écrit "_OSMODE" mais "OSMODE"... ^^"

Bisous,
Luna

Ah oui pardon, ca c'était en tentant autre chose car j'avais un message d'erreur ^^.

C'est la commande inconnue "AREA".

Cela fonctionne t il chez toi ? Peut-être ai-je trop de lisp tenté avec "AH"

image.png.f7910f627868cd2f227d0d8ce481941d.png

Lien vers le commentaire
Partager sur d’autres sites

En cherchant autre chose je viens de tomber sur ceci avec la fonction _isAnnotative

Donc voilà le code complété

(defun _isAnnotative ( style / object annotx )
    (and
      (setq object (tblobjname "STYLE" style))
      (setq annotx (cadr (assoc -3 (entget object '("AcadAnnotative")))))
      (= 1 (cdr (assoc 1070 (reverse annotx))))
    )
  )
(defun c:ESSAICOMMANDE (/ acc mode pt obj txt)
  (setq acc (getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (initget "Supprimer Conserver")
  (setq mode (cond ((getkword "\nSupprimer ou conserver le contour ? [Supprimer/Conserver] <Conserver> : ")) ("Conserver")))
  (command "_-BOUNDARY" (setq pt (getpoint "\nSpécifiez un point interne : ")) "")
  (setq obj (vlax-ename->vla-object (entlast)))
  (cond
    ( (= "Supprimer" mode)
      (setq txt (rtos (vla-get-area obj)))
      (entdel (entlast))
    )
    ( (= "Conserver" mode)
      (setq txt (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID obj)) ">%).Area \\f \"%lu2\">%"))
    )
  )
  (command "_-HATCH" "_Properties" "ANSI31" "" "" pt "")
  (if (_isAnnotative (getvar "TEXTSTYLE"))
    (command "_-TEXT" "_Justify" "_MC" pt "" txt)
    (command "_-TEXT" "_Justify" "_MC" pt "" "" txt)
    )
  (setvar "OSMODE" acc)
  (princ)
)

Merci Lee-Mac

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Le 23/11/2023 à 18:16, OlivierR a dit :

En cherchant autre chose je viens de tomber sur ceci avec la fonction _isAnnotative

Donc voilà le code complété

(defun _isAnnotative ( style / object annotx )
    (and
      (setq object (tblobjname "STYLE" style))
      (setq annotx (cadr (assoc -3 (entget object '("AcadAnnotative")))))
      (= 1 (cdr (assoc 1070 (reverse annotx))))
    )
  )
(defun c:ESSAICOMMANDE (/ acc mode pt obj txt)
  (setq acc (getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (initget "Supprimer Conserver")
  (setq mode (cond ((getkword "\nSupprimer ou conserver le contour ? [Supprimer/Conserver] <Conserver> : ")) ("Conserver")))
  (command "_-BOUNDARY" (setq pt (getpoint "\nSpécifiez un point interne : ")) "")
  (setq obj (vlax-ename->vla-object (entlast)))
  (cond
    ( (= "Supprimer" mode)
      (setq txt (rtos (vla-get-area obj)))
      (entdel (entlast))
    )
    ( (= "Conserver" mode)
      (setq txt (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-ObjectID obj)) ">%).Area \\f \"%lu2\">%"))
    )
  )
  (command "_-HATCH" "_Properties" "ANSI31" "" "" pt "")
  (if (_isAnnotative (getvar "TEXTSTYLE"))
    (command "_-TEXT" "_Justify" "_MC" pt "" txt)
    (command "_-TEXT" "_Justify" "_MC" pt "" "" txt)
    )
  (setvar "OSMODE" acc)
  (princ)
)

Merci Lee-Mac

Olivier

Merci à toi Olivier et merci à vous tous pour votre aide 🙂

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

En reprenant le lisp original et sans trop chercher à faire des fonctions lisp :

(defun C:AH ( / pt1 a1 aa)
 (setq aa 0)
 (setq pt1 (getpoint "\nPick a point within boundary: "))
 (setq pt2 pt1)
(while (/= pt1 nil)
 (command "_-BOUNDARY" pt1 "")
 (command "_AREA" "_Object" "_Last")
 (command "_ERASE" "_Last" "")
 (setq Temp1 (getvar "area"))
 (setq bb Temp1)
 (setq aa ( + aa bb))
(setq pt1 (getpoint "\nPick a point within boundary: "))
)
(setq aa (rtos (* aa 1.0) 2 2))
(command "_TEXT" pt2 "3" "" aa)
(command "_-BHATCH" "_Properties" "ANSI31" " ")
)

(defun C:HA ( / pt1 pt2 pt3 a1 aa)
 (command "_-BHATCH" "_Properties" "ANSI31" " ")
)

 

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

AutoCAD, Revit, GstarCAD, Fisa-CAD, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é