Aller au contenu

Problemes variable DCL


Messages recommandés

Invité adri7786
Posté(e)

Bonjour a tous,

 

J'aurais besoin de votre aides précieuse, voila mon problèmes.

 

je suis en train de réaliser une routine pour l'automatisation d'armature, ( étant projeteur en bureau d’étude béton) ma routine fait appelle a des case DCL dans lesquelles je rentre mais valeur d'enrobage, nuance d'aciers, etc...

 

Le soucis et que a chaque fois que ma DCL se lance, elle garde les valeur anciennement entrer, elle ne se remette pas a 0 automatiquement, si je clique sans entrer de valeur jais les caractéristique précédente...

 

Comment faire pour réinitialisé toute les valeur de la DCL a Zéro, ou mettre un message d'erreur si une valeur n'est pas rentrer.

 

Si vous avez besoin de mon LISP et de mon DCL pour m'aider faite moi signe, je vous mettrais le code.

 

Cordialement et merci de vos réponses.

Posté(e)

salut adri7786,

 

Normalement, si je comprends bien, tu initialises une dcl avec des variables.

Donc il te suffit simplement d'initialiser tes variables avant l'appel à la dcl.

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Invité adri7786
Posté(e)

salut adri7786,

 

Normalement, si je comprends bien, tu initialises une dcl avec des variables.

Donc il te suffit simplement d'initialiser tes variables avant l'appel à la dcl.

 

je ne sait pas si je me suis bien exprimer en faite,

 

en faite c'est dans ma DCL que je rentre mes variable, donc je ne peut pas les initialisé avant de lancer la DCL.

 

Par exemble, pour le choix de la nuance d'acier jai une liste deroulante avec : HA6 / HA8 / HA10 / HA12...etc

quand je lance la routine, je selectione HA6 puis je valide tout est ok mais quand je relance ma routine ça garde la valeur HA6 en memoire et si je refait pas une selection que je clique direct sur OK cela me mettra HA6 comme valeur .

 

et de meme pour les "edit_box et tout.

Invité adri7786
Posté(e)

je vous transmet le code de mon Lisp et de ma boite DCL , si quelqu'un pourrait maider ça serait vraiment gentil.

 

toutes modification ou tous conseil son bon a prendre.

 

Voila le LISP

 

; Réalisation d"un Cadre de feraillage auto


(defun cadre()


  	
  	(setq dcl_id (load_dialog "CadreDCL.DCL")) 			;charge la boite de dialogue
  	(if (not (new_dialog "cadre_dcl" dcl_id) 			;si il ne la trouve pas il sort "exit"
) (exit))
  
  	
 	(action_tile "E" "(setq E1 $value)") 
 	(action_tile "Enr" "(setq Enr1 $value)")
  	(action_tile "Nuance" "(setq choix $value)")
  	(action_tile "bas" "(setq bas1 $value)")
  	(action_tile "centre" "(setq centre1 $value)")
  	(action_tile "haut" "(setq haut1 $value)")
  	(action_tile "Ep" "(setq Epingle1 $value)")
  	(action_tile "Ep2" "(setq Epingle2 $value)")
  	(action_tile "Nbr_haut" "(setq Nbr_haut1 $value)")
    	(action_tile "Nuance_haut" "(setq Nuance_haut1 $value)")
    	(action_tile "Long_haut" "(setq Long_haut1 $value)")
  	(action_tile "Nbr_centre" "(setq Nbr_centre1 $value)")
    	(action_tile "Nuance_centre" "(setq Nuance_centre1 $value)")
    	(action_tile "Long_centre" "(setq Long_centre1 $value)")

  	

 (action_tile "accept" "(done_dialog 1)") 
 (action_tile "cancel" "(done_dialog 0)")


(setq ok  (start_dialog)) 						
(unload_dialog dcl_id)
  
   (princ)
  
)

(defun c:cadre1()
 
    
 ;Variable pour création du Cadre
 (command "calque" "ch" "G03 Armatures Coupes" "ac" "G03 Armatures Coupes" "")
 
   	 (setvar "osmode" 15359)
 
 	  (setq p1 (getpoint "\ndonner le point inferieur gauche : "))   ; affecte a P1 la valeur du point cliqué sous autocad
  (setq p2 (getpoint "\ndonner le point inferieur droit : "))
  (setq p3 (getpoint "\ndonner le point superieur gauche : "))
 	  (setq p4 (getpoint "\ndonner le point superieur droit : "))
 
(cadre)
 
  
 
 	 
 	 (setq E12 (atoi E1))						;affecte a la var.E12 la valeur de E1 (entrer dans la DCL)
 	 (setq Enr12 (atof Enr1))					;affecte a la var.Enr12 la valeur de Enr1 (entrer dans la DCL)
 	 (setq bas12 (atoi bas1))
 	 (setq Nbr_haut12 (atoi Nbr_haut1))
 	 (setq Long_haut12 (atoi Long_haut1))

 	 
 	
 	(if (= choix "0") ( setq choix12  "HA6"))			;
(if (= choix "1") ( setq choix12  "HA8"))			;
(if (= choix "2") ( setq choix12  "HA10"))			;
(if (= choix "3") ( setq choix12  "HA12"))			;;affecte la nuance de l'acier a la var. "choix12" en fonction de la variable "choix" de la liste deroulante de la DCL
(if (= choix "4") ( setq choix12  "HA14"))			;
(if (= choix "5") ( setq choix12  "HA16"))			;
(if (= choix "6") ( setq choix12  "HA20"))			;


 	



 		 		   
  (setq MiC (getpoint "\ndonner l'interieur du cadre : ")) 	; Affecte a la var.MiC les coordonées d'un point a l'interieur de la poutre en section
 	  (setq Ang (atan (/ Enr12 Enr12)))				; valeur de l'angle entre le point p1 et le point inferieur gauche du cadre d'armature						
 	  (setq Ca (* (* Enr12 Enr12) 2))				; valeur au carré de la distance entre P1 et le point inf.gauche du cadre
 	  (setq Dist (sqrt Ca))						; valeur réel de la distance P1 au point inf.gauche du cadre
 	  (setq Dist_HA (sqrt 0.0002))
  (setq Dist_ha1 (- Dist Dist_HA))
	
 (setvar "cmdecho" 0)							;
 (setq avant (getvar "osmode"))					;;;;; a placer a chaque LISP : enregistre les valeur de laccrochage objet
 (setvar "osmode" 0)							; annule l'accrochage objet

(setq D1 (distance p1 p3))						; distance de la poutre (sens de la hauteur)
(setq d1 (- D1 Enr12 Enr12 ))						; distance du cadre, = poutre - enrobage (sens de la hauteur)
(setq D2 (distance p1 p2))						; distance de la poutre (sens de la largeur)
(setq d2 (- D2 Enr12 Enr12))						; distance du cadre, = poutre - enrobage (sens de la largeur)
(Setq C1 (polar p1 Ang Dist))						; affecte a C1 le point inf.gauche du cadre avec p1 ang (l'angle du a l'enrobage) dist( distance entre p1 et C1
 
(setq pta (polar C1 0 d2))
(setq ptb (polar C1 (/ pi 2) d1))
 
 (setq d3 (- d2 0.03))							
 (setq d4 (- d1 0.03))
 (setq Carré (+ (* d3 d3) (* d4 d4)))
 (setq Dist2 (sqrt Carré))
 (setq Ang2 (atan (/ d4 d3)))
 (setq C2 (polar C1 Ang2 Dist2))					; point d'insertion du bloc ancrage
 (setq C3 (polar C2 (- 0 Ang) 0.03))
 (setq C4 (polar C2 (/ (* 3 pi) 4) 0.03))
 (setq Acr1 (+ (* 0.07 0.07) (* 0.03 0.03)))
 (setq Acr11 (sqrt Acr1))
 (setq C6 (polar C2 (/ (* 5 pi) 4) Acr11))
 (setq C7 (polar C6 (- 0 Ang) 0.03))
 (setq C8 (polar C6 (/ (* 3 pi) 4) 0.03))
 
 (setq long (+ (* d1 2)(* d2 2)))					; cumule la longeur total du cadre et l'affecte a la var. "long"
 (setq pt_ha1 (polar C1 Ang Dist_ha1))					; Point de depart du HA en section inf.gauche
 (setq pt_ha2 (polar pta (/ (* 3 pi) 4) Dist_ha1))
 (setq DistanceHA (distance pt_ha1 pt_ha2))
 (setq DistanceHA2 (/ DistanceHA 2))
 (setq pt_ha3 (polar pt_ha1 0 DistanceHA2))
 (setq pt_ha4 (polar ptb (- 0 (/ pi 4)) Dist_ha1))
 (setq pt_ha5 (polar pt_ha4 0 DistanceHA))
 (setq pt_ha6 (polar pt_ha4 0 DistanceHA2))
 (setq DistanceHA3(/ (distance pt_ha1 pt_ha4) 2))
 (setq pt_ha7 (polar pt_ha1 (/ pi 2) DistanceHA3))
 (setq pt_ha8 (polar pt_ha2 (/ pi 2) DistanceHA3))
 
 
 (command "rectangle" C1 "c" d2 d1 MiC)				; lance la commande rectangle
 (setq cadre1( entlast))						; affecte a la var. "cadre1" le dernier dessin créer
 (command "raccord" "r" 0.03 "")					; modifi la variable du rayon de raccord
 (command "raccord" "p" cadre1)					; lance la commande raccord sur la polyligne "cadre1"
 (command "polylign" C8 C4 "arc" C3 "ligne" C7 "")
 
 (if (= bas1 "1")							; si la case "acier bas" et selectionnée alors les HA en partie basse son dessiné
 (progn
   (command "cercle" pt_ha1 0.01)
   (command "cercle" pt_ha2 0.01)
   (command "cercle" pt_ha3 0.01)
   (setq LI3 (entlast))
 )
 )

 (if (= haut1 "1")							; si la case "acier haut" et selectionnée alors les HA en partie haute son dessiné
 (progn
   (command "cercle" pt_ha4 0.01)
   (command "cercle" pt_ha5 0.01)
   (command "cercle" pt_ha6 0.01)
   (setq LI4 (entlast))
   	(setq Nbr_haut12 (atoi Nbr_haut1))
 	(setq Long_haut12 (atoi Long_haut1))

 	(if (= Nuance_haut1 "0") ( setq Nuance_haut12  "HA6"))			;
(if (= Nuance_haut1 "1") ( setq Nuance_haut12  "HA8"))			;
(if (= Nuance_haut1 "2") ( setq Nuance_haut12  "HA10"))			;
(if (= Nuance_haut1 "3") ( setq Nuance_haut12  "HA12"))			;;affecte la nuance de l'acier a la var. "choix12" en fonction de la variable "choix" de la liste deroulante de la DCL
(if (= Nuance_haut1 "4") ( setq Nuance_haut12  "HA14"))			;
(if (= Nuance_haut1 "5") ( setq Nuance_haut12  "HA16"))			;
(if (= Nuance_haut1 "6") ( setq Nuance_haut12  "HA20"))			;
 )
 )

 (if (= centre1 "1")							; si la case "acier centre" et selectionnée alors les HA en partie centrale son dessiné
 (progn
   (command "cercle" pt_ha7 0.01)
   (setq LI (entlast))
   (command "cercle" pt_ha8 0.01)
   (setq LI2 (entlast))
   	(setq Nbr_centre12 (atoi Nbr_centre1))
 	(setq Long_centre12 (atoi Long_centre1))
 
 	(if (= Nuance_centre1 "0") ( setq Nuance_centre12  "HA6"))			;
(if (= Nuance_centre1 "1") ( setq Nuance_centre12  "HA8"))			;
(if (= Nuance_centre1 "2") ( setq Nuance_centre12  "HA10"))			;
(if (= Nuance_centre1 "3") ( setq Nuance_centre12  "HA12"))			;;affecte la nuance de l'acier a la var. "choix12" en fonction de la variable "choix" de la liste deroulante de la DCL
(if (= Nuance_centre1 "4") ( setq Nuance_centre12  "HA14"))			;
(if (= Nuance_centre1 "5") ( setq Nuance_centre12  "HA16"))			;
(if (= Nuance_centre1 "6") ( setq Nuance_centre12  "HA20"))			;

 )
 )
 	
   
 (if (= Epingle1 "1") 							; si la case "acier centre" et selectionnée alors les HA en partie centrale son dessiné
   	(progn
  	(setq LISTE (entget LI))
 		(setq LISTE2 (entget LI2))						;Récupére les informations de la variable "NomEntité" et la place dans la variable "LISTE",
	(setq A1 (CDR (ASSOC  10  LISTE)))						;Cherche dans la liste "LISTE" celle dont le code-clé est "10" (=point principale) et supprime le premier élément de celle-ci,
	(setq A2 (CDR (ASSOC  10  LISTE2)))
 		(setq Ray (cdr (assoc 40 LISTE)))
 		(setq long2 (+ Ray 0.005))
 		(setq long (distance A1 A2))
 		(setq long3 (* 0.35 long))							;Même chose pour le code-clé "11" (=autre point),
	(setq angl (angle A1 A2))
 
 											;Attribut à la variable "angl" l'angle que décrit les points "A1" et "A2",
	(setq pt0 (polar A1 (+ angl (/ pi 2)) long2))
	(setq pt1 (polar A1 (+ angl (/ pi 2)) (- long2)))
	(setq pt2 (polar A2 (+ angl (/ pi 2)) (- long2)))
 		(setq pt3 (polar pt0 angl long))
 		(setq pt4 (polar pt1 angl long3))
 		(setq pt5 (polar pt2 angl (- 0 long3)))
 		(setq dist (distance pt0 pt1))
 		(setq Ray2 (/ dist 2))
 		(setq longTotalHA (+ (* 2 long3) long (* 2 (* pi Ray2)))) 
 		

    (command "polylign" pt4 pt1 "arc" pt0 "Li" pt3 "arc" pt2 "Li" pt5 ""))
 )

 (if (= Epingle2 "1") 							; si la case "acier centre" et selectionnée alors les HA en partie centrale son dessiné
   	(progn
  	(setq LISTE (entget LI3))
 		(setq LISTE2 (entget LI4))						;Récupére les informations de la variable "NomEntité" et la place dans la variable "LISTE",
	(setq A1 (CDR (ASSOC  10  LISTE)))						;Cherche dans la liste "LISTE" celle dont le code-clé est "10" (=point principale) et supprime le premier élément de celle-ci,
	(setq A2 (CDR (ASSOC  10  LISTE2)))
 		(setq Ray (cdr (assoc 40 LISTE)))
 		(setq long2 (+ Ray 0.005))
 		(setq long (distance A1 A2))
 		(setq long3 (* 0.35 long))							;Même chose pour le code-clé "11" (=autre point),
	(setq angl (angle A1 A2))
 
 											;Attribut à la variable "angl" l'angle que décrit les points "A1" et "A2",
	(setq pt0 (polar A1 (+ angl (/ pi 2)) long2))
	(setq pt1 (polar A1 (+ angl (/ pi 2)) (- long2)))
	(setq pt2 (polar A2 (+ angl (/ pi 2)) (- long2)))
 		(setq pt3 (polar pt0 angl long))
 		(setq pt4 (polar pt1 angl long3))
 		(setq pt5 (polar pt2 angl (- 0 long3)))
 		(setq dist (distance pt0 pt1))
 		(setq Ray2 (/ dist 2))
 		(setq longTotalHA (+ (* 2 long3) long (* 2 (* pi Ray2)))) 
 		

    (command "polylign" pt4 pt1 "arc" pt0 "Li" pt3 "arc" pt2 "Li" pt5 ""))
 )

   
 (setq texte (getpoint "n\donner le point de depart du texte du Cadre : "))	; point d'insertion du texte
 (setq pt1 (polar texte 0 0.8))						; pt1 = point d'insertion du croquis
 (setq lg2 (* d1 0.25))
 (setq lg3 (* d2 0.25))
 (setq mil1 (/ lg2 2))
 (setq mil2 (/ lg3 2)) 
 (setq Carré2 (+ (* lg3 lg3) (* (/ lg2 2) (/ lg2 2))))
 (setq Dist3 (+ (sqrt Carré2) 0.02))
 (setq Ang3 (atan (/ (/ lg2 2) lg3)))

 (setq Carré3 (+ (* lg2 lg2) (* (/ lg3 2) (/ lg3 2))))
 (setq Dist4 (+ (sqrt Carré3) 0.02))
 (setq Ang4 (atan (/ lg2 (/ lg3 2))))
 
 (setq milieux1 (polar pt1 ang3 Dist3))									; point d'insertion d'annotation du croquis
 (setq milieux2 (polar pt1 ang4 Dist4))									; point d'insertion d'annotation du croquis
 
 (command "calque" "ch" "G04 Rep Armatures" "ac" "G04 Rep Armatures" "")
 (command "texte" texte 0.05 0 (strcat "Cad"choix12"X" (rtos long 2 2) " e:"(rtos E12 2 2) "cm"))
 (command "rectangle" pt1 "c" lg3 lg2 pt1)									; dessine le croquis du cadre
 (setq cadre2( entlast))
 (command "raccord" "r" 0.015 "")										; redefinie la var de rayon pour le croquis du cadre
 (command "raccord" "p" cadre2)										; commande raccord pour le croquis
 (command "texte"  "j" "mg" milieux1 0.045 0 (rtos (* d1 100) 2 0))						; texte du croquis
 (command "texte" "j" "c" milieux2 0.045 0 (rtos (* d2 100)2 0))						; texte du croquis


 (if (= haut1 "1")							; si la case "acier haut" et selectionnée alors les HA en partie haute son dessiné
 (progn
 (setq texte_haut (getpoint "n\donner le point de depart du texte des aciers hauts : "))
(command "calque" "ch" "G04 Rep Armatures" "ac" "G04 Rep Armatures" "")
 	(command "texte" texte_haut 0.05 0 (strcat (rtos Nbr_haut12 2 2) Nuance_haut12 "X" (rtos Long_haut12 2 2)))))
 

 (if (= centre1 "1")							; si la case "acier haut" et selectionnée alors les HA en partie haute son dessiné
 (progn
 (setq texte_centre (getpoint "n\donner le point de depart du texte des aciers centrale : "))
(command "calque" "ch" "G04 Rep Armatures" "ac" "G04 Rep Armatures" "")
 	(command "texte" texte_centre 0.05 0 (strcat (rtos Nbr_centre12 2 2) Nuance_centre12 "X" (rtos Long_centre12 2 2)))))
 
 

(setvar "osmode" avant)												; renvoie l'accrochage objet d'origine

 ) 

 

 

ET VOICI LE DCL

 

cadre_dcl:dialog {label="Cadre";
:row {


		
:boxed_column {label="Données Armatures longitudinales";edit_width=1;fixed_width=true;height=1;fixed_height=false;
		
:row {	:toggle {label= "Aciers en partie haute    :";key=haut;value="haut1";}
	:edit_box {label="Nbr de HA:";key=Nbr_haut;edit_width = 4;value="Nbr HA";}
	:popup_list {	    
			            key = Nuance_haut;
			            edit_width = 6;
			            alignment = left;
			            value = "choix_haut";
				    list = "HA6 \nHA8 \nHA10 \nHA12 \nHA14 \nHA16 \nHA20 ";}
	:edit_box {label="&Longueur:";key=Long_haut;edit_width = 6;value="Longueur";}		            
			            }			            
:row {	:toggle {label= "Aciers en partie centrale :";key=centre;value="centre1";}
	:edit_box {label="Nbr de HA:";key=Nbr_centre;edit_width = 4;}
	:popup_list {	    
			            key = Nuance_centre;
			            edit_width = 6;
			            alignment = left;
			            value = "choix_centre";
				    list = "HA6 \nHA8 \nHA10 \nHA12 \nHA14 \nHA16 \nHA20 ";}
	:edit_box {label="&Longueur:";key=Long_centre;edit_width = 6;}
				    }
			            
:row {	:toggle {label= "Aciers en partie basse    :";key=bas;value="bas1";}
	:edit_box {label="Nbr de HA:";key=Nbr_bas;edit_width = 4;}
	: popup_list {	    
			            key = Nuance_bas;
			            edit_width = 6;
			            alignment = left;
			            value = "choix_bas";
				    list = "HA6 \nHA8 \nHA10 \nHA12 \nHA14 \nHA16 \nHA20 ";}
	:edit_box {label="&Longueur:";key=Long_bas;edit_width = 6;}
				    }
	      }}
:row{

:boxed_column {label="Données Armature transversale";edit_width=1;fixed_width=true;height=1;
		
		: popup_list {	    label="&Nuance du cadre:";
			            key = Nuance;
			            edit_width = 6;
			            value = "choix";
				    list = "HA6 \nHA8 \nHA10 \nHA12 \nHA14 \nHA16 \nHA20 ";
			            }
		:edit_box {label="Espacement des cadre (en cm):";edit_width=3;fixed_width=false;key="E";alignment = left;}
		:edit_box {label="Valeur de l'enrobage (en m)     :";edit_width=3;height=1;fixed_width=false;key=Enr;alignment = right;fixed_height=true;}
		
		:row { :toggle {label= "Epingle Horizontal";key=Ep;value="Epingle1";}
	
	: popup_list {	    
			            key = Nuance_epingle;
			            edit_width = 6;
			            alignment = left;
			            value = "choix_epingle";
				    list = "HA6 \nHA8 \nHA10 \nHA12 \nHA14 \nHA16 \nHA20 ";}
	
				    }
			            
:row {
:toggle {label= "Epingle Vertical";key=Ep2;value="Epingle2";}

	: popup_list {	    
			            key = Nuance_epingle2;
			            edit_width = 6;
			            alignment = left;
			            value = "choix_epingle";
				    list = "HA6 \nHA8 \nHA10 \nHA12 \nHA14 \nHA16 \nHA20 ";
			            }}		            
		}
	:boxed_column {	label= "Schema";
	:image {width=20;aspect_ratio=1;color=7;fixed_height=true;key=img;}}
}
	


		


	
           :row {ok_cancel;}
    :row {errtile;}
    :row {	    
 
	: text {								
	  key= "treillis soudé inferieur" ;							
	  label= "©2011 - Boîte de dialogue réalisé par CROUZET Adrien" ;}
      		
   		 }

    } 

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

je suis pas un pro

mais apres avoir lu ta boite de dialogue

(setq dcl_id (load_dialog "CadreDCL.DCL"))

if (not (new_dialog "cadre_dcl" dcl_id) ) (exit))

 

j'ai initialisé les variables 1 à 1 et ca marche

maintenant il doit y avoir plus simple que de toutes les lister

 

(setq e1 nil)

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é