Aller au contenu

List ou Matrix


Invité ingoenius

Messages recommandés

Invité ingoenius
Posté(e)

existe la possibilité en lisp de créer un espèce de tableau comme celui la

 

 

NOM DE BLOC DIMx DIMy KG KW

 

PAR64 40 20 3 500

MAC250 85 72 35 1200

MAC2000 90 80 42 2000

.................................................................

 

 

maintenat dans le dessin il y a des bloc avec les nom correspondant

comment je fait pour chercher le bloc MAC250 e dire combien de KG il pese?

ou pour sortir sa dimension, en excel il y a une fonction "recherche V" est ce que en lisp on peut faire quelque chose de similaire ? une matrice? ou autre?

 

il faut partir avec des listes? ou avec des listes de listes?

et comment extraire depuis le nome de bloc MAC2000 la bonne reference ?

 

merci pour votre aide je suis un peut perdu, ;-)

 

Posté(e)

Salut,

existe la possibilité en lisp de créer un espèce de tableau comme celui la
il faut partir avec des listes? ou avec des listes de listes?

Il peut y avoir plusioeur logique, mais bien sûr la base est la liste.

Moi je fais des listes de listes. :

 

(setq lst-BLC (list '("PAR64" 40 20 3 500)
	    '("MAC250" 85 72 35 1200)
	    '("MAC2000" 90 80 42 2000)))

 

Poids :

(setq pd (nth 3 (assoc "MAC250" lst-BLC)))

 

Dimension :

(setq dim (list (cadr (assoc "MAC250" lst-BLC))
	(caddr (assoc "MAC250" lst-BLC))))

 

Pour rechercher des éléments d'une un liste, tu as aussi la fonction foreach, ou repeat, ou while...

 

 

 

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Invité ingoenius
Posté(e)

merci pour l'aide ;-) je avance sur cela et ça marche bien

 

 
(defun C:Bd()

;---------------
;TABELLA  Dimensioni in mm  puissWatt
;          NOME   PesoKg   dimX  dimY  dimZ  Watt 
 
(setq lst-BLC (list
	'("MAC2000 Perf" 42 408 490 743 1550)
	'("MAC2000 Wash" 32 408 490 750 1450)
	'("MAC250" 31 330 384 525 370)
	'("MAC250+" 22 330 384 525 370)
	'("MAC550" 26.1 356 481 673 700)
	'("MAC600" 31.5 356 481 652 780)
	'("MAC600_NT" 31.5 356 481 652 780)
	
	))

(setq poid 0.0);Kg
(setq puiss 0.0);Watt
(setq Volume 0.0);m cube
 
  

;(setq lb (list nil)) 

(setq INDEX 0)

(setq SS (ssget (list (cons 0 "insert"))))
  
(repeat (sslength SS)  
(setq EL (entget (SSNAME SS INDEX)))
(setq NOM-BLOC (cdr (assoc 2 EL)))



(setq pd (nth 1 (assoc NOM-BLOC lst-BLC)))
(setq Kw (nth 5 (assoc NOM-BLOC lst-BLC)))

(setq Dx (nth 2 (assoc NOM-BLOC lst-BLC)))
(setq Dy (nth 3 (assoc NOM-BLOC lst-BLC)))
(setq Dz (nth 4 (assoc NOM-BLOC lst-BLC)))
 
(setq M3 (/ (* Dx Dy Dz)100000000.00));

 
(setq puiss (+ Kw puiss))
(setq poid (+ pd poid))
(setq Volume (+ M3 Volume))

(setq INDEX (+ 1 INDEX))   

);fin Repeat
);fin Defun

Posté(e)

Pour mon travail je fais les mêmes choses que toi, sauf que j'ai rentré mes info dans les blocs avec des attributs invisibles.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Invité ingoenius
Posté(e)

c'est aussi une solution, mais j'explique pourquoi je l'utilise pas

 

pour moi c'est n'est pas assai pratique car des que tu veut ajouter un paramétre

il faut décomposer les blocs et recréer le tout en faisant attention a l'ordre de sélection des attribut etc , par contre avec cette méthode, seul le nom du bloc compte , et les info sont stocké dans le lisp modifiable très facilement

 

de plus je peut si besoin crée des blocs génériques auxquels ensuite je change seulement le nom

avec cette routine, quoi en penses tu?

 

 

 

 
;; InputBox (gile)
;; Ouvre une boite de dialogue pour récupérer une valeur
;; sous forme de chaine de caractère
;;
;; Arguments
;; tous les arguments sont de chaines de caractère (ou "")
;; box : titre de la boite de dialogue
;; msg : message d'invite
;; val : valeur par défaut
;;
;; Retour
;; une chaine ("" si annulation)

(defun InputBox (box msg val / subr temp file dcl_id ret)

;; Retour chariot automatique à 50 caractères
(defun subr (str / pos)
(if (and
(< 50 (strlen str))
(setq pos (vl-string-position 32 (substr str 1 50) nil T))
)
(strcat ":text_part{label=\""
(substr str 1 pos)
"\";}"
(subr (substr str (+ 2 pos)))
)
(strcat ":text_part{label=\"" str "\";}")
)
)

;; Créer un fichier DCL temporaire
(setq temp (vl-filename-mktemp "Tmp.dcl")
file (open temp "w")
ret ""
)

;; Ecrire le fichier
(write-line
(strcat
"InputBox:dialog{key=\"box\";initial_focus=\"val\";spacer;:paragraph{"
(subr msg)
"}spacer;:edit_box{key=\"val\";edit_width=54;allow_accept=true;}
spacer;ok_cancel;}"
)
file
)
(close file)

;; Ouvrir la boite de dialogue
(setq dcl_id (load_dialog temp))
(if (not (new_dialog "InputBox" dcl_id))
(exit)
)
(set_tile "box" box)
(set_tile "val" val)
(action_tile
"accept"
"(setq ret (get_tile \"val\")) (done_dialog)"
)
(start_dialog)
(unload_dialog dcl_id)

;;Supprimer le fichier
(vl-file-delete temp)
ret
)

(defun c:BB ();rinomina i blocchi 
(setq OBJ (ssgetfirst))
(setq old_BLOCCO (cadr OBJ));estrai la selezione

(if	(= old_BLOCCO nil)	;se nulla é selezionato  
(setq BLOCCO (car (entsel "\nSelect block ")))
(setq BLOCCO (ssname old_BLOCCO 0))	
)	

(setq old_DatiB (entget BLOCCO))(= (cdr (assoc 0 old_DatiB)) "INSERT")
(setq Test (cdr(assoc 2 old_DatiB))) 		;metto qui il vecchio nome del blocco
;(setq New_N (getstring T "\nNew Name? "))

(setq New_N   (inputbox "Rename Block" Test "new name")) ;cambiare qui la dcl dialog 
(null (tblsearch "BLOCK" New_N))
(vl-cmdf "_.rename" "_b" (cdr (assoc 2 old_DatiB)) New_N)
 
(princ)
)



;----------------------------------------------------------------------------


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é