fograf02 Posté(e) le 22 janvier 2008 Posté(e) le 22 janvier 2008 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
(gile) Posté(e) le 22 janvier 2008 Posté(e) le 22 janvier 2008 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
fograf02 Posté(e) le 22 janvier 2008 Auteur Posté(e) le 22 janvier 2008 Et voila... avec (gile) c'est magique, tout a l'air si simple
rafael7776 Posté(e) le 23 janvier 2008 Posté(e) le 23 janvier 2008 merci pour ce petit lisp qui peux m'aider aussimais comment il marche j'arrive pas a le lancer
speedy Posté(e) le 23 janvier 2008 Posté(e) le 23 janvier 2008 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
rafael7776 Posté(e) le 23 janvier 2008 Posté(e) le 23 janvier 2008 merci speedyj'ai réussi en même temps que tu as marqué ton messageje trouve ce petit lisp trop bienmoi qui connais rien en lisp je voudrais savoir si c possible de rajouter des truc a ce lispalors 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
(gile) Posté(e) le 23 janvier 2008 Posté(e) le 23 janvier 2008 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
fograf02 Posté(e) le 23 janvier 2008 Auteur Posté(e) le 23 janvier 2008 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?
(gile) Posté(e) le 23 janvier 2008 Posté(e) le 23 janvier 2008 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant