Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

Tout ce qui a été posté par (gile)

  1. (gile)

    sauver la face

    Si la face est celle d'une primitive (Boite, Cylindre, Biseau) créée avec le LISP, il doit être facile de trouver un point au centre de cette face à partir des coordonnées spécifiées pour sa création. Si c'est un objet extrudé, les coordonnées d'un point au milieu de l'objet auxquelles on ajoute la hauteur d'extrusion à la coordonnée Z. Si l'extrusion a été faite le long d'un chemin, l'extrémité de ce chemin (accessible par entget).
  2. Déjà, je ne vois plus d'erreur de syntaxe, un bon point. ;) Comme je ne suis pas sûr de ce que tu veux faire exactement je ne peux juger du reste, mais une des chose qui me plaisent en LISP c'est la faciliter avec laquelle on peut s'auto-évaluer. Teste toi-même ta routine, pour voir si elle répond à tes attentes, essaye de penser à toutes les possibilités pour les arguments Calq Coul et TypLign même de possibles arguments érronés pour voir si elle réagit comme tu le veux.
  3. Attends un peu pour le loto ;) Pas de hasard en LISP ! Dans l'éditeur, tu sélectionnes (tblsearch "TypeLigne" "") -double clic avant la paranthèse- et tu fais ctrl+shift+E ou bouton "Charger la sélection" et tu devrais avoir un message d'erreur dans la console : il faut spécifier dans quelle table chercher. Les tables sont : "LAYER", "LTYPE", "VIEW", "STYLE", "BLOCK", "UCS", "APPID", "DIMSTYLE", et "VPORT" Si tu fais double clic sur tblsearch et clic sur l'icone ? l'aide va s'ouvrir à la page de tblsearch. Si TypLign est une variable dont la valeur est le nom du type de ligne que tu veux charger il faut le spécifier dans le tblsearch. (= x nil) peut s'écrire (not x) Si tu n'as qu'une condition à tester tu peux utiliser if à la place de cond. (if (not (tblsearch "LTYPE" TypLign)) (command "-typeligne" "ch" TypLign "s:/config/phalène/phalène.lin" "" ) ) [Edité le 12/4/2006 par (gile)]
  4. Il ne t'écrit pas plusieurs fois "fin de cond" dans le même cond, c'est toi qui ferme le cond avant le dernier ((or !
  5. Effectivement tu as un problème avec les paranthèses ! À la troisième condition, il manque une paranthèse ouvrante. La condition - l'équivalent de (première condition) - c'est : (or (Troisième condition alpha) (Troisième condition beta) ) donc on écrit avec une double paranthèse avant or: ((or (Troisième condition alpha) (Troisième condition beta) ) ;_ Fin OR (première exécution si alpha et béta remplis) (deuxième --- -- -- -- ) ) ;_Fin troisième condition Non, T c'est True (vrai) nil c'est rien, vide. Un test conditionnel : (= var 0) retourne T si var a la valeur 0, sinon nil. Dans un (cond ... on peut finir par un dernier test (T (exécution1) (exécution2)) où T veut dire "dans tous les autres cas (si tous les test conditionnels précédent on retourné nil). S'il n'y a rien à exécuter dans ce cas, écrire (T nil) est inutile puisque c'est ce qui se passe si rien n'est spécifié.
  6. Je te le disais dans un précédent message, depuis l'éditeur Outils -> Options d'environnement -> Options de formatage VisualLISP.... Si tu ne veux pas des commentaires de fin, décoche la case Insérer commentaire de fin
  7. Salut un petit exemple d'utilisation avec _LINE : (defun c:ma_ligne (/ scu) (initget "General scu1 scu2 scu3") (setq scu (getkword "\nChoix du SCU à activer [General/scu1/scu2/scu3]: " ) ) (if (= scu "General") (command "_.ucs" "_world") (command "_.ucs" "_restore" scu) ) (command "_.line" (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) )
  8. (gile)

    Tester le chargement

    Salut, J'utilise parfois l'expression : (if (not (vl-catch-all-error-p (vl-catch-all-apply ... Qui, en cas d'erreur, retourne nil au lieu de l'erreur et permet de poursuivre le dérouleme,nt de la routine. Mais si ce message fait suite à celui-ci, je ne suis pas sûr que cela fonctionne quand on essaye de charger un .dvb déjà chargé (est-ce bien une erreur ?)
  9. T'es pas au lit ?! ;) Pas vraiment, mais effectivement, on peut toujours remplacer un (if ... par un (cond ... et l'inverse n'est pas vrai.
  10. Encore des erreurs Il manque un (cond , le deuxième. Il manque une paranthèse ouvrante avant chaque (or et une fermante après les groupes de conditionnelles. Un des :_ Fin de cond (l'avant dernier) n'a pas lieu d'être le cond n'est pas fini. Pour les paranthèses, je le répète une dernière fois, utilise l'éditeur VisualLISP : le formatage de la feuille (ou de la sélection) décale automatiquement les groupes de paranthèses les plus à l'intérieur vers la droite ou te préviens en cas de paranthèse suppléméntaire ou manquante. Un double clic devant une paranthèse fermante ou derrière une ouvrante sélectionne tout le code jusqu'à la paranthèse équivalente. Clique sur l'aperçu ci-dessous http://xs76.xs.to/pics/06152/Edit2.PNG.xs.jpg Cet éditeur offre aussi de puissantes fonctions de débogage, permet le chargement des routines dans AutoCAD, de tester des bouts de code dans la console, tu peux même avoir automatiquement les ;_ Fin de * (Outils -> Options d'environnement -> Options de formatage VisualLISP) Pour éviter qu'une routine retourne le résultat de la dernière évéluation sur la ligne commande (nil pour les (command ...), il faut faire un (princ) à la fin de la routine, avant la paranthèse qui ferme le defun.
  11. (gile)

    échelle présentation

    Tu veux dire horizontale :casstet:
  12. (gile)

    Point OU distance

    Au temps pour moi, le pt1 danns le premier getpoint est une erreur, je voulais le mettre dans le second. :P
  13. Salut, Un petit LISP vite fait, il n'y a pas de contrôle pour savoir si les SCU sont enregistrés. Dans l'exemple, après avoir lancé scu_def taper 1 2 ou 3 puis Entrée ou clic droit -> choix du scu. (defun c:scu_def (/ scu) (initget "scu1 scu2 scu3") (setq scu (getkword "\nChoix du SCU à activer [scu1/scu2/scu3]: ")) (command "_.ucs" "_restore" scu) (princ) ) Si c'est pour mettre dans une routine, pas besoin de faire de defun et on peut aussi éviter le setq : (initget "scu1 scu2 scu3") (command "_.ucs" "_restore" (getkword "\nChoix du SCU à activer [scu1/scu2/scu3]: ") ) [Edité le 11/4/2006 par (gile)]
  14. Essaye de suivre le conseil que je te donnais ici, sur l'utilisation de l'éditeur VisualLISP.
  15. (gile)

    Point OU distance

    Si tu veux utiliser getdist pour spécifier la distance avec le pointeur : (defun c:lz (/ pt1 pt2 dist) (princ "\n Ligne vers Z \n") (setq pt1 (getpoint pt1 "\n Spécifiez le premier point (départ ligne):") pt2 pt1 ) (while (= (caddr pt1) (caddr pt2)) (if (not (setq pt2 (getpoint "\n Spécifiez le second point ou : " ) ) ) (setq dist (getdist pt1 "\nSpécifiez la distance: ") pt2 (list (car pt1) (cadr pt1) (+ (caddr pt1) dist)) ) (setq pt2 (list (car pt1) (cadr pt1) (caddr pt2)) ) ) ) (command "_.line" pt1 pt2 "") (princ) ) Sinon, pour récupérer le z d'un autre point avec le pointeur ou le spécifier au clavier, il y a les filtres de coordonnées. En mode macro : ^C^C_line;\.xy;@;\; [Edité le 11/4/2006 par (gile)]
  16. Petite question préliminaire : as-tu essayé tes routines ? :casstet: Certaines ne peuvent pas marcher en l'état ! Pour le (defun CréaCalq ... ((= Coul "") (= Coul "7")) (= coul "7") est une conditionnelle qui retourne T si l'argument Coul est égal à "7" sinon nil donc l'expression retournera T ou nil si Coul est égal à "" ce qui ne sera pas accepté par les (command ... suivants. Si tu veux attribuer "7" à Coul au cas où l'argument soit "" il faut utiliser (setq Coul "7"). (T nil) n'est pas inclus dans le cond, donc T est interprété comme une fonction et çà n'en est pas une ; erreur: fonction incorrecte: T Le deuxième (cond ... exécute la même chose quel TypLign soit égal à "" ou pas, il est donc parfaitement inutile ! (defun CréaCalq Il est préférable de ne pas mettre d'accents dans les noms de fonctions et de variables (mais çà n'est pas une erreur). Si j'ai compris ce que tu essayes de faire, j'écrirais : (defun CreaCalq (Calq Coul TypLign /) (if (= Coul "") (setq Coul "7") ) (command "-calque" "e" Calq "co" Coul "" "") ) Pour les autres, sans entrer dans le détail : ( TypLign "") devrait te retourner un message d'erreur du type :; erreur: no function definition: n'est pas une fonction LISP, si tu utilises l'éditeur VisualLISP, les fonction LISP prédéfinies apparaissent en bleu. Quand tu spécifies le chemin d'un fichier, utilise des doubles anti-slashs ou des slashs. L'anti-slash est reservé en LISP pour certaines expressions (\n pour un saut de ligne \t pour une tabulation ...) À la place de : "s:\config\phalène\phalène.lin" Il faut écrire : "s:\\config\\phalène\\phalène.lin" ou "s:/config/phalène/phalène.lin" Une paranthèse est sûrement mal placée dans : ((= TypLign "EDF-FT" (StylLign "EDF-FT"))) Tu peux simplifier/corriger : (cond ((= TypLign "Cadastrale") (command "-typeligne" "ch" TypLign "s:\config\phalène\phalène.lin" "" ) ) ((= TypLign "Cache") (command "-typeligne" "ch" TypLign "s:\config\phalène\phalène.lin" "" ) ) ((= TypLign "EDF-FT" (StylLign "EDF-FT"))) (T nil) ) Comme ceci : (cond ((or (= TypLign "Cadastrale") (= TypLign "Cache")) (command "-typeligne" "ch" TypLign "s:\\config\\phalène\\phalène.lin" "" ) ) ((= TypLign "EDF-FT") (StylLign "EDF-FT")) ) le (T nil) est inutile. Pour ce qu'il en est de la mise en page, je n'ai pas d'avis là dessus, j'ai pris l'habitude d'utiliser le formatage par défaut de l'éditeur VisualLISP. J'ai mis trop de temps à poster ma réponse :exclam: (j'ai mangé entre-temps) le principal a déjà été dit. [Edité le 10/4/2006 par (gile)]
  17. (gile)

    Nombre de bloc (s)

    Dans le cas présent il n'y a pas de différence, mais c'est une habitude que de mettre un underscore avant les commandes et options en anglais pour "internationaliser" le code (le sujet a souvent été abordé, la dernière fois à partir d'ici, je crois) Par ailleurs, certaines options de ssget ne fonctionnent qu'avec underscore (ssget ":S") pour ne sélectionner qu'un objet ne fonctionne pas mais (ssget "_:S") oui. Alors sans me poser la question, je le met systématiquement. [Edité le 9/4/2006 par (gile)]
  18. (gile)

    script CAMERA

    Comme le disait Bonuscad, plus haut, c'est l'option DIstance qui fait passer en perspective. Tu dois d'abords faire l'option POints, spécifier un point "cible" puis "l'emplacement de la caméra", la vue va s'orienter, mais sera toujours en projection parallèle. Puis tu choisis l'option DIstance et la vue passe en perspective, le curseur permet de faire varier la distance caméra/ cible en dynamique. En LISP, il faut donner un nombre réél ou valider la valeur par défaut (la distance entre les points cible et caméra). (command "_.dview" "_all" "" "_points" cible_pos cam_pos "_distance" "" "") [Edité le 9/4/2006 par (gile)]
  19. (gile)

    Nombre de bloc (s)

    Salut, Si c'est pour intégrer dans une routine : (setq nbre (sslength (ssget "_X" (list '(0 . "INSERT") (cons 2 nom))))) Sinon un petit defun vite fait : (defun c:nb_bloc (/ nom obj nbre) (setq nom (getstring "\nEntrez le nom du bloc à dénombrer ou : " ) ) (if (= nom "") (progn (while (not (and (setq obj (entsel "\nSélectionnez le bloc à dénombrer: ")) (= (cdr (assoc 0 (entget (car obj)))) "INSERT") ) ) ) (setq nom (cdr (assoc 2 (entget (car obj))))) ) ) (setq nbre (sslength (ssget "_X" (list '(0 . "INSERT") (cons 2 nom)))) ) (princ (strcat "\n" (itoa nbre) " blocs \"" nom "\" ont été trouvés.") ) (princ) )
  20. Je pense qu'il est primordial, si nous voulons essayer de nous comprendre, d'être rigoureux avec le vocabulaire. (defun fonction1 (arg1 arg2 / var1 var2) ...) arg1 et arg2 sont les arguments (non optionnels) de fonction1, ils doivent être spécifiés conformément aux besoin de fonction1 lors de l'appel de fonction1. (fonction1 arg1) -> ; erreur: nombre d'arguments insuffisants (fonction1 arg1 arg2) -> ; erreur: type d'argument incorrect: ... Si arg1 ou arg2 ne sont pas conformes au type d'argument nécéssaire à fonction1 var1 et var2 sont des variables définies dans fonction1 (avec setq par exemple). Si elle sont déclarées, comme dans l'exemple, on les appellent variables locales. La valeur qui leur est attribuée dans fonction1 ne le sera que pendant l'exécution de fonction1, elles reprendront ensuite la valeur qu'elles avaient avant l'appel à fonction1 (nil ou autre). Si au sein de fonction1, var3 est definie avec setq, et qu'elle n'a pas été déclarée, on l'appelle variable globale, elle conserve sa valeur pendant toute la session du dessin. De plus amples expilcations, en anglais, dans Aide aux dévellopeurs -> AutoLISP Developer's Guide ->Using the AutoLISP Language -> AutoLISP Basics -> Symbol and Function Handling -> Local Variables in Functions -> Local Variables versus Global Variables et, en français dans le Didactitiel AutoLISP -> Utilisation des outils de débogage Visual LISP -> Différenciation entre les variables locales et les variables globales.
  21. Si tu fais un (defun c:cmdlsp ... c'est pour pouvoir lancer le lisp en tapant cmdlsp directement à la ligne de commande, dans ce cas, tu ne peux pas avoir d'argument. Si tu défini une fonction avec des arguments, il faut l'appeler (depuis un lisp ou la ligne de commande) avec une expression LISP (cmdlsp arg1 arg2 ...) Dans ton exemple, c'est, soit : (defun c:cmdlst () (setq nom_calque (getstring "\nEntrez le nom du caque: ")) (command "-calque" "e" nom_calque "") (princ) ) et, pour appeler la commande, taper cmdlst à la ligne de commande et répondre ensuite Denis à l'invite, soit : (defun cmdlsp (nom_calque) (command "-calque" "e" nom_calque "") ) et (cmdlsp "Denis") à taper à la ligne de commande ou à intégrer à l'intérieur d'une autre routine.
  22. Il semblerait que nous ayont des points communs au delà de notre intérêt pour le LISP ;)
  23. Tu peux copier l'exemple suivant et le coller dans un nouveau fichier de l'éditeur VisualLISP : (if (or ( (> 100 anngle) ) (setq Ya 0) ) ensuite tu fais "Formater la fenêtre d'édition : http://xs75.xs.to/pics/06146/editeur.PNG.xs.jpg L'éditeur décale vers la droite chaque niveau de paranthèse équivalent. Le (or est un or logique (non exclusif), si un des test ( 100 anngle) retourne T à (or, (or retourne T à (if et (if exécute (setq Ya 0). Si aucun des test ne retourne T (if retourne nil. Si le code est : (if (or ( (> 100 anngle) ) (setq Ya 0) (setq Ya 1) ) Et si aucun des test ne retourne T (if exécute (setq Ya 1)
  24. Pour compléter ton bouquin, tu peux voir les liens donnés dans ce sujet et aussi consulter l'aide aux dévellopeurs AutoLISP References -> AutoLISP Functions, toutes les commandes y sont décrites (en anglais certes, mais avec les arguments et parfois des exemples) Pour les paranthèses, tu peux utiliser l'éditeur VisualLISP (menu outils), un double clic devant une paranthèse ouvrante ou derrière une paranthèse fermante sélectionne tout le code jusqu'à la paranthèse correspondante. Mais aussi beaucoup d'autres fonctions que je te laisse découvrir.
  25. Ces "traits", ce sont des lignes, des polylignes (ou encore des traces) ? Si les lignes sont toujours de largeur nulle, les polylignes (comme les traces) peuvent avoir une largeur. Regarde dans la fenêtre de propriétés. NB : attention, dans les propriétés de ne pas confondre épaisseur de ligne et épaisseur, la seconde propriété est en fait une épaisseur en élévation "3D". [Edité le 7/4/2006 par (gile)]
×
×
  • 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é