Aller au contenu

etat d'inversion automatique qui bug


PHILPHIL

Messages recommandés

bonsoir

 

c'est une lisp qui date, il me sert a forcer des valeurs de parametre dynamique dans un bloc dynamique justement.

 

ca marche tres bien pour des valeurs numeriques: LARGEUR, HAUTEUR, ou les angles

 

mais quand je veux forcer les etats d'inversion, il ne veut pas

il lui faut comme valeur 0 ou 1

 

j'ai beau mettre 0 ou 1 dans la boite de dialogue

 

en utilisant ceci dans le lisp :(vla-put-value att (atoi (cdr don)))

ca plante

 

meme si dans le LISp je met 1 ou 0 a la place : (vla-put-value att 1 )

 

ca me met tjrs "Erreur Automation Entrée incorrecte"

 

question qu'est ce que ca attend comme reponse ??

 

( oui il y a plein de test de variable et de toto ( c'est pour savoir ou s'arrete le lisp ))

 

a+ merci

 

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

dans le cas d'un état d'inversion, les valeurs admises sont bien (0 1), mais il faut transformer les entiers en variants avant de les injecter dans la fonction (vla-put-value ...)

 

J'ai fait un essai sur un bloc qui n'a qu'un seul paramètre d'inversion.

 

Commande: (setq e (entlast))

<Nom d'entité: 7ffffb05d60>

 

Commande: (setq dbp (vla-getdynamicblockproperties e))

#<variant 8201 ...>

 

Commande: (setq dbp (vlax-variant-value dbp))

#<safearray...>

 

Commande: (setq dbp (vlax-safearray->list dbp))

(#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002d845dc8>)

 

Commande: (setq bp (car dbp))

#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002d845dc8>

 

Commande: (setq ListeAdmis (vlax-safearray->list (vlax-variant-value (vla-get-AllowedValues bp))))

(#<variant 2 0> #<variant 2 1>)

 

Commande: (setq ListeAdmis (mapcar 'vlax-variant-value ListeAdmis))

(0 1)

 

Commande: (vla-put-value bp 0)

; erreur: Erreur Automation Entrée incorrecte

; on voit bien là qu'on ne peut pas entrer la valeur numérique 0 ou 1

 

 

Commande: (setq varint (vlax-make-variant 0 vlax-vbInteger))

#<variant 2 0>

 

Commande: (vla-put-value bp varint)

nil

 

Commande: (setq varint (vlax-make-variant 1 vlax-vbInteger))

#<variant 2 1>

 

Commande: (vla-put-value bp varint)

nil

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

hello zebulon

 

merciii Cool ca marche

 

a+

 

Phil

 

 

(DEFUN c:cpnf (/)
 (SETVAR "cmdecho" 0)
 (SETQ osm (GETVAR "osmode"))
 (PROMPT "\nSELECTIONNER LES BLOCS PARAMETRIQUE A MODIFIER :")
 (SETQ selinsert (SSGET (LIST '(0 . "INSERT"))))
 (SETQ com (SSLENGTH selinsert))
 (SETQ	compt 0
propdynnom2 nil
pop2 nil
pro2 nil
 )
 (WHILE (< compt com)
   (PROGN (FOREACH att	(VLAX-INVOKE
		  (VLAX-ENAME->VLA-OBJECT (CDR (ASSOC -1 (ENTGET (SSNAME selinsert compt)))))
		  'getdynamicblockproperties
		)
     (IF (/= (VLAX-VARIANT-TYPE (VLA-GET-VALUE att)) 8197)
       (SETQ propdynnom2 (CONS (VLA-GET-PROPERTYNAME att) propdynnom2)
	     pro2	 (CONS (LIST (VLA-GET-PROPERTYNAME att)
				     (VLA-GET-UNITSTYPE att)
				     (VLAX-VARIANT-TYPE (VLA-GET-VALUE att))
				     (VLAX-VARIANT-VALUE (VLA-GET-VALUE att))
			       )
			       pro2
			 )
       )
     )
   )
   (SETQ compt (1+ compt))
   )
 )
 (SETQ propdynnom (remove_doubles (VL-SORT propdynnom2 '<)))
 (boitepropdyn2)
 (SETQ compt 0)
 (SETQ com (SSLENGTH selinsert))
 (acet-ui-progress-init "Avancement" com)
 (WHILE (< compt com)
   (FOREACH don ret
     (FOREACH att (VLAX-INVOKE
	     (VLAX-ENAME->VLA-OBJECT (CDR (ASSOC -1 (ENTGET (SSNAME selinsert compt)))))
	     'getdynamicblockproperties
	   )
(PROGN
  (IF (= (VLA-GET-PROPERTYNAME att) (CAR don))
    (PROGN (IF (AND (= (VLA-GET-UNITSTYPE att) 0) (= (VLAX-VARIANT-TYPE (VLA-GET-VALUE att)) 2))
	     (PROGN (VLA-PUT-VALUE att (VLAX-MAKE-VARIANT (ATOI (CDR don)) VLAX-VBINTEGER)))
	   )
	   (IF (AND (= (VLA-GET-UNITSTYPE att) 1) (= (VLAX-VARIANT-TYPE (VLA-GET-VALUE att)) 5))
	     (PROGN (SETQ test11 (CDR don)) (VLA-PUT-VALUE att (* (ATOF (CDR don)) (/ PI 180))))
	   )
	   (IF (AND (= (VLA-GET-UNITSTYPE att) 2) (= (VLAX-VARIANT-TYPE (VLA-GET-VALUE att)) 5))
	     (PROGN (SETQ test12 (CDR don)) (SETQ test12a (ATOF (CDR don))) (VLA-PUT-VALUE att (ATOF (CDR don))))
	   )
    )
  )
)
     )
   )
   (SETQ compt (1+ compt))
   (acet-ui-progress-safe compt)
 )
 (acet-ui-progress-done)
 (SETVAR "osmode" osm)
 (PRINC)
)

 

(DEFUN boitepropdyn2 (/	tmp file fuzz ret pn av dcl_id val)
 (SETQ	tmp  (VL-FILENAME-MKTEMP "Tmp.dcl")
file (OPEN tmp "w")
ret  nil
 )
 (WRITE-LINE
   (STRCAT "DynBlkProps:dialog{label=\"Blocs dynamiques\";"
    "
             :text{label=\"Nom du bloc : \""
    (VL-PRIN1-TO-STRING "Tous les blocs")
    " ;}
             :text{label=\"Nombre de bloc : "
    (ITOA com)
    "\"; }

             spacer;:boxed_column{label=\"Propriétés dynamiques\";"
   )
   file
 )
 (FOREACH pn propdynnom
   (WRITE-LINE
     (STRCAT ":row{:edit_box{label="
      (VL-PRIN1-TO-STRING pn)
      ";key="
      (VL-PRIN1-TO-STRING pn)
      ";edit_width=20;allow_accept=true;}
                      
      
	       }"
     )
     file
   )
 )
 (WRITE-LINE "}spacer;ok_cancel;}" file)
 (CLOSE file)
 (SETQ dcl_id (LOAD_DIALOG tmp))
 (IF (NOT (NEW_DIALOG "DynBlkProps" dcl_id))
   (EXIT)
 )
 (FOREACH p pop2 (START_LIST (CAR p)) (MAPCAR 'ADD_LIST (CDR p)) (END_LIST))
 (ACTION_TILE
   "accept"
   "(foreach p propdynnom
(if (assoc p POP2)
(setq val (nth (atoi (get_tile p)) (cdr (assoc p POP2))))
(setq val (get_tile p)))
(if (and val (/= val \"\"))
(setq ret (cons (cons p val) ret))))
(and (not ret) (setq ret T))
(setq sel (get_tile \"selset\"))
(done_dialog)"
 )
 (ACTION_TILE "cancel" "(setq ret nil)")
 (START_DIALOG)
 (UNLOAD_DIALOG dcl_id)
 (VL-FILE-DELETE tmp)
)

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Super ! :)

voir aussi la syntaxe dans ce sujet. Cela te permettra de faire le tri entre les variants, les arrays et de savoir quand on peut s'en passer.

 

Amicalement

Vincent

  • Upvote 1

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

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é