Aller au contenu

chris_mtp

Membres
  • Compteur de contenus

    406
  • Inscription

  • Dernière visite

Tout ce qui a été posté par chris_mtp

  1. chris_mtp

    Probleme dans DCl

    J'ai essayé de modifier le lisp en faisant le code ci-dessous mais toujours (defun Dialog (/ tmp file dcl_id result ss box1) ;; créer un fichier temporaire et l'ouvrir en écriture (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w")) ;; écrire dans le fichier (write-line (strcat "SpecialInputBox:dialog { label = \"PLAN DE COMPARAISON\";fixed_width=true; initial_focus = \"box1\"; :row{ :edit_box { key = \"box1\"; label = \"Plan de comparaison\"; edit_width=7; } :button{ label=\"Saisir\"; key=\"ss\"; edit_width=10; alignment=bottom; allow_accept=true; } } spacer; ok_cancel; } ") file ) ;; fermer le fichier (close file) ;; charger le fichier (setq dcl_id (load_dialog tmp)) ;; Appeler la boite de dialogue (if (not (new_dialog "SpecialInputBox" dcl_id)) (exit) ) (set_tile "box1" "0") ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq lst (list (get_tile \"box1\") )) (done_dialog)" ) ;; afficher la boite de dialogue (start_dialog) ;; décharger la boite de dialogue (unload_dialog dcl_id) ;; supprimer le fichier (vl-file-delete tmp) lst ) (defun c:pdc ( / lst) (setq lst (Dialog)) (alert (strcat "\nValeur Plan de comparaison : " (nth 0 lst) "m")) (prin1) ) Je voudrais si l'utilisateur choisi le bouton saisir sélectionner un texte ou mtext dans le dessin et attribuer cette valeur à l'edit box. Si je met ca dans le lisp (set_tile "ss" (setq txt (car(entsel "\nSaisir la distance cumulée : "))) (if (= (cdr (assoc 0 (entget txt))) "TEXT") (setq vdit (cdr (assoc 1 (entget txt)))) ) ) Autocad me plante Merci par avance de votre aide. John. [Edité le 31/10/2009 par chris_mtp]
  2. Bonjour à tous, J'ai un sérieux problème dans un dcl et je ne vois pas comment faire. Voila, j'ai fait un petit dcl dans un lisp (defun Dialog (/ tmp file dcl_id result lst1 lstc box1) ;; créer un fichier temporaire et l'ouvrir en écriture (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w")) ;; écrire dans le fichier (write-line (strcat "SpecialInputBox:dialog { label = \"PLAN DE COMPARAISON\";fixed_width=true; initial_focus = \"lst1\"; :popup_list { key = \"lst1\"; label = \"Type d'attribution du PDC\"; edit_width = 15; } :edit_box { key = \"box1\"; label = \"Niveau Plan de comparaison (m)\"; edit_width = 7; } spacer; ok_cancel; } ") file ) ;; fermer le fichier (close file) ;; charger le fichier (setq dcl_id (load_dialog tmp)) ;; Appeler la boite de dialogue (if (not (new_dialog "SpecialInputBox" dcl_id)) (exit) ) (setq lstc '("Valeur imposée" "Automatique")) (start_list "lst1") (mapcar 'add_list lstc) (end_list) (set_tile "box1" "0") ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq lst (list (get_tile \"box1\") )) (done_dialog)" ) ;; afficher la boite de dialogue (start_dialog) ;; décharger la boite de dialogue (unload_dialog dcl_id) ;; supprimer le fichier (vl-file-delete tmp) lst ) (defun c:pdc ( / lst) (setq lst (Dialog)) (alert (strcat "\nValeur Plan de comparaison : " (nth 0 lst) "m")) (prin1) ) qui me permet soit d'entrer au clavier la valeur d'un plan de comparaison, soit d'attribuer la valeur du plan de comparaison de manière automatique. Ce que je souhaiterais, c'est lorsque je choisi Automatique dans le popup, l'edit box devient grisée, sinon si je choisi valeur imposé, soit entrer une valeur au clavier dans l'edit box soit par un button de sélectionner un texte dans mon dessin qui sera la valeur de mon edit box. Il me manque deux ou trois lignes de lisp et je bloque depuis deux jours. Merci par avance de votre aide. John
  3. Bonjour Lili C'est Un utilitaire de Circe qui permet de convertir sous MSDOS un fichier de coordonnées d'un système à un autre. John
  4. Bonjour à tous, chehilidjamel2009, je me suis trouvé au même problème que toi un moment en voulant transformer des coordonnées d'un système à l'autre, de LII à RGF93 et ainsi de suite. Lilli a pas tort, Covadis fait les changements de coordonnées très bien mais si tu ne l'as pas, c'est un peu plus compliqué. Pour ma part, je fais le changement de coordonnées d'un système à un autre par une transformation d'Helmert qui peut très bien se faire en lisp avec la fonction trans. Tu peux très bien convertir d'abord tes coordonnées d'un système vers un autre avec CirceBatch. Et puis calculer tes paramètres d'helmert par des matrices et une résolution par les moindres carrés, là il faut s'y connaitre un peu math mais c'est possible. Je n'ai pas develloppé cette application car je ne m'y connais pas assez en lisp mais j'ai trouvé le moyen de convertir mes coordonnées avec CirceBatch. Le seul problème vient du calcul matriciel qui est limité, voire très limité en lisp. John.
  5. chris_mtp

    Arc sur polyligne

    Merci Zebulon pour ton aide. J'ai pu faire ma liste comme je voulais en modifiant un peu ton code. John.
  6. Bonjour à tous, J'ai une polyligne 2D constitué de segments droits et d'arc. Comment puis je faire pour créer une liste de points avec les centre des arcs qui composent la polyligne ? Ma polyligne est fermée. Merci par avance de votre aide. John. [Edité le 19/10/2009 par chris_mtp]
  7. Bonjour à tous, Suite à ce sujet http:// http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=22054#pid93790 , qui consisté à tracer des polylignes 2D fermées autour d'un axe en plan décalé selon une distance spécifié par l'utilisateur, j'aimerais savoir s'il est possible de modifier ce lisp pour avoir les segments des polylignes les uns à la suite des autres sur un même axe. Les images ci-dessous sont peut être plus explicites. Avant : http://www.cijoint.fr/cjlink.php?file=cj200910/cijcrnUtxM.jpg Après : http://www.cijoint.fr/cjlink.php?file=cj200910/cijfR1c18a.jpg Le dessin peut contenir autant des blocs que des polylignes 2D ou 3D ou bien des hachures. Je ne vois pas comment en fait trouver les intersections du polygone de contour avec les polylignes 2D et 3D ou du moins ne sélectionner que les élements contenus dans le polygone. Si vous avez des idées, merci par avance de votre aide. John [Edité le 17/10/2009 par chris_mtp]
  8. Merci Patrick et Gile pour ces infos. J'ai pu m'en sortir en modifiant ma fonction. John.
  9. Bonjour à tous, Je cherche à convertir une liste de points 2d en 3d avec l'ajout d'un z constant à chaque point de ma liste 2D. J'ai essayé donc de faire une petite fonction mais bug... (defun tri2d3d (lst1 ze / lst2 first xe ye) (while lst1 (setq first (car lst1)) (if (= (length first) 2) (progn (setq xe (nth 0 first)) (setq ye (nth 1 first)) (setq lst2 (cons (list xe ye ze) lst2)) ) (setq lst2 (cons first lst2)) ) (setq lst1 (cdr lst1)) ) ) J'ai tout essayé et serieux je ne vois pas mon erreur ou mon oubli. Je précise que ma liste de départ contient des points 3D et des points 2D Merci par avance de votre aide. John [Edité le 13/10/2009 par chris_mtp]
  10. chris_mtp

    Tri dans une liste

    Merci Gile, Les deux fonctions marchent nickel mais la seconde correspond exactement à ma demande. John.
  11. Bonjour à tous, J'ai une liste de points 3D dans un lisp sous la forme ((x1 y1 z1) (x2 y2 z2) (x3 y3 z3) ....(xi yi zi).......(xj yj zj)....(xn yn zn)). Dans ce même lisp, je clique deux points (par exemple p(i) et p(j) et je voudrais ensuite faire une fonction qui ne me conserve dans la liste que les points compris entre les deux sommets p(i) et p(j) de la forme ((xi yi zi).......(xj yj zj)) Si vous avez une idée sur la manière dont traiter cette liste ou un exemple, merci par avance de votre aide John
  12. Merci mais après pour supprimer les sommets trop proches et dessiner une nouvelle polyligne, là je ne vois pas. John.
  13. Merci Gile pour ces infos mais je n'en vois aucune qui permet d'identifier des sommets d'une polyligne trop proches. John.
  14. Bonjour à tous, Cela fait un bon moment que j'essaye de trouver une solution à un problème mais en vain. Serait il possible en lisp de modifier le nombre de sommet d'une polylignes de manière à éviter des sommets qui seraient trop proches ou trop éloignés mais bien répartis sur la polyligne selon la même idée que la commande diviser ou mesurer d'AutoCAD ? Le principe serait de : -Sélectionner la polyligne 2D/3D à modifier -Afficher la longueur de la polyligne en question et indiquer le nombre de sommet avant modification -Indiquer la longueur d'un segment de polyligne -Retracer une polyligne à la place de l'ancienne La commande mesurer insérent des points nodaux Autocad sur la polyligne sélectionné. Le but serait de joindre ensuite par une polyligne 2D ou 3D ces points mais là ???? De plus, la commande mesurer n'affiche dans la barre de commande ni la longueur de la polyligne sélectionné ni le nombre de sommet. C'est sur qu'on le voir avec la fenêtre propriétés mais ce n'est pas pratique pour dessiner des projets 3D. Merci par avance de votre aide. John.
  15. MErci Gile John.
  16. Bonjour à tous, J'ai fait un lisp qui m'exporte les attributs d'un bloc dans un fichier texte format txt mais je souhaiterais que ce fichier texte s'ouvre automatiquement à la fin de l'export sans devoir moi-même l'ouvrir avec le bloc notes. Un peu comme la fonction OpenExcel de Gile qui permet d'ouvrir un fichier excel en précisant le nom du fichier. Je ne sais pas si ca existe ou sinon on peut passer par une commande mSDOS à mon avis mais je ne connais pas la syntaxe. Merci par avance de votre aide. John.
  17. Merci de ton aide Gile. Je pense que je vais pouvoir m'en sortir maintenant. John.
  18. Bonjour Gile, Je suis en train de modifer ce lisp pour l'adapter à mes beoins mais j'ai un problème avec la fonction make_poly3d. Je te rappelle en deux mots ce que je veux faire. A partir d'un semis de points codifié, c'est à dire un fichier texte N X Y Z Code, je veux tracer des polylignes. Je te donne un exemple simple avec le fichier de points format texte ci-dessous 1 328.3597 683.9375 5.150324806 203 2 325.3092 684.9577 5.090597469 203.1 3 321.8876 686.0142 5.004440185 203.1 4 316.6931 686.9688 4.863586669 205 5 313.3115 687.0264 4.745996852 205.1 6 309.8689 686.8254 4.588746593 203.5 7 306.7425 685.8647 4.379835319 205.1 10 300.0204 681.3748 4.237701208 203 12 294.8277 676.3205 4.205529748 203.1 14 289.4974 671.1836 4.196680146 203.1 15 287.2692 668.5112 4.289344627 205.5 16 284.5862 665.5201 4.307360618 203.5 D'après ce fichier de points, le lisp doit me tracer une polyligne 3D passant par les points 1 2 3 et 6 ,une seconde polyligne passant par les points 4,5,7 et 15 et enfin une troisième polyligne passant par les points 10,12,14 et 16 car le suffixe .5 d'un code indique la polyligne 3D doit s'arréter et donc en tracer une nouvelle à partir du point suivant. Or quand j'utilise la fonction, le lisp me trace une seule polyligne 3D entre le point 1 et le point 16. Je pense qu'il faudrait modifier la première ligne de la fonction mais je ne vois pas comment. J'ai essayé d'ajouter le bout de code surligné mais je pense que la fonction ne tient pas compte de ma condition. (defun make_poly3d (lst first code / ref pts) (setq ref (strcat (substr code 1 3) "*")) (while (and first (wcmatch (nth 4 first) ref) (setq code (nth 4 first)) ) (setq pts (cons (list (atof (nth 1 first)) (atof (nth 2 first)) (atof (nth 3 first)) ) pts ) lst (cdr lst) first (car lst) ) ) (command "_.3dpoly") (foreach p (reverse pts) (command "_non" p) ) (if (= (substr code 4) ".4") (command "_c") (command) ) [surligneur] (if (= (substr code 4) ".5") (command "exit") (command) )[/surligneur] lst ) Si tu ne comprends pas, je peux te mettre en ligne une image pour voir le résultat final. Merci par avance de ton aide car là vraiment je suis bloqué. John. [Edité le 22/8/2009 par chris_mtp] [Edité le 22/8/2009 par chris_mtp]
  19. chris_mtp

    Vraiment pas content...

    Bonus, je dis ca pour déconner mais c'est pas bon leur manière. Bonne chance. John.
  20. chris_mtp

    Vraiment pas content...

    Bonjour Bonuscad, Je confirme, ta page perso est toujours disponible ou du moins on peut y accéder encore sur le Net. En ce qui concerne le code de Batixis.com, fais leur un procès ? Motif : Mise en service d'un programme non réalisé par l'entreprise à usage commercial. Publicité mensongère Attaque les ces bouffons. C'est tout. Qu'est que c'est que çà ? Ou vas t'on ? Tu vois, lorsque j'ai débuté le lisp, j'ai copié des bouts de code ou de lisp qui m'interressait, je m'en servais et je m'en sers toujours au boulot car elles sont pratiques et efficaces. Je ne travaille pas avec Covadis mais les fonctions que j'ai faites ou récupérer sur le net sont à peu près équivalente mais jamais, jamais je ne me permettrais de diffuser un code surtout pour que l'on compte d'une entreprise sans avoir au moins demander l'avis à l'auteur. Bonne chance mais à mon avis lâche pas l'affaire. Pour ma part, je te soutiens à 300% John. [Edité le 18/8/2009 par chris_mtp]
  21. Merci Gile pour ces précieuses infos. Je vais intégrer le dcl dans mon lsp et même pour les prochains. John.
  22. Bonjour, Ce n'est pas Covadis qui va te résoudre tes problèmes d'échelle d'impression. Si tous les dessins sont fais dans l'espace objet en 1/1, tu n'a pas de problème alors. Je ne vois pas le souci. Créer une nouvelle présentation dans Autocad avec le gestionnaire des présentations et en echelle 1/1 puis clique ok. Tape fmult en commande et créer le rectangle de ta présentation. Double clique à l'intérieur et fais d'abord zoom étendu puis un zoom 1000/(Facteur d"échelle)xp Pour un plan au 1/200, ca donne 1000/200xp. De la, selon le format de papier que tu auras choisi dans Autocad tu pourra voir si ton dessin rentre dans un A3 avec une échelle au 1/200eme par exemple ou autre. Dernier petit truc, si je suis ton client ou ton patron et que je vois sur un forum Internet le nom d'un propriétaire d'une des parcelles que je traite, je t'envoi tout de suite à l'ANPE du coin. C'est une faute professionnelle ca, tu le sais ??? John [Edité le 16/8/2009 par chris_mtp]
  23. C'est bon J'ai trouvé, ca marche nickel. Je connaissais pas cette recherche d'erreur avec Ctrl+F9. C'est bien et pratique tout comme le Ctrl+Alt+E Merci tout de même mais deux dernières petites questions, 1-on ne peut vraiment pas intégrer la boite de dialogue dcl dans le lisp car c'est mieux de gérer un fichier lsp au lieu de deux (un lsp et un dcl) ? 2-Il n'y a pas dans VisualLisp une interface graphique qui permet de créer les boutons, les popup et les textes assez facilement un peu comme en VBA ? John. [Edité le 16/8/2009 par chris_mtp]
  24. Salut Gile, Oui j'ai oublié de modifier sur le forum mais je l'ai fait en fait sur mon appli. Par contre, j'ai toujours le retour ; erreur: nombre d'arguments trop important Le fichier LSP (defun testDialog ( / dcl_id result lsth lst1 lst2) ;; charger le fichier DCL (setq dcl_id (load_dialog "QuadInputBox.dcl")) ;; Appeler la boite de dialogue (if (not (new_dialog "SpecialInputBox" dcl_id)) (exit) ) ;;; initialisation de la boite ;; attribuer une valeur par défaut au premier edit_box (set_tile n "box1" "0") (set_tile n "box2" "0") (setq lsth '("100" "200" "250" "250" "500" "1000" "1250" "1500" "2000" "2500" "5000")) ;; initialiser la liste 1 (start_list lst1) (mapcar 'add_list lsth) (end_list) ;; initialiser la liste 2 (start_list lst2) (mapcar 'add_list lsth) (end_list) ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq lst (list (get_tile \"box1\") (get_tile \"box2\") (nth (atoi (get_tile \"lst1\")) lsth) (nth (atoi (get_tile \"lst2\")) lsth))) (done_dialog)" ) ;; afficher la boite de dialogue (start_dialog) ;; décharger la boite de dialogue (unload_dialog dcl_id) lst ) Le fichier dcl // Boite de dialogue : 2 edit_box + 2 popup_list SpecialInputBox:dialog { label = "Pr"; // Titre de la boite de dialogue initial_focus = "box1"; :edit_box { key = "box1"; // identifiant du contrôle label = "Valeur PDC)"; // libellé de la première boite edit_width = 7; // largeur de la boite d'édition } :edit_box { key = "box2"; label = "Dist.cum"; edit_width = 7; } :popup_list { key = "lst1"; label = "1/X"; edit_width = 7; } :popup_list { key = "lst2"; label = "1/Y"; edit_width = 7; } spacer; ok_cancel; } Et en début de mon lisp principal j'ai mis (setq lst (testDialog)) (setq pdc (atof (nth 0 lst))) (setq dc (atof (nth 1 lst))) (setq echx (atof (nth 2 lst))) (setq echy (atof (nth 3 lst))) Merci de ton aide car je ne vois pas sérieusement. John [Edité le 16/8/2009 par chris_mtp]
  25. Gile, merci tout d'abord de ton aide. La présentation de la dcl correspond exactement à ce que je veux faire. J'ai donc essayé d'utiliser la dcl. Je me suis permis de le modifier (il manqué un ; au lieu de : ligne 8 et ligne 15 yavait une erreur d'après Autocad : devant les popup list mais j'ai encore le retour erreur trop d'argument Dans mon lisp initial, j'ai mis (setq lst (testDialog)) (setq pdc (atof (nth 0 lst))) (setq dc (atof (nth 1 lst))) (setq echx (atof (nth 2 lst))) (setq echy (atof (nth 3 lst))) pour récupérer les valeurs des entrées utlisateur, J'ai aussi modifié la dcl comme suit // Boite de dialogue : 2 edit_box + 2 popup_list SpecialInputBox:dialog { label = "Pr"; // Titre de la boite de dialogue initial_focus = "box1"; :edit_box { key = "box1"; // identifiant du contrôle label = "Valeur PDC"; // libellé de la première boite edit_width = 35: // largeur de la boite d'édition } :edit_box { key = "box2"; label = "Dist.cum"; edit_width = 35; } popup_list { key = "lst1"; label = "1/X"; edit_width = 35; } popup_list { key = "lst2"; label = "1/Y"; edit_width = 35; } spacer; ok_cancel; } Et la fonction que j'ai rajouté à la fin de mon lisp (defun testDialog ( / dcl_id result) ;; charger le fichier DCL (setq dcl_id (load_dialog "QuadInputBox.dcl")) ;; Appeler la boite de dialogue (if (not (new_dialog "SpecialInputBox" dcl_id)) (exit) ) ;;; initialisation de la boite ;; attribuer une valeur par défaut au premier edit_box (set_tile n "box1" "0") (set_tile n "box2" "0") ;; initialiser la liste 1 (start_list "lst1") (mapcar 'add_list '("100" "200" "250" "250" "500" "1000" "1250" "1500" "2000" "2500" "5000")) (end_list) ;; initialiser la liste 2 (start_list "lst2") (mapcar 'add_list '("100" "200" "250" "250" "500" "1000" "1250" "1500" "2000" "2500" "5000")) (end_list) ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq lst (list (get_tile \"box1\") (get_tile \"box2\") (nth (atoi (get_tile \"lst1\")) lst1) (nth (atoi (get_tile \"lst2\")) lst2))) (done_dialog)" ) ;; afficher la boite de dialogue (start_dialog) ;; décharger la boite de dialogue (unload_dialog dcl_id) lst ) A ceci, j'ai une question, dans les popup, on peut mettre autant de valeur à choisir que l'on veut ou bien ya t-il une limite dans le nombre de valeur ou de choix utilisateur ? Merci par avance. John.
×
×
  • 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é