Aller au contenu

Des nombres, et des carres


Messages recommandés

Posté(e)

Bonjour,

 

Est-ce que quelqu'un aurait un lisp pour faire rapidement une visualisation d'un programme architectural.

 

C'e que je cherche: on rentre la surface et le nom de l'espace, et il dessine un carre (ou un cercle) de cette surface avec le nom et le nb de m2 au centre. Eventuellement une hachure solide de couleur en fond. et on groupe le tout pour pouvoir le deplacer en le cliquant.

(Si en plus c'est interactif, ce serait encore mieux, mais bon...)

 

merci

Posté(e)

Salut,

 

Un petit truc vite fait

 

(defun c:surfcarre (/ nom aire pt)
 (and
   (setq nom (getstring T "\Nom de la pièce: "))
   (setq aire (getreal "\nAire de la pièce: "))
   (setq pt (getpoint "\nPoint d'insertion: "))
   (setq len (/ (sqrt (* 2 aire)) 2))
   (makegroup
     (list
(entmakex
  (list
    '(0 . "LWPOLYLINE")
    '(100 . "AcDbEntity")
    '(100 . "AcDbPolyline")
    '(90 . 4)
    '(70 . 1)
    (cons 10 (polar pt (* 1.25 pi) len))
    (cons 10 (polar pt (* 1.75 pi) len))
    (cons 10 (polar pt (* 0.25 pi) len))
    (cons 10 (polar pt (* 0.75 pi) len))
  )
)
(entmakex
  (list
    '(0 . "MTEXT")
    '(100 . "AcDbEntity")
    '(100 . "AcDbMText")
    (cons 10 pt)
    '(71 . 5)
    '(72 . 5)
    (cons 1 (strcat nom "\\P" (rtos aire)))
  )
)
     )
   )
 )
 (princ)
)

(defun c:surfcercle (/ nom aire pt)
 (and
   (setq nom (getstring T "\Nom de la pièce: "))
   (setq aire (getreal "\nAire de la pièce: "))
   (setq pt (getpoint "\nPoint d'insertion: "))
   (makegroup
     (list
(entmakex
  (list
    '(0 . "CIRCLE")
    (cons 10 pt)
    (cons 40 (sqrt (/ aire pi)))
  )
)
(entmakex
  (list
    '(0 . "MTEXT")
    '(100 . "AcDbEntity")
    '(100 . "AcDbMText")
    (cons 10 pt)
    '(71 . 5)
    '(72 . 5)
    (cons 1 (strcat nom "\\P" (rtos aire)))
  )
)
     )
   )
 )
 (princ)
)

;; MAKEGROUP
;; Crée un groupe sans nom avec les entités contenues dans la liste
;;
;; Argument
;; lst : liste des entités (ename)
;;
;; Retour
;; le groupe créé (ename) ou nil

(defun makegroup (lst / dict ind)
 (setq dict (dictsearch (namedobjdict) "ACAD_GROUP")
ind "GRP1")
 (while (member (cons 3 ind) dict)
   (setq ind (strcat "GRP" (itoa (1+ (atoi (substr ind 4))))))
 )
 (dictadd
   (cdr (assoc -1 dict))
   ind
   (entmakex
     (append
(list
  '(0 . "GROUP") '(100 . "AcDbGroup") '(300 . "") '(70 . 1) '(71 . 1))
(mapcar (function (lambda (x) (cons 340 x))) lst)
     )
   )
 )
) 

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

Posté(e)

Bonjour

 

_appload ou dans Outils/charger application tu charges ton fichier "surfcarre.lsp" et ensuite tu le lance à ta ligne de commande :

surfcarre

 

@+

 

Michel a

Posté(e)

merci speedy

j'ai réussi en même temps que tu as marqué ton message

je trouve ce petit lisp trop bien

moi qui connais rien en lisp je voudrais savoir si c possible de rajouter des truc a ce lisp

alors en premier pourvoir mettre comme un numero comme pour le nom et en deux est ce que c possible quand on modifie la surface du carree que la valeur change automatiquement .

 

merci a vous pour ce jolie travail

Posté(e)

Salut,

 

Pour répondre à la question 1(j'ai surligné ce que j'ai ajouté, si tu veux le faire pour surfcercle):

 

NOTA : la routine makegroup doit être chargée

 

(defun c:surfcarre (/ [surligneur]num[/surligneur] nom aire pt)
 (and
   [surligneur](setq num (getint "\nNuméro de la pièce: "))[/surligneur]
   (setq nom (getstring T "\Nom de la pièce: "))
   (setq aire (getreal "\nAire de la pièce: "))
   (setq pt (getpoint "\nPoint d'insertion: "))
   (setq len (/ (sqrt (* 2 aire)) 2))
   (makegroup
     (list
(entmakex
  (list
    '(0 . "LWPOLYLINE")
    '(100 . "AcDbEntity")
    '(100 . "AcDbPolyline")
    '(90 . 4)
    '(70 . 1)
    (cons 10 (polar pt (* 1.25 pi) len))
    (cons 10 (polar pt (* 1.75 pi) len))
    (cons 10 (polar pt (* 0.25 pi) len))
    (cons 10 (polar pt (* 0.75 pi) len))
  )
)
(entmakex
  (list
    '(0 . "MTEXT")
    '(100 . "AcDbEntity")
    '(100 . "AcDbMText")
    (cons 10 pt)
    '(71 . 5)
    '(72 . 5)
    (cons 1 (strcat [surligneur]num "\\P"[/surligneur] nom "\\P" (rtos aire)))
  )
)
     )
   )
 )
 (princ)
) 

 

Pour la question 2 je ne comprends pas bien, ici on crée un objet en fonction d'une surface donnée et tu demandes l'inverse, à savoir donner la surface d'un objet.

Regarde le LISP Pline_block sur cette page, il permet d'insérer un bloc contenant un champ dynamique qui donne la surface de la polyligne à laquelle il est lié (Le ZIP contient un "mode d'emploi" en PDF).

 

PS pour le chargement des LISP, vois ici.

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

Posté(e)

Alors moi aussi j'ai une question:

 

Quelle est la ligne qui definit les unites de la racine carree de l'aire, de facon a pouvoir adapter le carre selon que le dessin est en m, cm ou mm, (ou sq.ft pour les malheureux comme moi qui ne travaillent pas en systeme metrique).

Je suppose que c'est

 

(setq len (/ (sqrt (* 2 aire)) 2))

mais pourquoi la racine de 2 aire , et non de aire simplement, et a quoi sert le 2) a la fin de la ligne?

 

 

 

...et un truc simple: comment rajouter un texte m2 apres la surface?

 

Posté(e)

Salut,

 

Il n'est pas question d'unités dans le calcul.

 

(setq len (/ (sqrt (* 2 aire)) 2))

 

len correspond à la demi diagonale du carré soit la racine carrée de l'aire (le côté) multipliée par racine de 2 sur 2, ce qui simplifié donne : racine carré de 2 * aire divisée par 2.

 

J'ai choisi la demi diagonale pour définir les sommets du carré en coordonnées polaires à partir du centre.

 

comment rajouter un texte m2 apres la surface?

 

en remplaçant :

(cons 1 (strcat nom "\\P" (rtos aire)))

par

(cons 1 (strcat nom "\\P" (rtos aire) " m2"))

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é