Aller au contenu

Messages recommandés

Posté(e)

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'>

Posté(e)

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...

Posté(e)

salut bseb67,

merci de ta reponse,

je prefererais plutot une polyligne comme ca je pourrais extruder directement le profil sans passer par un contour.

 

 

Posté(e)

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...

Posté(e)

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.

 

  • 5 mois après...
Posté(e)

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), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

Posté(e)

Bonjour,

NON pas de trouvaille d'erreur sur le lisp que j'ai retravailler et qui est entierement parametrable...

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

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é