Aller au contenu

Messages recommandés

Posté(e)

Bonsoir, je suis entrain de créer un petit lisp pour mon apprentissage.

je saisis une alti tampon avec getreal

je saisis une alti radier avec getreal

il me retourne le delta tampon - radier.

j'insère ensuite un bloc reportant les 3 valeurs

mon problème viens du fait qu'il me retourne des résultats avec 15 décimales alors que je n'en souhaite que 2.

je suppose un paramétrage de variable mais laquelle.

 

cordialement.

Posté(e)

Salut,

 

Les valeurs des attributs de blocs sont des données de type chaîne (STR), tu vas donc avoir à convertir des nombres réels retournés par getreal en chaînes.

La fonction rtos (RealTOString) permet cette conversion et aussi de spécifier le format du nombre et le nombre de décimales.

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

Posté(e)

re, voici donc mon code je souhaite comprendre pourquoi cette commande rtos ne fonctionne pas :

 

(defun c:cotregep ()
 	
(setq tampon (getreal "Cote Tampon ?"))
(setq radier (getreal "Cote Fil d'eau ?"))
(setq delta  (- tampon radier))
(rtos delta 2 2)
	(command "inserer" "cote_ep" pause 1 1 0 tampon radier delta)
 )

 

merci

Posté(e)

Re, voici mo code mis à jour :

 (defun c:cotregep ()
 (setvar "ATTREQ" 1)
 (setvar "ATTDIA" 0)
 (setq tampon (getreal "Cote Tampon ?"))
 (setq radier (getreal "Cote Fil d'eau ?"))
 (setq delta  (- tampon radier))
 (rtos delta 2 2)
 (command "inserer" "cote_ep" pause 1 1 0 tampon radier delta)
 )

 

et voila le dessin que cela me fait :

 

http://img176.imageshack.us/img176/4171/regep.jpg

Posté(e)

La fonction command accepte les argument numériques indifféremment sous forme de nombres ou de chaînes.

 

Tes variables tampon, radier et delta sont des nombres réels, soit tu convertis les variables :

(setq tampon (rtos tampon 2 2) radier (rtos radier 2 2) delta (rtos delta 2 2))

avant de les passer à command :

(command "_.insert" "cote_ep" pause 1 1 0 tampon radier delta)

 

soit tu les convertis dans l'expression command, un exemple :

(defun c:cotregep (/ req dia dim tampon radier delta)

 ;; stocker les valeurs initiales des variables
 (setq req (getvar "ATTREQ")
       dia (getvar "ATTDIA")
       dim (getvar "DIMZIN")
 )
 ; modifier les valeurs des variables
 (setvar "ATTREQ" 1)
 (setvar "ATTDIA" 0)
 (setvar "DIMZIN" 1)
 (setq tampon (getreal "Cote Tampon ?"))
 (setq radier (getreal "Cote Fil d'eau ?"))
 (setq delta (- tampon radier))
 (command "_.insert"
          "cote_ep"
          pause
          1
          1
          0
          (rtos tampon 2 2)
          (rtos radier 2 2)
          (rtos delta 2 2)
 )

 ;; restaurer les valeurs initiales des variables
 (setvar "ATTREQ" req)
 (setvar "ATTDIA" dia)
 (setvar "DIMZIN" dim)
 (princ)
)

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

Posté(e)

Bonsoir à toutes et tous,

 

Désolé d'intervenir dans ce post mais j'ai une question,

 

Pourquoi avoir écrit =>

 

(setvar "ATTREQ" req)

 

(setvar "ATTDIA" dia)

 

(setvar "DIMZIN" dim)

 

pour remettre ces variables à leur état initial, plutôt que =>

 

(setvar "ATTREQ" 0)

 

(setvar "ATTDIA" 1)

 

(setvar "DIMZIN" 1)

, par exemple,...

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

un grand merci vous je viens de comprendre pourquoi je n'arrivais à obtenir le résultats voulu.

Dans mon code, je donnais aux attributs les valeurs de tampon radier et delta puis les fonctions rtos de ces valeurs . Cela ne pouvait donc pas marcher.

 

Merci beaucoup.

 

 

 

[Edité le 10/10/2009 par jerome.s]

Posté(e)

Re,

 

Merci de ta réponse Didier,

 

Cela veut dire que "req" après "ATTREQ" remet cette variable comme elle était avant le lancement de la routine ,

 

Alors, pour "SHORTCUTMENU", on mettrait quoi, par exemple ?

 

Ce que je veux dire, c'est comment peut-on savoir ce qu'il faut mettre pour réinitialiser la valeur de la variable au départ ?

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Avant de changer la valeur de la variable système, on conserve sa valeur initiale dans une variable, puis on ré-attribue cette valeur à la variable système à la fin de la routine.

(defun toto (/scm)
 (setq scm (getvar "SHORTCUTMENU")) ; stocker la valeur initiale
 (setvar "SHORTCUTMENU" 0) ; modifier la valeur
 ;;
 ;; ici le corps de la routine
 ;;
 (setvar "SHORTCUTMENU" scm) ; restaurer la valeur
 (princ)
)

 

Pour plus de sécurité, s'il y a un risque d'erreur (ou que l'utilisateur fasse Echap) dans le corps de la routine, on peut redéfinir localement la fonction*error* pour assurer la restauration de l'environnement initial.

 

(defun toto (/*error* scm)

 ;; redéfinition de *error*
 (defun *error* (msg)
   (princ (strcat "\nErreur: " msg))
   (setvar "SHORTCUTMENU" scm) ; restaurer la valeur
   (princ)
 )
 (setq scm (getvar "SHORTCUTMENU")) ; stocker la valeur initiale
 (setvar "SHORTCUTMENU" 0) ; modifier la valeur
 ;;
 ;; ici le corps de la routine
 ;;
 (setvar "SHORTCUTMENU" scm) ; restaurer la valeur
 (princ)
)

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

Posté(e)

La fonction*error* par défaut affiche un message qui est une description de l'erreur AutoLISP qui a provoqué son lancement.

Ce message est l'argument fournit par AutoCAD à la fonction *error* :

 

Commande: (/ 2 0)

; erreur: division par zéro

 

AutoLISP fournit cette fonction pour pouvoir la redéfinir localement :

 

(defun div (x y / *error*)

(defun *error* (msg)

(princ (strcat "\nErreur dans la fonction div: " msg))

(princ)

)

(/ x (float y))

)

 

Commande: (div 2 0)

Erreur dans la fonction div: division par zéro

 

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

Posté(e)

Bonjour, pour continuer dans mon apprentissage, je ne comprends pas comment faire pour obtenir les coordonnées du point d'insertion du bloc que je viens d'insérer.

 

d'après ce que j'ai sous les yeux je pensais que la commande était :

((entget (ssname (ssget "D") 10))) où 10 rappelait la paire pointée des coordonnées du point d'insertion mais apparement l'ordinateur ne veut pas le comprendre.

 

Je dois dire que je suis un peu paummé dans ces histoires de paires pointées et autres listes. Pourtant il va bien falloir que ça rentre, je ne désespère pas.

 

Cordialement.

 

Posté(e)

(ssget "D") n'existe pas.

Tu ne parles à AutoCAD avec ses raccourcis et autres options que via l'instruction (command.

 

Bon.

 

Je selectionne le dernier objet créé avec (entlast) et je parcours sa définition DXF avec (entget (entlast))

 

J'obtiens une liste.

 

Easy maintenant de parcourir cette liste. Assoc trouve la (première) paire pointée dont le premier élément est 10.

 

(assoc 10(entget (entlast)))

 

Enfin j'extraie l'info en enlevant le 10.

 

(cdr(assoc 10(entget (entlast))))

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

bonjour à Toutes et à Tous,

 

je ne comprends pas pourquoi tu veux obtenir le point d'insertion

du bloc que tu viens de créer

puisque justement c'est toi qui l'a imposé, mais c'est anecdotique.

oops je viens de relire et tu as fais un "PAUSE" dans le processus d'insertion...

 

pour te répondre, je te conseille de définir ton point d'insertion avant de créer ton bloc

de cette façon si tu souhaites le déplacer ultérieurement tu as déjà le point d'insertion en mémoire.

 

par exemple :

(setq tampon (getreal "Cote Tampon ?")
     radier (getreal "Cote Fil d'eau ?")
     delta (- tampon radier)
     pins (getpoint "\Point d'insertion ?\n")
)
(command "_.insert" "cote_ep"  pins 1 1 0
 (rtos tampon 2 2)
 (rtos radier 2 2)
 (rtos delta 2 2)
 )
(command "_move" (entlast) ""  pins pause )

 

par ailleurs je viens contredire Tramber

je demande le pardon pour mon insolence

 

le ssget pour sélectionner le dernier objet est

 

(setq jeusel (ssget "L"))

 

et çà fontionne mais contrairement aux anciennes versions

ce n'est pas le dernier objet crée visible à l'affichage

(qu'est ce qu'elle était bien cette possibilité disparue !!!)

mais le dernier objet créé tout simplement

[surligneur] et là, je te rejoins pour utiliser (entlast) [/surligneur] .

 

amicalement

Posté(e)

Salut didier, en fait je pensais à l'intérieur de moi-même, tracer une ligne entre le point d'insertion et mon symbole de regard. Mes pensées m'ont conduis à récupérer ces coordonnées dans la base de donnée du bloc de l'isoler de le stocker. Ensuite j'utilise ton code pour récupérer le deuxième point qui le point d'insertion du bloc regard.

 

Cordialement.

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é