Aller au contenu

zebulon_

Membres
  • Compteur de contenus

    1 489
  • Inscription

  • Dernière visite

  • Jours gagnés

    19

Tout ce qui a été posté par zebulon_

  1. J'y connais rien en VBA, mais dans Autocad il y a 2 commandes pour gérer les calques : _-layer _vplayer (ou FCALQUE en français) et la seconde commande sert justement à gérer la visualsation des calques dans les fenêtres. Si on lance la commande CALQUE, qui nous renvoie vers une boîte de dialogue, celle-ci gère les 2 aspects des calques. Donc, s'il y a 2 commandes dans autocad, il y a de fortes chances qu'il y ait aussi 2 commandes dans VBA ? Amicalement Zebulon_ Sinon, j'ai fait quelque chose de similaire en LISP qui gèle un calque dans une fenêtre FMULT par désignation d'un objet, à toutes fins utiles ... (defun c:gfen () (if (= (getvar "TILEMODE") 0) (progn (setq e T) (While e (setq e (entsel "\nSélectionner un objet du calque à geler dans la fenêtre :")) (if e (progn (setq a (entget (car e))) (setq PTSEL (car (cdr e))) (setq TYPSEL (cdr (assoc 0 a))) (if (= TYPSEL "INSERT") ; si BLOCK ou XREF (progn (setq INFOTBL (tblsearch "BLOCK" (cdr (assoc 2 a)))) (if (= (boole 1 (cdr (assoc 70 INFOTBL)) 4) 4) ; c'est une xref (progn (setq e (nentselp PTSEL)) ; je recherche l'élément dans la XREF (setq a (entget (car e))) ) ) ) ) (setq NOMC (cdr (assoc 8 a))) (command "_vplayer" "_f" NOMC "_c" "") ) ) ) ) (alert "uniquement en espace papier") ) (princ) )
  2. zebulon_

    Problème avec un lisp

    peu importe son nom et son emplacement, le tout c'est de le rajouter à la liste des chemins de recherche de fichiers de support qu'on trouve dans les outils / Options / Fichiers En tout cas, il vaut mieux ne pas le mettre dans un répertoire par défaut d'autocad, genre C:\Program Files\Autocad...\Support, pour ne pas mélanger le perso avec ce qui est fourni et pour ne pas virer ce qui est perso quand tu installes une nouvelle version Amicalement Zebulon_
  3. Salut petit scarabé Il y a peut être aussi la fonction textbox qui peut être intéressante. En exemple un prog qui dessine un cadre autour d'une entité texte sélectionnée et qui utilise textbox. (defun c:tbox (/ textent tb ll ur ul lr OLDOS) (setq OLDOS (getvar "osmode")) (setvar "osmode" 0) (setq textent (car (entsel "\nSélectionner un texte : "))) (command "_ucs" "_e" textent) (setq tb (textbox (list (cons -1 textent))) ll (car tb) ur (cadr tb) ul (list (car ll) (cadr ur)) lr (list (car ur) (cadr ll)) ) (command "_pline" ll lr ur ul "_c") (command "_ucs" "_p") (setvar "osmode" OLDOS) (princ) ) à toutes fins utiles Amicalement Zebulon_
  4. S'il n'y a qu'une seule fenêtre de présentation, je te suggère d'utiliser la commande _-plot en prenant une imprimante dwf. (defun c:timp () (if (= 1 (getvar "TILEMODE")) ;; passe en espace papier si nécessaire (setvar "TILEMODE" 0) ) (if (setq DWFNAME (getfiled "Nom du DWF" "" "dwf" 1)) (command "_-plot" "_n" "" "" "DWF6 ePlot.pc3" DWFNAME "_n" "_y") ) ) Amicalement Zebulon_
  5. zebulon_

    cotedit

    Bonjour, j'ai un petit soucis avec la commande cotedit. Elle permet, entre autre, d'appliquer une rotation au texte de cote ou d'appliquer une rotation au traits de rappel (pour faire un cotation oblique). Quand je suis en scu général, tout va bien. Quand je suis dans un scu local tourné par rapport au scu général, ça fonctionne bizarrement : pour la rotation du texte, l'angle appliqué est l'angle par rapport au scu local (et c'est bien), pour la cotation oblique l'angle appliqué est l'angle par rapport au scu général (et là c'est moins bien) sans tenir compte du scu local. Serait-ce un bug ? Amicalement Zebulon_ http://img476.imageshack.us/img476/8031/cotob3gh.jpg Pour illustrer, j'ai fait un scu dont l'orientation n'a rien à voir avec le scu général, j'ai fait une cote verticale, puis un COTEDIT R avec un angle de 15 et le texte est tourné de 15° par rapport au scu local. Par contre, COTEDIT O avec un angle de 15 provoque une rotation de 15° par rapport au scu général. [Edité le 23/11/2005 par zebulon_]
  6. bonjour, Sélectionner une polyligne lancer la commande _list sur cet objet récupérer la valeur de la variable PERIMETER Pour ce qui est de placer des blocs le long d'une polyligne 3d, je pense qu'en utilisant les commandes autocad _divide (diviser) ou _measure (mesurer), tu devrais arriver a te simplifier la vie. En plus, ces fonctions permettent d'aligner le bloc avec l'objet. Je ne sais pas si ça répond à ta demande Amicalement Zebulon_
  7. Salut, Quand on n'a pas l'habitude, c'est surprenant de voir qu'on peut traiter des subroutines comme des variables, avec setq. C'est très fort le lisp. Merci Amicalement Zebulon_
  8. Bonjour, L'autre jour je me suis fait rappeler à l'ordre parce que je n'avais pas mis de undo group et de undo end dans un lisp que je vous soumettais. La leçon a été bien retenue, promis je n'oublierai plus. Cela m'a donné l'idée de rajouter également des _undo dans la fonction error. Votre avis ? (defun C:MAFONC (/) (command "_.undo" "_group") (defun *error* (msg) (command "_.undo" "_end") (command "_.undo" "1") ;; annuler tout ce qui a été fait par MAFONC (alert (strcat "\nErreur : " msg)) (princ) ) ;; créer des entités (command "_LINE" '(0 0) '(1 1) "") (setq ET1 (entlast)) (command "_LINE" '(1 1) '(2 0) "") (setq ET2 (entlast)) (setvar "filletrad" 2) ;; passe par la fonction error ;; (setvar "filletrad" 0.50) ;; ne provoque pas d'erreur (command "_fillet" ET1 ET2) ;; ligne qui provoque une erreur si filletrad trop grand (command "_.undo" "_end") (princ) ) Amicalement Zebulon_
  9. zebulon_

    ovoide

    en parlant de fun, ily a bien ceci http://www.cadxp.com/sujetXForum-4861.htm où il est question d'une ove. Amicalement Zebulon_
  10. zebulon_

    problème de gestion d\'Xref

    A toutes fins utiles, pour la gestion des xrefs il y a aussi la commande XDELIM (ou _xclip). Elle est utile quand vous avez à utiliser des fonds de plan volumineux (relevé topo, projet routier ...) et que vous n'êtes intéressés que par une petite partie de ce fond de plan (par exemple pour faire un des ouvrages d'art du projet routier...) en créant un nouveau contour (rectangulaire ou polygonal). Ca évite de se colletiner des hectares de relevé topo alors que 100m² suffisent à votre bonheur. A noter qu'il y a une commande similaire pour les images qui s'appelle DELIMIMAGE (ou _imageclip) Amicalement Zebulon_ [Edité le 17/11/2005 par zebulon_]
  11. qui peut le plus peut le moins. Ca devrait marcher aussi avec cette valeur 127. En tout cas, ça marche sur la 2004. Amicalement Zebulon_
  12. Essaie aussi la fonction cond, on s'embête moins avec les progn. (que j'ai justement oublié de mettre dans mon exemple ci dessus :red: ) Un exemple piqué dans l'aide d'autocad (cond ((= what_next 4) ;Prompt user to (getpoint "\npick a point") ;pick pt. ) ((= what_next 0) (prompt "\nuser cancelled dialog") ) ) Si tu aimes les if, tu adoreras les cond Amicalement Zebulon_ [Edité le 16/11/2005 par zebulon_]
  13. Bonjour, Je n'ai pas de 2006, mais j'ai été confronté à ce problème avec la 2004, où l'ordre d'affichage d'objet provenants d'une xref respectait l'ordre de création et non l'ordre d'affichage. Je suis allé dans les outils / options / préférences utilisateur et dans la méthode de tri des objets j'ai activé regénération et, du coup, l'affichage de la xref se fait correctement après un regen. Donc j'ai coché ces 2 options pour un SORTENTS à 112 pour avoir un affichage correct à l'écran (Régénération) et une impression correcte (Traçage). Les modèles dwt par défaut on l'air de n'être configurés que pour le traçage, c'est dommage. Peut-être que dans la 2006, c'est toujours pareil ? Amicalement Zebulon_
  14. pourquoi faut-il créer une liste listobj à partir du jeu de sélection et ne pas dépiauter directement le jeu de sélection lui-même ? (setq jeusel (ssget "x" (list (cons 0 "INSERT") (cons 2 nomblc1)))) (if jeusel (progn (setq I 0) (while (< I (sslength jeusel)) (setq E (ssname jeusel I)) (setq A (entget E)) (setq NOMBLOCK (strcase (cdr (assoc 2 A)))) (setq PTINS (cdr (assoc 10 A))) (setq ANGROT (cdr (assoc 50 A))) (setq ECHX (cdr (assoc 41 A))) (setq ECHY (cdr (assoc 42 A))) ... insérer ici le code supplémentaire ... (setq I (+ I 1)) ) ) ) je pense que cela simplifiera grandement le code et te permettra de voir plus clair. Je pense que ce if ne sert à rien puisque tu fais un ssget en filtrant justement les INSERT et que donc cette condition sera toujours vraie. Amicalement Zebulon_ [Edité le 16/11/2005 par zebulon_]
  15. zebulon_

    premier lisp

    ami lispeur débutant, bonjour Le problème est que la commande _ucs, telle qu'elle est écrite dans ton lisp, n'est pas finie. Tu demandes à l'utilisateur de rentrer 3 points, il faut lui en laisser la possibilité en mettant 3 pauses. (defun c:TESTRV() (Command "_ucs" "_n" "3" pause pause pause) (Command "_plan" "_c") ) Tu utilises les commandes internationales (_ucs, _plan), si possible, il vaut mieux mettre aussi les paramètres en international. Attention à la variable UCSFOLLOW, si elle est à 1 la commande _plan n'est plus nécessaire (ton lisp non plus ?) (defun c:TESTRV() (Command "_ucs" "_n" "3" pause pause pause) (if (= (getvar "UCSFOLLOW") 0) (Command "_plan" "_c") (alert "ça tourne tout seul") ) ) [Edité le 4/11/2005 par zebulon_]
  16. Effectivement, ça marche mieux. Je pensais que je pouvais créer une fichier perso.pat qui contient une collection de hachures, comme pour acadiso.pat. Grossière erreur, une hachure perso par fichier pat et avec correspondance du nom du fichier et de la hachure, sinon on à droit à l'engueulade. Le moins qu'on puisse dire c'est que l'aide n'est pas très fournie pour la création de hachures. Si je n'avais pas trouvé une explication un peu plus détaillée dans le vieux manuel de personnalisation de la version 12 (ma pierre de rosette, en gros), je crois que je n'y serais jamais arrivé. Il marche pas mal, mais le fichier .pat produit par le lisp et nettement plus compliqué que les 7 lignes que j'ai pondues. D'autre part, mon modèle n'est pas carré, donc je n'arrive pas à le faire rentrer dans le carré 1x1 proposé par le lisp. Pour finir, comme on est limité à un carré 1x1 et que mon modèle est plus grand (env. 1.65x1.50), il faudra bricoler avec des facteurs d'échelle à la création de la hachure. Merci Amicalement Zebulon_
  17. Bonjour, Je dois dessiner des murs Terre Armée (rien à voir avec l'Armée de Terre) http://www.groupetai.com/intranet/internetTA.nsf/Web/indexfr.htm murs constitués d'écailles béton préfabriqué en forme de + qui s'emboîtent les uns dans les autres. Donc, je me suis dis, là il faut faire un motif de hachurage. Je me suis gratté la tête un moment avant de comprendre comment on définissait des motifs de hachurage, mais j'y suis quand même arrivé. ça donne quelque chose de ce goût là. *TA,Terre Armee 0, 0.125,0, 0,1.500, 1.375,-1.625 0, 1.625,0.750, 0,1.500, 1.375,-1.625 0, 0,0.375, 0,0.750, 0.125,-1.375 90, 0,0.375, 0,3.000, 0.75,-0.75 90, 1.625,0.375, 0,3.000, 0.75,-0.75 90, 0.125,-0.375, 0,3.000, 0.75,-0.75 90, 1.500,-0.375, 0,3.000, 0.75,-0.75 J'ai rajouté cette définition à la fin de acadiso.pat et ça marche bien. J'ai extrait cette définition de hachure du fichier standart pour le coller dans un fichier perso.pat que j'ai mis dans un répertoire listé dans les repertoires des fichiers de support. Quand je fais une hachure, je choisis un type personnalisation. Puis, au niveau de Personnaliser Motif, je pioche le fichier perso.pat. Et là, je me fais engueuler par Autocad : Erreur dans le fichier de Motifs. :casstet: Pour tester, j'ai copié le fichier acadiso.pat dans le même répertoire que perso.pat et je l'ai renommé mypat.pat. Il ne devrait pas y avoir d'erreur sur ce fichier quand même... Mais, même punition. Si quelqu'un sait comment on peut mettre des hachure personnalisées dans un fichier autre que AutoCAD.pat ou acadiso.pat et pouvoir s'en servir ? Merci Amicalement Zebulon_ [Edité le 28/10/2005 par zebulon_]
  18. Donc je confirme, pas dans la 2004 Amicalement Zebulon_
  19. zebulon_

    texte multiligne

    quand les couleurs des textes sont forcées, cela rajoute des caractères spéciaux dans l'index texte{\C4;textecouleurforcee}texte il faudrait trouver un moyen pour virer les { } et les Cn; un moyen rapide, mais pas très propre, serait de décomposer les textes multiples et de mettre les textes simples obtenus sur la couleur DuCalque. [Edité le 27/10/2005 par zebulon_]
  20. Je n'ai que la 2004 et je n'ai pas trouvé. Alors ça doit être à partir de la 2005, ou bien je ne cherche pas au bon endroit... à savoir la barre d'état ?
  21. à partir de l'A2006 ?
  22. Bonjour, Maintenant qu'on s'est bien amusé à faire des fmults à des échelles bien définies... http://www.cadxp.com/sujetXForum-7372.htm on voudrait aller un cran plus loin et vérifier, avant d'imprimer si les fmults de l'onglet courant de l'espace papier n'ont pas des échelles farfelues. Ca vous est sans doute déjà arrivé aussi de faire une fmult, d'y définir une échelle genre 1:100, de reporter cette echelle dans le titre de la vue et/ou dans le cartouche et, plus tard, refaire un zoom malencontreux dans cette fenêtre (avec la molette de la souris ça va vite !) et vous vous retrouvez avec une fmult au 1:103.655 ou au 1:98.665 sans vous en rendre compte. Vous imprimez votre plan pour le donner à l'économiste, qui chiffre le projet en s'aidant de son kutch (comme tous les économistes) et le pauvre aura 2, 3, 5% dans la vue (en plus ou en moins suivant le sens de rotation de la molette). Je vous soumet donc ce lisp, qui vérifie que les echelles des fmults sont dans la liste définie par le sujet cité ci-dessus. Pourquoi pas substituer ce lisp à la commande _plot ? (defun listeautorisee (/ F FLAG TEMP) (if (setq F (open (strcat (getvar "ROAMABLEROOTPREFIX") "fmmo.fmo") "r")) (progn (setq LZXPAUTORISE nil) (setq FLAG T) (setq TEMP (read-line F)) (setq TEMP (read-line F)) (setq TEMP (read-line F)) (While (setq L (read-line F)) (if FLAG (setq FLAG nil) (progn (setq LZXPAUTORISE (append LZXPAUTORISE (list (rtos (cal L) 2 3)))) (setq FLAG T) ) ) ) (close F) ) (setq LZXPAUTORISE '("1.000" "2.000" "4.000" "5.000" "6.667" "8.000" "10.000" "13.333" "20.000" "40.000" "50.000" "100.000" "200.000" "500.000" "1000.000")) ) ) (defun monimp_ep () (if (not (member "geomcal.arx" (arx))) (arxload "geomcal") ) (setvar "DIMZIN" 0) ; pour que le rtos ne sucre pas les zero du ZXP (listeautorisee) (setq ss (ssget "X" (list '(0 . "VIEWPORT") (cons 410 CTAB)))) ; sélectionne les fenêtres de l'onglet courant (if ss (progn (setq SSL (sslength ss)) (setq I 0) (setq LZXP "") (setq SSE (ssadd)) ; définit SSE comme un jeu de sélection nul (while (< I SSL) (setq E (ssname SS I)) (setq A (entget E)) (setq I (+ I 1)) (setq G41 (cdr (assoc 41 A))) (setq G45 (cdr (assoc 45 A))) (setq G90 (cdr (assoc 90 A))) (setq G69 (cdr (assoc 69 A))) (if (/= G69 1) ; ce n'est pas la fenêtre de présentation elle-même (if (= (rem G90 2) 0) ; ce n'est pas une vue perspective (progn (setq ZXP (rtos (/ G41 G45) 2 3)) (if (not (member ZXP LZXPAUTORISE)) (progn (setq sse (ssadd E sse)) (setq LZXP (strcat LZXP ZXP "\n")) ) ) ) ) ) ) (if (/= LZXP "") (progn (alert (strcat "Fenêtre(s) avec echelle(s) non autorisée(s)\n" LZXP)) (sssetfirst nil sse) ;; afficher les poignées (initget "Oui Non") (setq REP (getkword "\nImrimer quand même [Oui] ou Non : ")) (if (= REP "Oui") (progn (initdia) (command "_plot") ) ) ) (progn (initdia) (command "_plot") ) ) ) ) ) (defun c:monimp () (setq CTAB (getvar "ctab")) ; nom de la présentation courante (if (= CTAB "Model") (progn ; imprimer dans l'espace objet (initdia) (command "_plot") ) (monimp_ep) ; imprimer dans l'espace papier ) (princ) ) ça me fait penser que je pourrais peut être activer le verrouillage de la fmult créée avec le 1er lisp ? Commande FMULT Verrou Actif A priori, ça semble être bien, mais à y regarder de plus près, le verrouillage des fmults verrouille "trop". On ne peut plus faire de zoom à l'intérieur de la fmult (et c'est plutôt bien), mais on ne peut plus faire de pan non plus (et là c'est moins bien) Amicalement Zebulon_
  23. Merci (gile), tu fais bien. Excuse-moi Patrick, je n'avais pas compris le sens de la question. Il y a aussi la variable LOCALROOTPREFIX, qui pointe vers le même répertoire, mais des Local settings (donc pas itinérant sur un réseau prenant en charge cette fonctionnalité) Amicalement Zebulon_
  24. c'est l'endroit où j'écris le fichier "fmmo.fmo" contenant les paramètres par défaut. à+
  25. Pas mal le acet-ui-pickdir. J'utilise une des fonctions du DOSLIB pour faire cela. Mais je ne voudrais pas que l'utilisateur choisisse un répertoire. DWGPREFIX est variable et je vais me retrouver avec des fichiers de configuration aux 4 coins de mon disque dur. TEMPPREFIX est une bonne alternative, mais il arrive quelque fois qu'on y fasse le ménage. Je vais me garder mon ROAMABLEmachin, comme ça marche sur ma 2004... à plus Amicalement Zebulon_
×
×
  • 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é