kalaat Posté(e) le 20 mai 2009 Posté(e) le 20 mai 2009 Bonjour,je souhaiterais creer une icone qui me permette de dessiner le profil suivant en rentrant comme donnees:l'epaisseur du voile, l'epaisseur de semelle et la hauteur interieur.Est il possible de realiser cela avec un lisp?Merci de vos reponses http://img20.imageshack.us/img20/5458/piedroit.th.jpg' alt='piedroit.th.jpg'>
bseb67 Posté(e) le 20 mai 2009 Posté(e) le 20 mai 2009 Salut kalaat! Alors oui, c'est possible comme c'est simplement de la géométrie.Il faut juste savoir si tu veux une suite de lignes ou plutôt une polyligne? Je n'ai pas le temps maintenant, demain peut-être...sauf si quelqu'un d'autre te le fait entre-temps. a+ Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
kalaat Posté(e) le 20 mai 2009 Auteur Posté(e) le 20 mai 2009 salut bseb67,merci de ta reponse,je prefererais plutot une polyligne comme ca je pourrais extruder directement le profil sans passer par un contour.
bseb67 Posté(e) le 21 mai 2009 Posté(e) le 21 mai 2009 Salut, voici mon premier jet: ; VARIABLES GLOBALES (setq VAR_PROFIL_E1 1 VAR_PROFIL_E2 1 VAR_PROFIL_H 1 ) ; setq ;----------------------------------------; ; nom: dessine_profil ; ; role: dessine un profil avec pour point; ; de base p_ins, d'épaisseur1 e1, ; ; d'épaisseur2 e2 et de hauteur h ; ; param: p_ins => point3D ; ; e1 => entier ou réel ; ; e2 => entier ou réel ; ; h => entier ou réel ; ; retour: t si tout c'est bien passé ; ; nil sinon ; ; date: 21/05/2009 ; ; BLAES Sébastien ; ;----------------------------------------; (defun dessine_profil( p_ins e1 e2 h / res) (setq res nil) (cond ; on teste les paramètres ((/= (type p_ins) 'LIST) ) ((/= (length p_ins) 3) ) ((= (member (type e1) '(INT REAL)) nil) ) ((= (member (type e2) '(INT REAL)) nil) ) ((= (member (type h) '(INT REAL)) nil) ) (t ; on va calculer les 7 différents points de ce profil (setq ; p_ins correspond au coin bas gauche du profil p1 p_ins ; il faut ajouter en X e2+25+50 à p1 pour obtenir p2 p2 (mapcar '+ p1 (list (+ e2 25.0 50.0) 0.0 0.0)) ; il faut ajouter en Y e1 à p2 pour obtenir p3 p3 (mapcar '+ p2 (list 0.0 e1 0.0)) ; il faut soustraire en X 50 à p3 pour obtenir p4 p4 (mapcar '- p3 (list 50.0 0.0 0.0)) ; il faut soustraitre en X 25 et ajouter 25 en Y à p4 pour obtenir p5 p5 (mapcar '+ p4 (list -25.0 25.0 0.0)) ; il faut ajouter en Y h à p5 pour obtenir p6 p6 (mapcar '+ p5 (list 0.0 h 0.0)) ; il faut soustraire en X e2 à p6 pour obtenir p7 p7 (mapcar '- p6 (list e2 0.0 0.0)) lastent (entlast) ) ; setq ; on créer le profil (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 7) ; nombre de sommets '(70 . 1) ; 1 = polyligne fermée ou 0 = polyligne ouverte '(38 . 0.0) ; élévation (cons 10 (trans p1 1 0)) ; trans pour passer les coordonnées dans le scu en-cours (cons 10 (trans p2 1 0)) (cons 10 (trans p3 1 0)) (cons 10 (trans p4 1 0)) (cons 10 (trans p5 1 0)) (cons 10 (trans p6 1 0)) (cons 10 (trans p7 1 0)) (cons 210 (trans '(0 0 1) 1 0 T)) ) ) ; entmake ; on vérifie si la création a réussie (setq res (not (equal lastent (entlast)))) ) ) ; cond res ) ; dessine_profil ;----------------------------------------; ; nom: c:111 ; ; role: commande bouclante permettant de ; ; dessiner des profils en demandant; ; les paramètres nécessaires ; ; pour quitter => faire échap ; ; param: aucun ; ; retour: t si tout c'est bien passé ; ; nil sinon ; ; date: 21/05/2009 ; ; BLAES Sébastien ; ;----------------------------------------; (defun c:111() ; on charge les fonctions vl au cas où (vl-load-com) (cond ; on demande le point d'insertion du profil ((= (vl-catch-all-error-p (setq p_ins (vl-catch-all-apply 'getpoint (list "\nPoint d'insertion du profil?" )))) t) ; annulation ) ; on teste p_ins ((/= (type p_ins) 'LIST) ; on relance (c:111) ) ((/= (length p_ins) 3) ; on relance (c:111) ) (t (cond ; on demande la saisie d'e1 ((= (vl-catch-all-error-p (setq e1 (vl-catch-all-apply 'getreal (list (strcat "\nEpaisseur1 <" (rtos VAR_PROFIL_E1 2) "> ?") )))) t) ; annulation ) (t (if (/= e1 nil) (setq VAR_PROFIL_E1 e1) ) ; if (cond ; on demande la saisie d'e2 ((= (vl-catch-all-error-p (setq e2 (vl-catch-all-apply 'getreal (list (strcat "\nEpaisseur2 <" (rtos VAR_PROFIL_E2 2) "> ?") )))) t) ; annulation ) (t (if (/= e2 nil) (setq VAR_PROFIL_E2 e2) ) ; if (cond ; on demande la saisie d'h ((= (vl-catch-all-error-p (setq h (vl-catch-all-apply 'getreal (list (strcat "\nHauteur <" (rtos VAR_PROFIL_H 2) "> ?") )))) t) ; annulation ) (t (if (/= h nil) (setq VAR_PROFIL_H h) ) ; if (if (= (dessine_profil p_ins VAR_PROFIL_E1 VAR_PROFIL_E2 VAR_PROFIL_H) t) (progn ; on relance (c:111) ) ; progn ) ; if ) ) ; cond ) ) ; cond ) ) ; cond ) ) ; cond ) ; c:111 copie-colle le lisp dans un fichier .lsp, charge-le, et puis il suffit d'entrer 111 pour appeler la commande.La commande boucle, il faut saisir le point d'insertion qui est le coin bas gauche de ton profil, puis les épaisseurs et la hauteur.Ensuite, redonner le point d'insertion. pour les épaisseurs et la hauteur, si tu fais entrée, il prendra la dernière valeur saisie (ce qui entre <>). Par contre si tu recharges le lisp, ces valeurs seront de nouveau 1 1 1. Voilà, j'espère que c'est bon. bon week-end :) Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
kalaat Posté(e) le 21 mai 2009 Auteur Posté(e) le 21 mai 2009 super, c'est exactement le résultat que je cherchais à obtenir.Merci à toi d' avoir pris sur ton temps pour élaborer ce script,je vais me baser dessus pour élaborer d'autres profils qui vont me faire gagner beaucoup de temps.
RhymOne Posté(e) le 28 octobre 2009 Posté(e) le 28 octobre 2009 Bonjour les pros de la codif suite à la lecture de ce sujet j'ai essayé de reprendre le lisp de bseb67 et l'adapté pour que toutes les côtes soit paramétré.J'espère que je fais bien de reprendre de tel lisp qui sont vraiment bien expliqué et socissoné de manière à piger les liens direct...Maintenant la mise à jour faite je bloque au lancement de mon nouveau lisp.C'est peut etre un peu bete mais pourtant j'ai bien fait les choses.Dites moi ce que vous en pensez???Lisp sous le nom "112"; VARIABLES GLOBALES(setq VAR_PROFIL_E1 1 VAR_PROFIL_E2 1 VAR_PROFIL_H 1 VAR_PROFIL_L 1 VAR_PROFIL_R 1) ; setq ;----------------------------------------;; nom: dessine_profil ;; role: dessine un profil avec pour point;; de base p_ins, d'épaisseur1 e1, ;; d'épaisseur2 e2 et de hauteur h ;; param: p_ins => point3D ;; e1 => entier ou réel ;; e2 => entier ou réel ;; h => entier ou réel ;; l => entier ou réel ;; R => entier ou réel ;; retour: t si tout c'est bien passé ;; nil sinon ;; date: 21/05/2009 ;; BLAES Sébastien ;; Mise à jour pour paramètre ;; date:28/10/2009 ;; MAURCOT REMY ;;----------------------------------------;(defun dessine_profil2( p_ins e1 e2 h l r/ res) (setq res nil) (cond ; on teste les paramètres ((/= (type p_ins) 'LIST) ) ((/= (length p_ins) 3) ) ((= (member (type e1) '(INT REAL)) nil) ) ((= (member (type e2) '(INT REAL)) nil) ) ((= (member (type h) '(INT REAL)) nil) ) ((= (member (type l) '(INT REAL)) nil) ) ((= (member (type r) '(INT REAL)) nil) ) (t ; on va calculer les 7 différents points de ce profil (setq ; p_ins correspond au coin bas gauche du profil p1 p_ins ; il faut ajouter en X l=e2+r+(l-(e2+r)) à p1 pour obtenir p2 p2 (mapcar '+ p1 (list l 0.0 0.0)) ; il faut ajouter en Y e1 à p2 pour obtenir p3 p3 (mapcar '+ p2 (list 0.0 e1 0.0)) ; il faut soustraire en X (l-(e2+r)) à p3 pour obtenir p4 p4 (mapcar '- p3 (list ((l-e2-r) 0.0 0.0)) ; il faut soustraitre en X r et ajouter r en Y à p4 pour obtenir p5("Fruit 1/1") p5 (mapcar '+ p4 (list -r r 0.0)) ; il faut ajouter en Y h-e1-r à p5 pour obtenir p6 p6 (mapcar '+ p5 (list 0.0 (h-e1-r) 0.0)) ; il faut soustraire en X e2 à p6 pour obtenir p7 p7 (mapcar '- p6 (list e2 0.0 0.0)) lastent (entlast) ) ; setq ; on créer le profil (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 7) ; nombre de sommets '(70 . 1) ; 1 = polyligne fermée ou 0 = polyligne ouverte '(38 . 0.0) ; élévation (cons 10 (trans p1 1 0)) ; trans pour passer les coordonnées dans le scu en-cours (cons 10 (trans p2 1 0)) (cons 10 (trans p3 1 0)) (cons 10 (trans p4 1 0)) (cons 10 (trans p5 1 0)) (cons 10 (trans p6 1 0)) (cons 10 (trans p7 1 0)) (cons 210 (trans '(0 0 1) 1 0 T)) ) ) ; entmake ; on vérifie si la création a réussie (setq res (not (equal lastent (entlast)))) ) ) ; cond res) ; dessine_profil2 ;----------------------------------------;; nom: c:112 ;; role: commande bouclante permettant de ;; dessiner des profils en demandant;; les paramètres nécessaires ;; pour quitter => faire échap ;; param: aucun ;; retour: t si tout c'est bien passé ;; nil sinon ;; date: 21/05/2009 ;; BLAES Sébastien ;;----------------------------------------;(defun c:112() ; on charge les fonctions vl au cas où (vl-load-com) (cond ; on demande le point d'insertion du profil ((= (vl-catch-all-error-p (setq p_ins (vl-catch-all-apply 'getpoint (list "\nPoint d'insertion du profil?" )))) t) ; annulation ) ; on teste p_ins ((/= (type p_ins) 'LIST) ; on relance (c:112) ) ((/= (length p_ins) 3) ; on relance (c:112) ) (t (cond ; on demande la saisie d'e1 ((= (vl-catch-all-error-p (setq e1 (vl-catch-all-apply 'getreal (list (strcat "\nEpaisseur1 en pied ?") )))) t) ; annulation ) (t (if (/= e1 nil) (setq VAR_PROFIL_E1 e1) ) ; if (cond ; on demande la saisie d'e2 ((= (vl-catch-all-error-p (setq e2 (vl-catch-all-apply 'getreal (list (strcat "\nEpaisseur2 en tête ?") )))) t) ; annulation ) (t (if (/= e2 nil) (setq VAR_PROFIL_E2 e2) ) ; if (cond ; on demande la saisie d'l ((= (vl-catch-all-error-p (setq l (vl-catch-all-apply 'getreal (list (strcat "\nLongueur profil ?") )))) t) ; annulation ) (t (if (/= l nil) (setq VAR_PROFIL_L l) ) ; if (cond ; on demande la saisie d'r ((= (vl-catch-all-error-p (setq l (vl-catch-all-apply 'getreal (list (strcat "\nFruit ?") )))) t) ; annulation ) (t (if (/= r nil) (setq VAR_PROFIL_R r) ) ; if (cond ; on demande la saisie d'h ((= (vl-catch-all-error-p (setq h (vl-catch-all-apply 'getreal (list (strcat "\nHauteur profil ?") )))) t) ; annulation ) (t (if (/= h nil) (setq VAR_PROFIL_H h) ) ; if (if (= (dessine_profil p_ins VAR_PROFIL_E1 VAR_PROFIL_E2 VAR_PROFIL_H VAR_PROFIL_L VAR_PROFIL_T) t) (progn ; on relance (c:112) ) ; progn ) ; if ) ) ; cond ) ) ; cond ) ) ; cond ) ) ; cond ) ; c:112 DAO: AutoCAD(2D & 3D), CovadisCAO: 3D's MAX, Rhinoceros 3D, REVITGeoModeliSation: AutoCAD MEP, RhinoTerrainRendu: Vray for Rhino, Keyshot, LumionProgrammation: Grasshopper, Dynamo, VisualStudio C.V.Profil LinkedInBookSite web http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg
RhymOne Posté(e) le 30 octobre 2009 Posté(e) le 30 octobre 2009 Bonjour,NON pas de trouvaille d'erreur sur le lisp que j'ai retravailler et qui est entierement parametrable... DAO: AutoCAD(2D & 3D), CovadisCAO: 3D's MAX, Rhinoceros 3D, REVITGeoModeliSation: AutoCAD MEP, RhinoTerrainRendu: Vray for Rhino, Keyshot, LumionProgrammation: Grasshopper, Dynamo, VisualStudio C.V.Profil LinkedInBookSite web http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg
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