Automatisation Baie 19"

Automatisation Baie 19"

Kevin_Megel
Mentor Mentor
5 442 Visites
117 Réponses
Message 1 sur 118

Automatisation Baie 19"

Kevin_Megel
Mentor
Mentor

Hello la communauté, je vous solicite surtout pouyr avoir des informations,

 

dans le cadre de mon travail, je suis parfois amené a dessiner des baie 19" (ou rack 19") avec l'instalation du materiel dedans. et il y a plusieur taille possible qui se compte en nombre de U (42U 24 U ect...)

Mon objectifs est de pouvoir lorque j'ai mis tout mon materiel de selectionné et de posser directement la baie adequoite. et evité de compté le nombre de U pour choisir la baie.

bref j'aimerais faire

-Pose du materiel

-Selection de celui ci

-Calcule automatique du nombre de U

-Choix automatique de la baie.

 

Est ce que c'est possible de programme un tel truc ? Avec mes compétence actuel ?

Il y a bien sur des taille standard donc serait il possible de créer des fourchette, par exemple entre 37 et 42 U ça selectione automatiquement une baie 42U ?

 

Je ne sais pas si j'ai été claire, si il y a des question n'hesitez pas.

 

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Solutions acceptées (2)
5 443 Visites
117 Réponses
Replies (117)
Message 81 sur 118

Kevin_Megel
Mentor
Mentor

merci Patrick, pff j'en sortirai as indem de ce code ^^

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 82 sur 118

patrick_35
Collaborator
Collaborator

Je ne sais pas, mais au moins, cela t'as permis de voir ce qu'il est possible de faire en lisp et comment.

 

La seul limite (enfin presque) est l'imagination.

 

@+

0 J'aime
Message 83 sur 118

Kevin_Megel
Mentor
Mentor

ça c'est sur je vois....

 

et du coup j'aprend aussi un autre type de code avec les .dcl

 

ça va être le plus gros code que je ferais ( a moitier certe mais quand même)

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 84 sur 118

Kevin_Megel
Mentor
Mentor

Bon j'essai (toujours pour la partie  boite de dialogue) de mixé deux parties

 

soit

(defun c:Selection_Bloc (/ Dcl_Id% Return# List1@ Value1$)
  (princ "\nSelection_Bloc")(princ)
  ; Set Default Variables
  (if (not *MyMultiLists@);Unique global variable name to store dialog info
    (setq *MyMultiLists@ (list nil "" ""))
  );if
  (setq Value1$ (nth 1 *MyMultiLists@)
        List1@ (list "BIM + 1 Plaque de protection + 2x1U" "BIM + 1 Plaque de protection+1x2U")
  );setq
  ; Load Dialog
  (setq Dcl_Id% (load_dialog "SelectionBloc.dcl"))
  (new_dialog "Selectionbloc" Dcl_Id%)
  ; Set Dialog Initial Settings
  (set_tile "Title" " Selection d'un Bloc")
  (set_tile_list "List1" List1@ Value1$);*Included
  ; Dialog Actions
  (action_tile "List1" "(set_list_value \"List1@\" \"Value1$\")");*Included
  (setq Return# (start_dialog))
  ; Unload Dialog
  (setq *MyMultiLists@ (list nil Value1$))
  (princ)
  )


(defun set_tile_list (KeyName$ ListName@ Selected / Item)
  (start_list KeyName$ 3)
  (mapcar 'add_list ListName@)
  (end_list)
  (foreach Item (if (listp Selected) Selected (list Selected))
   (if (member Item ListName@)
     (set_tile KeyName$ (itoa (- (length ListName@) (length (member Item ListName@)))))
   );if
  );foreach
);defun set_tile_list

 

 

et

(defun c:MyOkCancel (/ Dcl_Id% Return#)
  (princ "\nMyOkCancel")(princ)
  ; Load Dialog
  (setq Dcl_Id% (load_dialog "MyDialogs.dcl"))
  (new_dialog "MyOkCancel" Dcl_Id%)
  ; Dialog Actions
  (action_tile "accept" "(done_dialog 1)");You can change the default Return#
  (action_tile "cancel" "(done_dialog 0)")
  (setq Return# (start_dialog))
  ; Unload Dialog
  (unload_dialog Dcl_Id%)
  (princ "\n")(princ Return#);Optional
  (princ)
);defun c:MyOkCancel

 

 

 

 

j'ai tenté ceci, mis je ne pense pas que ce soit bon

 

(defun c:Selection_Bloc (/ Dcl_Id% Return# List1@ Value1$ Value2$)
  (princ "\nSelection_Bloc")(princ)
  ; Set Default Variables
  (if (not *MyMultiLists@);Unique global variable name to store dialog info
    (setq *MyMultiLists@ (list nil "" ""))
  );if
  (setq Value1$ (nth 1 *MyMultiLists@)
        List1@ (list "BIM + 1 Plaque de protection + 2x1U" "BIM + 1 Plaque de protection+1x2U")
  );setq
  ; Load Dialog
  (setq Dcl_Id% (load_dialog "SelectionBloc.dcl"))
  (new_dialog "Selectionbloc" Dcl_Id%)
  ; Set Dialog Initial Settings
  (set_tile "Title" " Selection d'un Bloc")
  (set_tile_list "List1" List1@ Value1$);*Included
  ; Dialog Actions
  (action_tile "List1" "(set_list_value \"List1@\" \"Value1$\")");*Included
  (setq Return# (start_dialog))
  ; Unload Dialog
  (setq *MyMultiLists@ (list nil Value1$ Value2$))

  ; Dialog Actions
  (action_tile "accept" "(done_dialog 1)");You can change the default Return#
  (action_tile "cancel" "(done_dialog 0)")
  (setq Return# (start_dialog))
  ; Unload Dialog
  (unload_dialog Dcl_Id%)
  (princ "\n")(princ Return#);Optional
  (princ)
)

(defun set_tile_list (KeyName$ ListName@ Selected / Item)
  (start_list KeyName$ 3)
  (mapcar 'add_list ListName@)
  (end_list)
  (foreach Item (if (listp Selected) Selected (list Selected))
   (if (member Item ListName@)
     (set_tile KeyName$ (itoa (- (length ListName@) (length (member Item ListName@)))))
   );if
  );foreach
);defun set_tile_list

( et le pire apres c'est que je doit l'integré dans le lisp principale qu'est pas encore fini .....)

 

J'ai testé dans la console Visual Lisp / la fenetres de commande, j'ai se resultat

C: SELECTION_BLOC
SET_TILE_LIST

 

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 85 sur 118

Anonymous
Non applicable

TBonjour Megeon,

 

Tu as chargé le lisp mais tu ne l'a pas lancé.

Olivier

0 J'aime
Message 86 sur 118

Kevin_Megel
Mentor
Mentor

si je l'ai fait ça me donne dans la ligne de commande :

selection_bloc

0

 

ça ne lance pas la boite de dialogue, d'ou mon précedent post

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 87 sur 118

patrick_35
Collaborator
Collaborator

Salut

Fais attention à tes syntaxes. J'ai passé plus de temps à corriger qu'à le faire directement.
Le dcl est très sensible. Ne pas mettre de MAJUSCULES

Le lisp corrigé

//--------------------------------------------------------------
// Selection bloc
// -------------------------------------------------------------

Selection_Bloc : dialog {
	label = "Selection Bloc";
	: boxed_column {
		label = "Selection d'un Bloc";
		: list_box {
			key = "list1";
			height = 6.27;
			fixed_height = true;
			width = 32.92;
			fixed_width = true;
		}
		spacer;
	}
	: row {
		fixed_width = true;
		alignment = centered;
		: ok_button {
			widht = 11;
		}
		: cancel_button {
			width = 11;
		}
	}
}
(defun c:Sb (/ Dcl_Id% Return# List1@ Value1$ Value2$)
  (princ "\nSelection_Bloc")(princ)
  ; Set Default Variables
  (if (not *MyMultiLists@);Unique global variable name to store dialog info
    (setq *MyMultiLists@ (list nil "" ""))
  );if
  (setq Value1$ (nth 1 *MyMultiLists@)
        List1@ (list "BIM + 1 Plaque de protection + 2x1U" "BIM + 1 Plaque de protection+1x2U")
  );setq
  ; Load Dialog
  (setq Dcl_Id% (load_dialog (findfile "SelectionBloc.dcl")))
  (new_dialog "Selection_Bloc" Dcl_Id%)
  ; Set Dialog Initial Settings
  (set_tile "Title" " Selection d'un Bloc")
  (set_tile_list "List1" List1@ Value1$);*Included
  ; Dialog Actions
  (action_tile "List1" "(set_list_value \"List1@\" \"Value1$\")");*Included
  (setq Return# (start_dialog))
  ; Unload Dialog
  (setq *MyMultiLists@ (list nil Value1$ Value2$))

  ; Dialog Actions
  (action_tile "accept" "(done_dialog 1)");You can change the default Return#
  (action_tile "cancel" "(done_dialog 0)")
  (setq Return# (start_dialog))
  ; Unload Dialog
  (unload_dialog Dcl_Id%)
  (princ "\n")(princ Return#);Optional
  (princ)
)

(defun set_tile_list (KeyName$ ListName@ Selected / Item)
  (start_list KeyName$ 3)
  (mapcar 'add_list ListName@)
  (end_list)
  (foreach Item (if (listp Selected) Selected (list Selected))
   (if (member Item ListName@)
     (set_tile KeyName$ (itoa (- (length ListName@) (length (member Item ListName@)))))
   );if
  );foreach
);defun set_tile_list



Ps : si tu ne fais pas plus attention, la prochaine fois, je ne corrigerai pas

@+

0 J'aime
Message 88 sur 118

Kevin_Megel
Mentor
Mentor

Bonjours,

 

Merci pour le lisp

 

cependant il me dit ceci

type d'argument incorrect: stringp nil

 

J'ai bien compris le message

 

Bonne journée

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 89 sur 118

patrick_35
Collaborator
Collaborator

Tu as du faire un mauvais copier/coller

 

@+

0 J'aime
Message 90 sur 118

Anonymous
Non applicable

Bonjour Megeon,

 

Je confirme, le programme de Patrick fonctionne très bien.

Je pense que tu n'as pas chargé convenablement la DCL.

 

Olivier

0 J'aime
Message 91 sur 118

Kevin_Megel
Mentor
Mentor

j'ai refait plusieur tentative, mainteannt ça marque juste SB dnas les ligne de commande...

 

J'abandonne

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 92 sur 118

patrick_35
Collaborator
Collaborator

Courage, on est avec toi (tous ensemble tous ensemble hey hey...)

 

Comme SB est indiqué, cela veut dire que le lisp est bien en mémoire.

Il reste à taper SB au clavier.

 

@+

0 J'aime
Message 93 sur 118

Kevin_Megel
Mentor
Mentor

en tapan SB au clavier, il me marque juste SB

 

en faite c'est comme si l'action etait fini alors que rien a commencé

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 94 sur 118

patrick_35
Collaborator
Collaborator
Tout ce que je peux te dire (mais je pense que tu le sais déjà), c'est de sauvegarder le dcl dans un des répertoires de recherche d'Autocad (le nom indiqué avec load_dialog). Ensuite, un copier/coller du lisp directement dans Autocad puis SB en ligne de commande et je vois la boite de dialogue. @+
0 J'aime
Message 95 sur 118

Kevin_Megel
Mentor
Mentor

.....

 

Je vais pleurer, puis me caché et repluerer apres.....

 

Pourquoi mais pourquoi j'y ai pas pensé

 

bon reste plus qu'a associer ça a la première lisp qui est a finir.... aller je vais sortir les caché d'aspirine!

 

 

 

Mais pourquoi j'y ai pas pensé !!!!

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 96 sur 118

Kevin_Megel
Mentor
Mentor

hello la compagnie, je me suis remis sur la première partie du lisp, et j'ai quelque questions ( enfin une armée, mais on va commencer par les plus urgente, peut etre quelle repondrons a d'autre que je me pose.

 

1ere question !

 

((vl-position (vla-get-effectivename ent) '("MON_BLOC_DE_REFERENCE1" "MON_BLOC_DE_REFERENCE2" "MON_BLOC_DE_REFERENCE3"))
	    (setq nom "MON_BLOC_A_AJOUTER1")

si je veux ajouté "MON_BLOC_A_AJOUTER2" est ce que j'ajoute une ligne

(setq nom1 "MON_BLOC_A_AJOUTER2") ?

 

2nd question !

 

Si oui comment je fait si j'en ai plusieur pour faire une condition  celui ci OU celui la / ceux ci OU ceux la .

 

Et je vais m'arrêter la pour le moment, sinon je vais encore être sous un deluge d'information et je m'en sortirais pas plus qu'auparevent !

 

 

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 97 sur 118

Anonymous
Non applicable

Bonjour Megeon,

 

1/ Oui et non, car il faut aussi adapter le suite du code et cela dépend de quelle manière tu le fait.

 

2/ Tu déjà posé plusieurs fois cette question dans ce sujet et je ne vois pas quoi répondre de plus.

 

Olivier

0 J'aime
Message 98 sur 118

Kevin_Megel
Mentor
Mentor

1) OK ça dépend du  code qui suit

 

2) en faite la reponse était une condition (cond), et je pense mal m'y prendre en faite, je pensais utiliser (or) mais je pense que se serait plus simple de faire des liste que l'on rappelera dans le code qui ouvre la boite de dialogue ! Me trompe je ?

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime
Message 99 sur 118

patrick_35
Collaborator
Collaborator
Salut 2) Le cond est très bien 2a) Tu peux faire plusieurs or ou tester dans une liste si un élément existe, ce qui revient au même mais avec une écriture/lecture plus facile (or (= (vla-get-effectivename ent) "TOTO1") (= (vla-get-effectivename ent) "TOTO2") (= (vla-get-effectivename ent) "TOTO2")) revient à faire (vl-position (vla-get-effectivename ent) '("TOTO1" "TOTO2" "TOTO3")) ou (member (vla-get-effectivename ent) '("TOTO1" "TOTO2" "TOTO3")) @+
0 J'aime
Message 100 sur 118

Kevin_Megel
Mentor
Mentor

hello a tous,

 

apres un pause j'ai finalament remis la tête dans le code....

 

tjr dans la continuité des précédent propos, afin de faire un choix entre tel insertion et tel autre je suis partie a faire des listes ! 

 

Avant de sortir un code et d'enerver tout le monde, je viens verrifier que je me trompe pas de dirrection ! ( oui parfois je reflechit trop et je me perd et je me bloque, et je laisse tomber car je suis enervé, et je passe ici poser des questions tres con et on m'engueule encore plus !)

 

 

donc en selectionnant un bloc de reference X ou Y et tombe sur une liste de choix List A ou Liste B

 

donc pour le bloc de référence on as

 

((vl-position (vla-get-effectivename ent) '("MON_BLOC_DE_REFERENCE4" "MON_BLOC_DE_REFERENCE5" "MON_BLOC_DE_REFERENCE6"))

 

et le choix de plusieur liste

 

((vl-position (vla-get-effectivename ent) '("lst1" "lst2"))

 

 

ensuite il y a la définition des listes

 

(setq lst1 "bloc1 + bloc2")

(setq lst2 "bloc1 + bloc3 + bloc4")

 

la definition des bloc

 

(setq bloc1 "MON_BLOC_A_AJOUTER2")
(setq bloc2 "MON_BLOC_A_AJOUTER3")
(setq bloc3 "MON_BLOC_A_AJOUTER4")
(setq bloc4 "MON_BLOC_A_AJOUTER4")

 

ceci me permet de pouvoir definir la position de chaque "bloc"

 

 (and bloc1
    (setq ma_variable (vla-insertblock    (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
            (vlax-3d-point (getvar "lastpoint"))
            bloc1
            (vlax-put ma_variable "insertionpoint" '(0.0 44.45 0.0))
            (vla-get-xscalefactor ent)
            (vla-get-yscalefactor ent)
            (vla-get-zscalefactor ent)
            (vla-get-rotation ent)

 

déjà j'ai une question, est se que le fait de definir le bloc3 et le bloc4 avec le même bloc, ne poserait pas de soucis ?

 

Ça me parrais ultra compliqué, et je m'emelle les piceaux !

 

 

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

0 J'aime