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. Bonjour, existe-t-il une logique entre le nom du fichier de travail et les noms des fichiers BUSE, VL et TOPO ? J'imagine que dans ton cas vous travaillez par planche qui porte chacune son numéro ? Ce serait gérable si les fichiers de travail s'appelaient Chantier_EXE_A_1.dwg avec A qui serait l'indice et 1 le numéro de planche. De la même manière, les fichiers xrefs devraient suivre une logique similaire Chantier_XREFOH_B_1.dwg, Chantier_XREFVL_D_1.dwg, Chantier_XREFTOPO_B_1.dwg. A partir du fichier de travail, on trouve le nom du fichier avec dwgname, dont on peut extraire le numéro de planche. Après on peut regarder les xrefs qui sont attachées et qui correspondent à cette planche, puis on compare avec ce qu'on trouve dans les répertoires. Si, dans les répertoires, on trouve un indice plus élevé, on détache l'ancien et on rattache le nouveau, en ayant pris soins de se remettre en SCG. S'il n'y a pas de xref et qu'un fichier existe, on l'attache. Sinon, s'il n'y a pas une telle logique, on peut quand même supposer que l'indice apparait quelque part dans le nom des fichiers ? Le lisp pourrait consister à reprendre la liste des xrefs qui est présente dans le fichier de travail et à vérifier s'il existe une version plus récente. Il faudrait un peu nous en dire plus sur l'organisation des noms de fichiers pour qu'on puisse voir ce qu'il est possible de faire. Je ne crois pas que cela soit facile ! Amicalement Vincent
  2. zebulon_

    Largeur ou épaisseur

    Bonjour, avec FILLMODE à 0, les polylignes larges ne sont plus remplies et les contours de la polyligne épaisse se tracent comme les lignes, polyligne d'épaisseur 0, cercle etc... :) Cela devrait répondre à la demande, sauf que FILLMODE 0 enlève aussi les hachures... :( Amicalement Vincent
  3. c'est ce qu'on fait tous et c'est comme ça qu'on arrive à progresser collectivement :D Amicalement Vincent
  4. mais je pense que le problème est lié directement à la commande mtext. Comme dit plus haut, si on met un angbase au nord, qu'on saisit un mtext avec un angle "_r" à 0, on a un texte horizontal, alors qu'avec un angbase au nord, l'angle 0 devrait pointer vers le haut et non vers la droite. En tout cas la commande TEXTE fonctionne comme ça : un angle de 0 donne un texte vertical si angbase pointe vers le nord. La commande _insert fonctionne aussi bizarrement quand angbase n'est pas à l'est. Quand on saisit la valeur de la rotation dans la boîte de dialogue (en ayant décoché saisir à l'écran), l'angle de rotation tient compte de angbase. Par contre si on saisit la valeur de l'angle en ligne de commande, angbase n'est pas respecté. C'est ce que je constate sur mon autocad 2014. Soit je suis bourré, soit il se trouve que dans ces commandes (sans doute dans d'autres aussi), on n'a pas eu de la suite dans les idées chez autodesk. Amicalement Vincent
  5. Après quelques essais qui m'ont laissés songeur, il semblerait que la fonction _mtext ne fonctionne pas bien au niveau des angles lorsque ANGBASE n'est pas à l'est. On met, par exemple l'angle 0 au Nord (ANGBASE=90), comme on le voit souvent sur des plans de topographes, on place un mtext à l'angle 0. On s'attend à ce que le texte soit vertical. Non, il est horizontal et tourné vers l'est, comme si mtext ne tenait pas compte de angbase. Bizarre... La commande TEXTE, qui n'est pas multiligne, tient compte de angbase. Comme j'utilise toujours autocad avec l'angle 0 à l'est, ce fonctionnement curieux au niveau des mtext n'apparait pas. Amicalement Vincent
  6. Bonjour Denis, Voir la fonction (getorient [pt] [message]) qui est similaire à la fonction getangle, sauf que la valeur retournée par getorient n'est pas affectée par les variables ANGBASE et ANGDIR. Getorient mesure toujours les angles en prenant comme sens l'est à 0 et le sens trigo. Voir aussi la fonction angtos pour transformer des radians en degrés ou grades. Il est souvent plus simple de saisir un deuxième point (c'est ce qu'on fait le plus souvent quand on saisit lors d'une commande demandant un angle, c'est rare qu'on tape 90, 100 ou 270). Le plus simple c'est de faire la même chose dans le lisp, au lieu de s'embêter avec des angles. Si besoin, j'utilise aussi (polar ), qui fait que je peux rester en radian, même si j'utilise une ligne (command ...). A noter que pour éviter de saisir un cadre pour le mtext, on peut aussi indiquer "_w" à 0 par exemple : (command "_.-MTEXT" "_non" pt_ins_Txt "_r" "_non" (polar pt_ins_txt (angle pt_ins pt_ins_txt) 1) "_w" 0 Text "") qui place le texte en pt_ins_txt, avec un angle donné par les points pt_ins et pt_ins_txt Amicalement Vincent
  7. zebulon_

    cote associative

    Bonjour, la variable DIMASSOC à 1 : (elle est à 2 par défaut) crée des objets de cotes non associatifs. Les éléments de la cote sont groupés pour former un seul objet. Si l'un des points de définition sur l'objet se déplace, la valeur de la cote est mise à jour. COTDISSOCIER COTREASSOCIER sont les commandes qui permettent de dissocier ou de réassocier les cotes. Personnellement, j'ai mis DIMASSOC à 1 dans mon dwt, parce que je trouve également que, lorsqu'on bouge un objet auquel est associé une cote, cette cote se déplace à des endroits qui sont rarement bons. Par ailleurs, lorsque je modifie un dessin, je le fais beaucoup avec la commande ETIRER. Si on attrappe la poignée de la cote en même temps que l'extrémité du segment coté, le cote évoluera qu'elle soit associée ou non. L'associativité des cotes ne me parait donc pas indispensable, d'autant qu'on la perd assez rapidement en effaçant un segment coté sans effacer la cote. C'est un peu pareil avec les hachures. Amicalement Vincent
  8. zebulon_

    lire plan en atelier

    j'ai espéré trouver quelque chose du côté des options de ligne de commande, qu'on aurait pu personnaliser en indiquant le nom de la présentation souhaitée. La syntaxe des options de ligne de commande est la suivante : "lecteur:nom du chemin\acad.exe" ["nom dudessin"] [/nom de "l'option"] http://exchange.autodesk.com/autocadmep/fra/online-help/BLDSYS/2012/FRA/pages/WS1a9193826455f5ffa23ce210c4a30acaf-79ba.htm Mais il n'y a visiblement pas d'option qui permettrait de choisir telle ou telle présentation. Ce qu'il y a de plus proche, c'est l'option /v qui permet d'indiquer une vue particulière du dessin à afficher au démarrage. Si à chaque présentation correspond une vue du même nom, cela pourrait marcher. Mais ce n'est pas génial non plus : trop compliqué à mettre en oeuvre, pour autant que ça marche. Amicalement Vincent
  9. Bonjour, c'est ce que j'ai fait : ;; trier la liste svt la première colonne en prenant les valeurs numériques entières (setq ltab (vl-sort ltab '(lambda (e1 e2) (< (atoi (car e1)) (atoi (car e2)))))) En fait, j'ai précisé la méthode de tri parce qu'au départ, je n'avais pas mis (atoi ...) et, comme le résultat de la fonction vla-GetText est (on s'en doute...) de type texte, le résultat du tri était "1" "10" "100" "2" etc..., donc pas ce que je voulais. Je n'ai pas été assez précis, en fait, mon lisp fonctionne comme je le souhaite. Je voulais le partager au cas où quelqu'un d'autre aurait besoin de trier un tableau autocad. Je m'étonnais aussi de l'inexistance d'une fonction de tri dans un tableau. Vous me direz : c'est pas excel... ou vous me direz : bien sûr que ça existe, il faut faire ceci ou cela (j'avoue n'avoir rien trouvé qui irait dans ce sens) On pourrait aussi améliorer le lisp en demandant : - la plage de lignes à trier ? - quelle colonne utiliser pour faire le tri ? - du plus petit au plus grand ou inversement ? - utiliser des valeurs numériques ou alphanumériques ? Amicalement Vincent
  10. zebulon_

    lire plan en atelier

    http://cadxp.com/topic/33773-video-marquer-un-sujet-resolu/
  11. Bonjour, j'ai cherché une fonction de tri d'un tableau dans autocad, mais je n'ai pas trouvé (Autocad 2014). Le but est de trier selon la première colonne du tableau, dans l'ordre croissant et selon les valeurs numériques entières (sinon on a "1" "10" "100" "2" "20" "200", au lieu de 1 2 10 20 100 200) Je suis donc passé par un lisp (defun c:tabsort () (vl-load-com) (setq e (car (entsel))) (setq obj (vlax-ename->vla-object e)) (setq eRows (vla-get-rows obj)) (setq eColumns (vla-get-columns obj)) (setq R 2) ; je commence à la troisième ligne, 1ère titre, 2ème sous-titre (setq ltab nil) (repeat (- eRows 3) ; pas les 2 premières lignes, ni la dernière (totaux) (setq C 0) (setq lval nil) (repeat eColumns (setq val (vla-GetText obj R C)) (setq lval (cons val lval)) (setq C (+ C 1)) ) (setq ltab (cons (reverse lval) ltab)) (setq R (+ R 1)) ) ;; trier la liste svt la première colonne en prenant les valeurs numériques entières (setq ltab (vl-sort ltab '(lambda (e1 e2) (< (atoi (car e1)) (atoi (car e2)))))) ;; réinjecter les valeurs triées dans le même tableau (setq R 2) (repeat (- erows 3) (setq lval (car ltab)) (setq ltab (cdr ltab)) (setq C 0) (repeat ecolumns (setq val (car lval)) (setq lval (cdr lval)) (vla-SetText obj R C val) (setq C (+ C 1)) ) (setq R (+ R 1)) ) (princ) ) Amicalement Vincent
  12. zebulon_

    lire plan en atelier

    Peut être en mettant un 2ème QRcode sur le cartouche qui contient le nom de la présentation et le scan de cette 2ème vignette lance la commande (setvar "ctab" le_nom_lu_dans_le_QRcode)
  13. zebulon_

    lire plan en atelier

    Bonjour, un dessin -> une présentations ce n'est pas ce que j'ai dit. Dans mon esprit et dans ma pratique, c'est un fichier = un cartouche. Ce n'est pas pareil. Il est évident que j'utilise les présentations, cela peut même aller jusqu'à 20, 30 ou plus. Mais il s'agit toujours du même plan ou cahier, pour être plus précis. Pour revenir au QRcode, pour l'instant, quand autocad est ouvert, si tu scannes ton QRCode, le bon fichier s'ouvre ? Amicalement Vincent
  14. zebulon_

    lire plan en atelier

    ouais, bof. Le pdf c'est peut être pas top compte tenu que tu veux que l'atelier puisse mesurer sur ton plan. Peut être alors avec les paramètres d'ouverture d'autocad ? Je ne sais pas s'il y a possibilité de choisir l'onglet de présentation. Je ne crois pas. Amicalement Vincent
  15. zebulon_

    lire plan en atelier

    Bonjour, je ne comprend pas ta logique. On n'obtient le dwgprefix et le dwgname que quand le dessin est ouvert, donc c'est pareil que ctab. Je pense que tu exécutes ton lisp une fois que tu es positionné sur la bonne présentation : le ctab est donc parfaitement disponible et on peut l'insérer quelque part à la suite de la fonction strcat. Le problème se situe à l'ouverture du fichier, je pense. Quand tu scannes le QRcode qui contient le nom du fichier dwg, il s'ouvrira bien, mais il faudra ensuite qu'autocad aille tout de suite sur le bon onglet de présentation. Je peux te conseiller la chose suivante : un fichier dwg = un plan (ou un cartouche). S'il y a plusieurs onglets, ils formeront un cahier d'un seul plan. Si on met 2 plans dans le même fichier, ça ne marche jamais bien lorsqu'il faut en indicer un et pas l'autre, par exemple. Ou bien lorsqu'il faut nommer le fichier : suivant le numéro du premier plan ? du deuxième ? des deux ? Partant de ce postulat : un plan = un fichier, tu pourras créer un seul fichier pdf de chacun de tes plans à l'indice donné (feuille seule ou cahier) en imprimant en pdf ou en publiant vers pdf. En atelier, ils ouvriront le fichier pdf qui sera l'équivalent de ton plan ou cahier papier. Et là il n'est plus question de CTAB, puisqu'on ouvrira un pdf. Donc, au lieu de coder le nom du fichier dwg dans le QRcode, on codera le nom du fichier pdf que tu créeras et qui aura le même nom à l'extension près. Il faudra repérer le "." dans dwgname, supprimer ce qu'il y a derrière et remplacer par ".pdf" (substr (getvar "dwgname") 1 (vl-string-position (ascii ".") (getvar "dwgname"))) pour enlever le ".dwg" à la fin du nom de fichier, qu'on pourra substituer par ".pdf" Cela donnerait : (setq str (strcat "file:///" (getvar "dwgprefix") (substr (getvar "dwgname") 1 (vl-string-position (ascii ".") (getvar "dwgname"))) ".pdf")) Amicalement Vincent
  16. zebulon_

    lire plan en atelier

    Bonjour, une discussion fort intéressante sur les méthodes de travail des uns et des autres, mais on s'écarte de la demande initiale de notre ami Gepetto à laquelle il conviendrait de trouver un début de réponse. Pour ton lisp, il ne faut pas poser la question qui consiste à renseigner la variable STR. Comme tu veux que cela se fasse tout seul, il n'est pas souhaitable que le lisp s'interrompe pour donner l'occasion à un utilisateur de donner une réponse. On mettra donc une ligne qui renseigne directement la variable STR avec le nom du fichier et son chemin, que tu peux obtenir avec les variables dwgprefix et dwgname, et que tu peux concaténer avec "file:///" par l'intermédiaire de la fonction strcat dont tu pourras regarder l'aide. (setq str (strcat "file:///" (getvar "dwgprefix") (getvar "dwgname"))) Le nom de la présentation courante s'obtient par l'intermédiaire de la variable CTAB (getvar "ctab"). Veux-tu placer ce texte directement à la suite du nom du fichier ? Je pense que l'étape (validstr ...) qui consiste, si j'ai bien compris, à vérifier notamment que l'utilisateur n'a pas rentré de ligne vide est superflue, puisqu'on impose un texte qu'on suppose être valide. Mais je peux me tromper : je n'ai pas trop cherché à comprendre comment cela se passe en profondeur. Ensuite, on insère le bloc sans donner à l'utilisateur le loisir de choisir le point d'insertion, la rotation, l'echelle qui seront imposés par le lisp, pour la même raison que ci-dessus. (command "_INSERT" name "_non" '(9 38) 0.001 0.001 0) Le "_non" c'est pour éviter que la commande "_insert" s'accroche à une extrémité (ou autre selon le réglage courant de tes accrochages aux objets), '(9 38) c'est les coordonnées du point d'insertion, 0.001 les facteurs d'échelle respectivement en X et en Y et 0 l'angle de rotation. La commande dmQRcode, faite sur le modèle de mQRcode (defun c:dmQRcode (/ incrName str i name) (setq i 0) (while (tblsearch "block" (setq name (strcat "QRCode_" (itoa (setq i (1+ i))))))) (setq str (strcat "file:///" (getvar "dwgprefix") (getvar "dwgname"))) (QRcode str name 0) (command "_REGENALL") (command "_INSERT" name "_non" '(9 38) 0.001 0.001 0) (princ) ) Amicalement Vincent
  17. Bonjour, je trouve que faire un lisp pour régler 2 variables, c'est un peu de la grosse artillerie pour pas grand chose. Je persiste à dire que ça suffirait de régler ces 2 variables dans le dwt. Amicalement Vincent
  18. Bonjour, peut être en modifiant les variables SKPOLY, SKETCHINC, SKTOLERANCE ? (setvar "skpoly" 1) ; génère des polylignes (setvar "sketchinc" 0.10) ; définit l'incrément à 0.10 Une fois que ces variables sont fixées au démarrage, on peut utiliser la commande MAINLEV avec les règlages qui vont bien. Compte tenu que ce sont des variables systèmes enregistrées dans le dessin, le plus simple serait encore de fixer les bonnes valeurs dans ton fichier dwt. Plus besoin de lisp. Amicalement Vincent
  19. zebulon_

    chemin d un bloc

    Bonjour, une barre oblique inverse (\) à l'intérieur d'une chaine de caractères permet d'inclure des caractères de contrôle ou des codes d'échappement. Dans ton code, tu l'utilise d'ailleurs dans la ligne (prompt "\nPosition de la DATE") où le code \n signifie "nouvelle ligne". Compte tenu que \ introduit un code de contrôle, il ne représente pas le caractère "\". Si on veut le caractère "\", il faut le code correspondant à savoir "\\" Donc, le chemin serait plutôt "c:\\00-llisp\\datej.dwg" Par ailleurs, si le répertoire 00-llisp est dans la liste des chemins de recherche des fichiers de support, on peut aussi utliser la fonction (findfile "datej.dwg") qui renverra le chemin complet. Amicalement Vincent
  20. Bonjour, quel est l'intérêt ? amicalement Vincent
  21. zebulon_

    lire plan en atelier

    Bonjour, les chinois : les nouveaux colonisateurs de l'Afrique. Pauvre Afrique... Mais ce n'est pas à moi de jeter la pierre aux chinois, ils ne font que reprendre à leur compte ce que nous, européens, nous avons pratiqué pendant des siècles, à savoir voler la richesse (hommes, matières premières etc...) d'un continent. Et en matière de construction, comme je disais précédemment, on n'a pas attendu les chinois pour faire des ouvrages de conception, disons, discutable. Dans les années 1950, on croyait avoir trouvé en France le procédé de construction parfait, à savoir la précontrainte. Cela a été mis absolument partout pendant 50 ans (pont routiers, barrages, pistes d'aéroports, réacteurs nucléaires, réservoirs, conduites et canalisations etc...) et on construisait à tour de bras au sortir de la guerre, un peu comme en Afrique aujourd'hui, sans s'inquiéter de la manière dont cela allait vieillir. Et les pathologies que présentent ces ouvrages aujourd'hui permettent de dire que l'enthousiasme (et l'ego, mais ça, ça n'a pas changé) de certains ingénieurs de l'époque était légèrement surdimensionné. Je ne dis pas que la précontrainte est un mauvais procédé, au contraire, c'est génial, mais comme pour toute technique, il a fallu attendre quelques années pour obtenir des mises en oeuvre et des matériaux qui résistent mieux au temps qui passe et des ingénieurs formés a prendre en compte tout les effets que ce temps qui passe a mis en évidence. Amicalement Vincent
  22. pareil pour moi ! Je ne m'étais jamais servi de la fonction last et elle ne faisait pas partie de mon vocabulaire. Une lacune qui vient d'être comblée ! J'essaye les vlax-curve, dont l'autre avantage, qui devrait plaire à Vince-34, est de fonctionner de la même manière sur des polylignes et des lignes, voire des arcs ou des arcs d'ellipse (mais dans ce denier cas, c'est PEDIT qui ne saura pas gérer des arcs d'ellipses). Par ailleurs, il faut faire attention à la variable PEDITACCEPT : si elle est à 0 alors PEDIT demande une confirmation avant de transformer une ligne en polyligne, ce qui mène à l'arrêt du lisp. Pour éviter que le dernier segment soit un arc, je propose d'éviter de faire un clore et ajouter au PEDIT les 2 segments droits de fermeture. (defun c:Ferme2poly (/ poly1 poly2 PTD1 PTD2 PTF1 PTF2 LIG1 LIG2 OLDPEDIT) (vl-load-com) (setq poly1 (car (entsel))) (setq poly2 (car (entsel))) (setq PTD1 (vlax-curve-getStartPoint poly1)) (setq PTD2 (vlax-curve-getStartPoint poly2)) (setq PTF1 (vlax-curve-getEndPoint poly1)) (setq PTF2 (vlax-curve-getEndPoint poly2)) (if (inters PTD1 PTD2 PTF1 PTF2) (progn (command "_line" "_non" (trans PTD1 0 1) "_non" (trans PTF2 0 1) "") (setq LIG1 (entlast)) (command "_line" "_non" (trans PTF1 0 1) "_non" (trans PTD2 0 1) "") (setq LIG2 (entlast)) ) (progn (command "_line" "_non" (trans PTD1 0 1) "_non" (trans PTD2 0 1) "") (setq LIG1 (entlast)) (command "_line" "_non" (trans PTF1 0 1) "_non" (trans PTF2 0 1) "") (setq LIG2 (entlast)) ) ) (setq OLDPEDIT (getvar "PEDITACCEPT")) (setvar "PEDITACCEPT" 1) (command "_pedit" poly1 "_j" poly2 LIG1 LIG2 "" "") (setvar "PEDITACCEPT" OLDPEDIT) (princ) )
  23. mieux, c'est à dire ? Amicalement Vincent
  24. Bonjour, essaye ceci (defun massoc (key alist / x nlist) (setq nlist nil) (foreach x alist (if (eq key (car x)) (setq nlist (cons (cdr x) nlist)) ) ) (reverse nlist) ) (defun c:Ferme2poly () (setq poly1 (car (entsel))) (setq poly2 (car (entsel))) (setq PTD1 (car (massoc 10 (entget poly1)))) (setq PTD2 (car (massoc 10 (entget poly2)))) (setq PTF1 (car (reverse (massoc 10 (entget poly1))))) (setq PTF2 (car (reverse (massoc 10 (entget poly2))))) (if (inters PTD1 PTD2 PTF1 PTF2) (command "_line" "_non" (trans PTD1 0 1) "_non" (trans PTF2 0 1) "") (command "_line" "_non" (trans PTD1 0 1) "_non" (trans PTD2 0 1) "") ) (command "_pedit" poly1 "_j" poly2 (entlast) "" "_c" "") (princ) ) Amicalement Vincent
  25. j'utilise la version 2014. J'ai modifié le lisp pour rajouter entupd merci Amicalement Vincent
×
×
  • 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é