Aller au contenu

Didier-AD

Membres
  • Compteur de contenus

    130
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Didier-AD

  1. Didier-AD

    DCL_Logo

    puisqu'on est dans les pub sachez que "Grand mère sait faire des slides remplis" Ah ! grand mère, donnez nous donc votre recettes Il y a longtemps que je n'ai plus utilisé de slide ; à l'époque, le type de hachures solides n'existait pas, il y avait juste les polylignes épaisses et effectivement elles n'étaient pas remplies dans les slides alors je faisais comme çà : un hachurage serré ; autoCAD était berné car les slides sont des fichiers avec une structure vectorielle ; si tu fais des hachures serrées, autoCAD les prendra comme des lignes indépendantes et les génèrera dans ton slide. inconvénient, le slide est plus long à charger; mais ton logo n'est pas forcément très grand alors tout est histoire de compromis
  2. Didier-AD

    kelvinator

    il paraitrait qu'on peut les lire pour ma part, j'espère que non !
  3. Didier-AD

    métré

    Je crois bien qu'avant de faire des métrés, il faudrait que tu structures un peu plus ton dessin, tout logiciel de DAO, ne devient intéressant par rapport à la planche à dessin qu'à partir du moment ou on ne l'utilise plus comme une planche à dessin mais comme une base de données graphique. les calques, les blocs aident dans un premier temps à cette structuration les blocs avec attributs en apportent un peu plus, surtout si ces attributs sont dynamiques... Si ton dessin est bien structuré, tu entres alors un peu dans la CAO.
  4. Merci
  5. Eh ! çà s'arrose; je viens de poster mon 100 ème message, j'ai gagné un galon à ma ceinture quand je pense au palmares de Tramber, çà me mine....
  6. sinon, dès que tu as décalé ta polyligne, tu récupères son nom avec (entlast) et tu la changes de calque comme ceci ;; récupération du nom de la polyligne (setq LstPol (entlast)) ; ;récupérer les données autoCAd de la polyligne (setq Ent (entget LstPol)) ; ;Modifier la donnée "Calque "de la polyligne (setq NewEnt (subst (cons 8 "LIMITES") (assoc 8 Ent) Ent)) ;; Mettre à jour la polyligne (entmod NewEnt) avec cette syntaxe, le calque LIMITES n'a pas besoin d'exister, autoCAd le crée on peut faire un peu plus court encore avec les fonctions Vla mais pour un débutant c'est un peu moins lisible.
  7. Didier-AD

    métré

    Salut, tout d'abord J'espère que tu ne souhaites pas regrouper tous ces éléments dans un même métré ensuite, peut-être espères tu trouver quelquechose de tout fait ; dans ce cas, tu trouveras peut-être des choses dans ce forum mais pour que çà corresponde exactement à tes souhaits, je suis perplexe Sinon, faut prendre des bonnes idées à droite et à gauche et se retrousser les manches pour les assembler. ce que tu demandes fait appel à deux concepts 1°) compter et mesurer des éléments 2°) communiquer avec Excel sur le premier point, il y a beaucoup à dire selon que tu souhaites simplement compter ou mesurer des objets ou encore les deux; celà va dépendre également de la structuration de ton dessin par exemple pour compter tous les blocs "EGOUT" d'un dessin situés dans le calque "PROJET", tu peux utiliser une séquence comme ceci (setq Js (ssget "X" (list (cons 0 "INSERT") (cons 2 "EGOUT) (cons 8 "PROJET")))) (if Js (print (strcat "il y a " (sslength Js) " blocs Egout dans ce dessin")) (print "Pas de bloc Egout dans ce projet") ) Sur le second point, tu trouveras sur ce forum plein de fils de discussion, le dernier en date est ici bon courage
  8. Merci pour l'info mais pour ce que je veux faire, il faudrait que je puisse écrire le PPS "à la volée" or il est crypté... merci tout de même pour y avoir passé du temps
  9. OK, j'ai vu ! en fait le layout pointe avec un code 331 sur un viewport qui lui , pointe par des codes 331 sur des entités layers merci , je vais pouvoir me débrouiller et pour répondre à la question de Patrick , le layer courant est aussi marqué gelé si c'est le cas.
  10. merci à tous les deux, mais ma question, en fait va plus loin et ne concerne pas les fenêtres d'espace papier maisl'espace papier lui même je cherche à dessiner directement dans l'espace papier (en fait écrire du texte à la manière de la bannière d'autoCAD par un réacteur sur la commande PLOT) l'idée au départ est de créer ce texte dans le calque 0 ou dans le calque courant ; la routine fonctionne dans 95% des cas . Mais ce calque peut très bien avoir été gelé dans l' "espace papier" par l'utilisateur ; je cherche donc le premier calque qui soit - non gelé en général (çà je sais faire) - actif (je sais faire aussi) - imprimable (je sais faire également) - non gelé dans l'espace papier (je n'ai pas encore trouvé). [Edité le 7/6/2007 par Didier-AD]
  11. Ou trouve-ton l'information des calques gelés dans une fenêtre d'espace papier; vraissemblablement dans un dictionnaire lié à la fenêtre mais lequel ? plus compliqué maintenant : il est possible de "geler dans une fenêtre" n'importe quel calque dans une présentation, c'est à dire en espace papier "pur" où trouve-t-on l'info des calques gelés dans une présentation ?
  12. Quelqu'un a-t-il déjà essayé de modifier les paramètres de la Bannière par programmation et non pas par la commande BANNIERE autrement dit, où se cachent ces paramètres, ils sont modifiables par la commande BANNIERE ou par dans l'onglet "Tracer et Publier" des options ou dans la partie avancée de la commande TRACER Il y a également un fichier mm.pps dans document ant settings\etc\ect.... mais il est crypté Je cherche à l'activer et la paramétrer par programmation merci de toute aide
  13. Non, c'était juste un challenge, d'ailleurs, mes souvenirs de l'algorythme Delaunay étaient très vagues quand j'ai lancé ce challenge.... La preuve : j'ai écrit la routine selon l'algorythme décrit en début de challenge, çà donne çà : http://xs216.xs.to/xs216/07225/Image6.jpg Pas terrible hein ? J'ai d'abord cru à une erreur de programmation et puis je suis allé vérifier l'algorythme sur Internet et c'est un peu plus complexe qu'annoncé au début la même liste de points devrait donner ceci http://xs216.xs.to/xs216/07225/Image7.jpg mais çà m'a piqué au vif et j'y reviendrai avec la routine et des explications
  14. voici. (defun C:CDGPOL ( / pol cdg) (setq pol (car (entsel "\n pointez une polyligne"))) (if (setq cdg (cdgpol pol)) (alert (strcat "centre de gravité : " (rtos (car cdg) 2 3) " , " (rtos (cadr cdg) 2 3))) ) ) (defun cdgpol (pol / ent lp) (if (and pol (= "LWPOLYLINE" (cdr (assoc 0 (setq ent (entget pol)))))) (setq lp (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) ent))) (print "pas une polyligne !!! ") ) (if lp (List (/ (apply '+ (mapcar 'car lp)) (length lp)) (/ (apply '+ (mapcar 'cadr lp)) (length lp)) ) ) ) Attention, la routine ne vérifie pas si la polyligne est fermée et ne tient pas compte des arcs éventuels; si çà ne te suffit pas, dis le, on peut faire mieux.
  15. merci
  16. en gros, c'est çà
  17. désolé, il faut avoir chargé les objets com, comme ils sont chargés automatiquement chez moi, j'ai oublié il faut ajouter la ligne ci dessous avant ou après la fonction (ou la taper au clavier) (vl-load-com) (vl-load-com) (defun c:surf( / pt e surf) (setq pt (getpoint "\n point à l'intérieur de la zone")) (if (setq e (bpoly pt)) (progn (setq surf (vlax-get (vlax-ename->vla-object e) "area")) (entdel e) (if (not $$htxt) (setq $$htxt (getdist pt "\nhauteur du texte"))) (command "_text" pt $$htxt 0 (rtos surf 2 3)) (command "_move" (entlast) "" pt pause) ) ) )
  18. Salut, vite fait, çà fait ce que tu demandes ; au premier lancement il te sera demandé la hauteur souhaitée pour le texte. (defun c:surf( / pt e surf) (setq pt (getpoint "\n point à l'intérieur de la zone")) (if (setq e (bpoly pt)) (progn (setq surf (vlax-get (vlax-ename->vla-object e) "area")) (entdel e) (if (not $$htxt) (setq $$htxt (getdist pt "\nhauteur du texte"))) (command "_text" pt $$htxt 0 (rtos surf 2 3)) (command "_move" (entlast) "" pt pause) ) ) )
  19. Merci du compliment les fonctions ASSOC, MEMBER, MAPCAR n'ont pas les mêmes roles ; il n'est donc pas aisé de les comparer d'un point de vue optimisation ASSOC permet de trouver une sous liste par l'intermédiaire d'une cle (numérique ou chaine) dans une liste en arbre du type (setq l '((1 "Didier" "BTP") (2 "Krunch" "Meca") (3 "BonusCAD" "GIS"))) (assoc 2 l) retourne (2 "Krunch" "Meca") le temps d'exécution dépend de la position de la sousliste dans la liste principale ; au pire, on peut compter n unité de temps (n = nombre de sous listes dans la liste) : pour descendre jusqu'à la clé MEMBER permet souvent de tester l'existence d'un élément dans une liste mais aussi de rtourner la fin d'une liste à partir de cet élément ; (setq l '(1 2 3 4 5 6 7 8 9)) (member 5 l ) retourne (5 6 7 8 9) le temps d'exécution est du même ordre que celui de assoc il dépend de la position de l'élément dans la liste ; au pire n unité de temps (avec n le nombre d'éléments de la liste) MAPCAR sert à appliquer une fonction à tous les éléments d'une ou plusieurs listes et retourne la liste des résultats. il me semble que giles (ou Patrick_35) a écrit un "papier très instructif sur MAPCAR dans le fil d'un récent challenge mais je ne l'ai pas retrouvé pour mettre un lien dessus MAPCAR exécute la fonction demandée autant de fois qu'il y a d'élément dans la plus courte des listes qui lui sont proposées le temps d'exécution dépend bien entendu de la fonction à exécuter à titre personnel, je voue à MAPCAR une véritable dévotion car elle est d'une puissance fabuleuse dans le traitement des listes. FOREACH permet d'exécuter n fois (n = nombre d'éléments d'une liste) un série d'instructions ou une fonction ; le temps d'exécution dépend des instructions ou de la fonction à exécuter à la différence de MAPCAR, FOREACH retourne ce qu'a retourné la dernière instruction exécutée et non pas une liste Quand aux fonctions vl-*, elles ont chacune leur utilité , soit pour ne garder que certaines valeur d'une liste soit pour vérifier des propriétés des éléments d'une liste elles sont toutes associées à une fonction dont le role est de retourner T ou NIL le temps d'exécution de ces fonctions VL dépend essentiellement du temps d'exécution de la fonction associée qui est répétée en général n fois (n étant le nombre d'éléments de la liste). Encore une fois, il est difficile de comparer ces différentes fonctions car elles ont des rôles différents, ce que je peux te conseiller c'est de les essayer chacune avec des exemples simples afin de bien comprendre ce qu'elles fournissent et à partir de quoi ; et lorsque l'occasion se présentera tu pourras choisir celle qui te convient le mieux VLISP et c'est sa force permet d'obtenir les mêmes résultats avec des écritures différentes, Finalement, le temps d'exécution n'a d'importance que quand les calculs sont très répétitifs, La concision du code fait souvent frémir de bonheur les vieux lispeurs, mais je t'avoue que parfois lorsque je relis mes anciens codes avec 3 mapcar dans la même ligne, je regrette de ne pas avoir pris le temps de mettre quelques commentaires.. [Edité le 28/5/2007 par Didier-AD]
  20. Impeccable cette fois ci et très très concis ; bravo !
  21. C'est vrai, on se calme, c'est juste un exercice pour un challenge, il ne s'agit pas de refaire un logiciel comme COVADIS Effectivement, dans ce genre de calcul, en C, c'est beaucoup plus rapide qu'en LISP ; Il ne s'agit pas non plus de pouvoir traiter des grosses quantités de points, juste se prendre un peu la tête sur la gestion des listes de données. J'avais fait un essai il y a fort longtemps et j'ai égaré le code ; à l'époque, il n'y avait pas les fonctions performantes de Visual Lisp comme vl-remove ou vl-member-if peut-être que ce n'est pas si déplorable que çà en temps.
  22. Celui là, c'est pour les champions et le résultat pourra être placé dans les routines LISP il s'agit de modéliser un terrain à partir de points topographiques XYZ un des algorythmes utilisables est l'algorythme de Delaunay expliqué brièvement sur l'image ci dessous http://xs215.xs.to/xs215/07221/Image5.jpg petit truc pour aider au début : le premier triangle peut être aisément remplacé par un rectangle qui englobe l'ensemble des point et qu'on partage immédiatement en 2 triangles selon une diagonale. Petit (gros) bonus pour les acharnés : c'est plus beau de gérer les triangles en mémoire dans une liste et de ne tracer l'ensemble des 3Dfaces qu'à la fin... ci dessous une liste de points 3D (261.341 151.864 118.208) (261.341 231.435 109.913) (261.341 209.625 108.910) (261.341 187.688 111.296) (261.341 165.778 113.907) (261.341 143.880 116.624) (244.612 132.933 108.374) (243.423 154.766 106.772) (241.139 176.734 106.750) (238.306 198.775 107.633) (235.467 220.854 109.054) (233.168 242.068 117.193) (231.955 262.027 127.368) (217.871 252.288 122.565) (220.615 231.858 112.188) (209.367 221.134 107.400) (214.361 198.875 104.777) (219.337 176.621 102.725) (223.547 154.569 101.787) (216.735 132.933 103.892) (234.937 143.767 103.828) (203.039 154.269 104.912) (207.431 132.933 106.385) (197.267 176.411 103.857) (205.387 187.703 103.276) (187.490 210.195 103.050) (193.993 232.177 108.430) (189.535 252.556 117.659) (202.315 262.170 126.142) (173.809 262.194 117.792) (164.878 242.899 106.257) (171.578 221.549 101.145) (178.817 198.952 101.696) (186.007 176.286 102.897) (192.557 154.095 104.319) (191.341 132.933 102.500) (159.324 262.036 114.489) (147.683 252.928 109.743) (142.111 232.567 105.030) (151.193 209.795 100.863) (160.463 186.318 98.751) (169.390 163.156 97.382) (177.457 141.252 96.924) (172.529 129.088 98.047) (165.095 146.289 98.761) (155.429 169.761 100.321) (145.163 194.366 102.781) (134.813 218.814 105.983) (124.887 241.373 112.746) (115.932 260.565 121.039) (109.996 241.818 119.556) (120.270 221.286 111.719) (131.002 198.100 106.516) (141.817 174.008 102.930) (152.343 150.337 100.258) (162.230 128.369 98.760) (160.981 114.926 97.683) (149.770 131.893 98.662) (139.007 154.257 101.776) (127.937 177.594 106.119) (116.761 200.720 111.263) (105.668 222.123 118.729) (84.476 229.970 128.232) (86.329 201.978 120.898) (101.851 202.030 116.291) (104.356 171.573 110.850) (110.269 160.843 108.148) (122.011 139.311 103.400) (133.694 118.449 99.885) (145.386 100.825 98.046) (131.700 98.445 100.217) (119.510 121.967 102.855) (136.209 135.679 100.425) (107.406 142.350 106.768) (95.226 162.809 111.760) (82.834 182.555 117.777) (70.107 200.654 124.910) (74.028 219.401 128.642) (53.139 198.237 128.582) (49.695 179.781 124.721) (66.612 181.718 121.429) (70.129 154.294 115.697) (83.388 136.275 111.165) (96.505 117.955 107.528) (109.602 100.336 104.789) (123.860 83.493 102.695) (108.510 85.160 105.805) (94.972 102.330 107.748) (80.299 120.882 110.578) (67.467 136.623 113.921) (53.483 153.237 118.530) (32.264 177.067 128.000) (235.681 132.933 104.717) Et normalement à la fin il faut enlever ce qui reste du premier triangle
  23. désolé, Patrick mais çà ne fonctionne toujours pas avec (setq lz '(((3.0 4.0 0.0) (3.0 6.0 0.0)) ((1.0 2.0 0.0) (1.0 4.0 0.0)) ((1.0 4.0 0.0) (3.0 4.0 0.0)) ((3.0 6.0 0.0) (4.0 7.0 0.0)) ((6.0 7.0 0.0) (6.0 4.0 0.0)) ((6.0 4.0 0.0) (7.0 3.0 0.0)) ((12.0 3.0 0.0) (1.0 2.0 0.0)) ;;;segment ajouté pour fermer le contour ((4.0 7.0 0.0) (6.0 7.0 0.0)) ((7.0 3.0 0.0) (9.0 3.0 0.0)) ((9.0 3.0 0.0) (10.0 5.0 0.0)) ((12.0 5.0 0.0) (12.0 3.0 0.0)) ((10.0 5.0 0.0) (12.0 5.0 0.0)) )) (SortList Lz) retourne ((1.0 2.0 0.0) (1.0 2.0 0.0)) ((1.0 4.0 0.0) (1.0 4.0 0.0)) ((3.0 4.0 0.0) (3.0 4.0 0.0)) ((3.0 6.0 0.0) (3.0 6.0 0.0)) ((4.0 7.0 0.0) (4.0 7.0 0.0)) ((6.0 4.0 0.0) (6.0 4.0 0.0)) ((6.0 7.0 0.0) (6.0 7.0 0.0)) ((7.0 3.0 0.0) (7.0 3.0 0.0)) ((9.0 3.0 0.0) (9.0 3.0 0.0)) ((10.0 5.0 0.0) (10.0 5.0 0.0)) ((12.0 3.0 0.0) (12.0 3.0 0.0))
  24. vl-member-if !!!!!!!! en voilà une qui m'avait échappé.....je m'en souviendrai moi, j'avais prévu ceci, avec une sécurité, (indice n) dans le cas où les segments ne se rejoignent pas (defun sortlist (l / lf n) (setq lf (list (car l)) l (cdr l) n 0 ) (while (and l (< n (length l))) (cond ((equal (caar l) (cadr (last lf)) 1e-9) (setq lf (append lf (list (car l))) l (cdr l) n 0 ) ) ((equal (cadar l) (caar lf) 1e-9) (setq lf (cons (car l) lf) l (cdr l) n 0 ) ) ((equal (caar l) (caar lf) 1e-9) (setq lf (cons (reverse (car l)) lf) l (cdr l) n 0 ) ) ((equal (cadar l) (cadr (last lf)) 1e-9) (setq lf (append lf (list (reverse (car l)))) l (cdr l) n 0 ) ) (t (setq l (append (cdr l) (list (car l))) n (1+ n) ) ) ) ) lf ) mais BonusCAD a fini par résoudre son problème et n'en a donc plus besoin. Bon WE à tous
  25. Pas d'accord avec toi, Patrick, dans le cadre d'un challenge de quelque niveau que ce soit, il n'y a pas de réponse idiote, juste des tentatives qu'on peut juste qualifier d'optimisables éventuellement mais je pense que tes propos ont juste dépassé ta pensée cordialement
×
×
  • 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é