Aller au contenu

basculer sur présentation


Messages recommandés

Posté(e)

Rebonjour les pros du lisp.

Je séche une fois de plus.

 

Dans ma routine, je cree une nouvelle présentation:

 

1er probleme:

Comment vérifier que que le nom de ma présentation n'existes pas déjà (Je ne peux pas utilsé comme pour les calque : (tblsearch "layer" "NomDuCalque") peut etre parce que je ne sais pas quoi mettre a la place de layer! je n'arrive pas utiliser la fonction (Entget(enlast) il ne renvoi les infos de l'élément créer juste avant le présentation (Une fenetres "viewports").

2em probleme:

Comment basculer sur ma nouvelle présentation. TILEMODE ne me premet que de passer de l'EO à l'EP utile si je n'est qu'un présentation dans mon fichier dwg.

 

merci d'avance

Posté(e)

Hello,

 

Pour ta 2ème question :

 

Si ta présentation s'appelle ALPHA, ta ligne lisp sera (setvar "CTAB" "ALPHA").

 

Pour la première... Je passe... essaie avec VIEW, remplace LAYER par VIEW.

 

A+

"La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.

Posté(e)

Salut

 

Au plus simple

 

Pour ta première question :

Regarde la fonction layoutlist pour avoir toutes les présentations

et pour tester si la présentation existe, avec la fonction member

 

Pour la seconde, phil_vsd à donné la bonne réponse.

 

Si tu veux aller plus loin, tu as aussi les fonctions vlisp

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Merci beaucoup, grace à vous j'ai reussi à pondre ça:

(Ne rigoler pas, merci)

 

(setq BOCLAYLSIT layoutlist)

(member BOCLAYNAM (BOCLAYLSIT))

(if (/= BOCLAYNAM nil)

(setq BOCLAYNAM (strcat (getvar "DWGNAME")"_01"))

(setq BOCLAYNAM (strcat (getvar "DWGNAME")"_02"))

)

(Command "-presentation" "N" BOCLAYNAM)

(setvar "CTAB" BOCLAYNAM)

 

Cela fonctionne la premiere fois, mais apres cela continu d'aller sur ( "DWGNAME")"_01).

Et de tout maniere si cela fonctionnait je serait coincé à la 3eme presentation .

 

Concernant la fonction DWGNAME commen puis-je récupéré le nom sans le ".dwg à la fin"?

 

AU SECOURS, LES SUPER LISPEURS

Posté(e)

Salut,

 

Plusieurs choses,

 

L'expression (member BOCLAYNAM (BOCLAYLSIT)) est inutile si tu ne fais rien avec ce qu'elle retourne.

 

L'expression :

(if (/= BOCLAYNAM nil)

(setq BOCLAYNAM (strcat (getvar "DWGNAME")"_01"))

(setq BOCLAYNAM (strcat (getvar "DWGNAME")"_02"))

)

retournera toujours (strcat (getvar "DWGNAME")"_01") si BOCLAYNAM n'est pas nil.

 

En LISP le tiret est inutile pour avoir la commande en ligne de commande, par contre, il est préférable de prendre l'habitude d'utiliser les noms de commandes et d'options en langage international.

 

Pour avoir le nom de fichier sans extension, il y a la fonction vl-filename-base.

 

Ton code pourrait donc ressembler à ceci :

 

;; initialisation du nom de la présentation
(setq boclayname (strcat (vl-filename-base (getvar "DWGNAME")) "_01"))

;; tester si la présentation existe déjà dans le dessin
(if (member boclayname (layoutlist))

 ;; si la présentation existe
 (setq boclayname (strcat (vl-filename-base (getvar "DWGNAME")) "_02"))
)

;; créer la présentation
(command "_layout" "_new" boclayname)

;; activer la présentation
(setvar "CTAB" boclayname) 

 

Mais cette méthode ne permet que la création de 2 présentations. pour incrémenter le nom de chaque nouvelle présentation, tu doit utiliser une boucle avec while par exemple.

 

;; initialisation du nom de la présentation
(setq suffix 1
     boclayname
      (strcat (vl-filename-base (getvar "DWGNAME")) "_1")
)

;; tant que la présentation existe déjà dans le dessin
(while (member boclayname (layoutlist))

 ;; incrémenter le suffixe
 (setq	suffix	   (1+ suffix)
boclayname (strcat (vl-filename-base (getvar "DWGNAME")) "_" (itoa suffix))
 )
)

;; créer la présentation
(command "_layout" "_new" boclayname)

;; activer la présentation
(setvar "CTAB" boclayname) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

merci bien pour cette leçon.

L'expression (member BOCLAYNAM (BOCLAYLSIT)) je compte m'en servir pour faire "presentation 1/2... "

 

Merci encore à tous

 

Comment peut t'on définir la mise en page (Imprimante, zone d'impression, echelle...)?

 

Autrement je cherche à obtenir le nombre de presentation dans le plan, j'ai esssyer ça : (setq LAYOUTNUM (sslength (layoutlist))) , mais comme d'jab cela ne marche pas!

Et pour finir: pour se qui suis me fonctionne pas!

 

....

(if (= BOC_FOR1 "0")

(Command "-inserer" "Z:\\Format_A0h_boc_confidentiel.dwg" "0,0,0" "1" "1" "0")

)

 

(if (or (or (or (or (/= BOC_FOR1 "4") (/= BOC_FOR1 "3")) (/= BOC_FOR1 "2")) (/= BOC_FOR1 "1") (/= BOC_FOR1 "0")) (/= BOC_FOR1 ""))

(progn

(Alert (strcat "ATTENTION, opération annulée:\nVous vous etes trompées dans la saisie du format\nVous avez saisi : " BOC_FOR1 "\n\nLes seule entrées clavier possible sont: \n 0 / 1 / 2 / 3 / 4 ou entré"))

(command "_layout" "EF" boclayname)

(trap1)

)

)

 

[Edité le 13/10/2008 par ScoAD]

Posté(e)

Salut,

 

La fonction sslength retourne le nombre d'éléments d'un jeu de sélection, pour une liste, il faut utiliser length.

 

Pour la seconde question, je pense qu'il faudrait plutôt faire :

(if (and
     (/= BOC_FOR1 "4")
     (/= BOC_FOR1 "3")
     (/= BOC_FOR1 "2")
     (/= BOC_FOR1 "1")
     (/= BOC_FOR1 "0")
     (/= BOC_FOR1 "")
   )
 (progn
  ...
 )
)

 

ou encore :

(if (not (member BOC_FOR1 '("0" "1" "2" "3" "4" "")) (progn ...))

 

mais, plus élégant pour le "Choix du format", regarde les fonctions getkword et initget.

 

Exemple avec "0" comme valeur par défaut (Entrée)

(initget "0 1 2 3 4")
(or
 (setq BOC_FOR1 (getkword "\nSpécifiez le format [0/1/2/3/4] : "))
 (setq BOC_FOR1 "0")
) 

 

[Edité le 13/10/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

merci pour cette nouvelle leçon.

Et sinon pour:

Comment peut t'on définir la mise en page (Imprimante, zone d'impression, echelle...)?

a défaut de réponse, une autre question!

pourquoi ce qui suit ne fontionne pas? :

(setq boclayname (strcat (vl-filename-base (getvar "DWGNAME")) "_" (itoa suffix) "/" (getvar "BOC_FOR1")))
[Edité le 14/10/2008 par ScoAD]

 

[Edité le 20/10/2008 par ScoAD]

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é