mateus
Membres-
Compteur de contenus
261 -
Inscription
-
Dernière visite
-
Jours gagnés
2
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par mateus
-
Bonjour à tous je reviens à vous car j'ai réparé ma boucle ( voir ci-dessous) (defun c:MAIN ();Fonction principale (setq interupteur 0) (setq cas1 0 cas2 0 cas3 0 cas4 0 cas5 0 ) (while(= interupteur 0) (if(= cas1 0) (setq alignementEnCours(c:ALIGN));récupération de la fonction "ALIGN" et mise en variable ) (if( = cas2 0) (c:DECAL_RESEAU alignementEnCours); récupération de la fonction DECAL_RESEAU avec comme argument "alignementEnCours" ) (if( = cas3 0) (setq premierCandelabre (getpoint"\n cliquez sur le premier candélabre ")) (setq projectionCandelabre (c:PROJECTION premierCandelabre)) ) (if( = cas4 0) (setq entraxeCandelabre (getdist"\n Indiquez l'entraxe des candélabres ")) ) (if( = cas5 0) (setq decalageCandelabre(getdist"\n Indiquez le décalage des candélabres")); mettre la valeur de la droite par défaut ) ;(c:DROITE projectionCandelabre entraxeCandelabre decalageCandelabre ) ;Trace les droites pour l'assistance. stoker tout les nom des bloc inserer ds une liste. ) ) Dans cette boucle il me reste deux choses à réaliser. La première : les questions qui permettront de voir si l'utilisateur est satisfait ou pas La deuxième : la fonction tracé du dessin (mis en suspens voir ci-dessus) Je souhaiterai procéder une nouvelle fois par étape et commencer par résoudre le problème au niveau des questions. Si quelqu'un a une idée. En attendant je m'y remet :) Merci et bon week end :)
-
Bonjour à tous et toutes , je souhaiterai traduite dans mon programme ceci :(trame) (setq interrupteur 0 Poser la question : Est-ce que l'implantation des candélabres vous convient? Si non Que souhaitez vous modifier? cas1 Alignement cas2 Décalage cas3 PremierCandelabre cas4 Entraxe cas5 Ecart Si c'est le cas "1" on désactive l'intérupteur pour tous les cas sauf le cas "1" Si c'est le cas "2" on désactive l'intérupteur pour tous les cas sauf le cas "2" Si c'est le cas "3" on désactive l'intérupteur pour tous les cas sauf le cas "3" Si c'est le cas "4" on désactive l'intérupteur pour tous les cas sauf le cas "4" Si c'est le cas "5" on désactive l'intérupteur pour tous les cas sauf le cas "5" Si oui setq ( = interrupteur 1) Tous mes cas sont des fonctions crées , je voudrais tous les lancer au démarrage de mon programme de façon à ce que le programme se déroule une première fois( d'où l'interrupteur à 0) Ensuite je souhaiterai poser ces questions (ci-dessous) et si jamais l'utilisateur indique qu'il souhaiterai modifier un des cas on reviendrai au cas voulu si l'utilisateur est satisfait alors interrupteur à 1 et on continue le programme. Ps: Tous les cas seraient dans une boucle "while" Voilà ce que j'ai pensé à faire, mais pour l'instant rien ne marche bien sur :/ : (defun c:MAIN ();Début de la fonction principale (setq interupteur 0) (setq = cas1 0 cas1 0 cas2 0 cas3 0 cas4 0 cas5 0 ) (while(= interupteur 0) if( = cas1 0) ( (setq alignementEnCours(c:ALIGN));récupération de la fonction "ALIGN" et mise en variable ) if( = cas2 0) ( (c:DECAL_RESEAU alignementEnCours); récupération de la fonction DECAL_RESEAU avec comme argument "alignementEnCours" ) if( = cas3 0) ( (setq premierCandelabre (getpoint"\n cliquez sur le premier candélabre ")) (setq projectionCandelabre (c:PROJECTION premierCandelabre)) ) if( = cas4 0) ( (setq entraxeCandelabre (getdist"\n Indiquez l'entraxe des candélabres ")) ) if( = cas5 0) ( (setq decalageCandelabre(getdist"\n Indiquez le décalage des candélabres")); mettre la valeur de la droite par défaut ) );fin de la fonction principal (setq question (strcase(getstring "\n L'implantation vous est t-elle satisfaisante ? [Oui / Non] <Non> "))) (cond ((or(= choix "NON") (= choix "N") (= choix "")) (progn (setq question2 (strcase(getstring "\n Que souhaitez vous modifier? [Alignement / Décalage / PremierCandélabre / Entraxe / Ecart] <Alignement> "))) ) ) ((or(= choix "OUI") (= choix "O")) (setq interrupteur 1) ) ) ) Voilà je souhaiterai avoir des explications si possible en deux temps. Les premières sur la boucle "while" qui ne fonctionne pas , et les autres sur mes questions ( la première question m'est posée et met en variable la réponse "oui" ou "non" mais ne poursuit pas avec les conditions... Merci beaucoup :) et bon week end
-
Bonjour à tous et toutes , je souhaiterai traduite dans mon programme ceci :(trame) (setq interrupteur 0 Poser la question : Est-ce que l'implantation des candélabres vous convient? Si non Que souhaitez vous modifier? cas1 Alignement cas2 Décalage cas3 PremierCandelabre cas4 Entraxe cas5 Ecart Si c'est le cas "1" on désactive l'intérupteur pour tous les cas sauf le cas "1" Si c'est le cas "2" on désactive l'intérupteur pour tous les cas sauf le cas "2" Si c'est le cas "3" on désactive l'intérupteur pour tous les cas sauf le cas "3" Si c'est le cas "4" on désactive l'intérupteur pour tous les cas sauf le cas "4" Si c'est le cas "5" on désactive l'intérupteur pour tous les cas sauf le cas "5" Si oui setq ( = interrupteur 1) Tous mes cas sont des fonctions crées , je voudrais tous les lancer au démarrage de mon programme de façon à ce que le programme se déroule une première fois( d'où l'interrupteur à 0) Ensuite je souhaiterai poser ces questions (ci-dessous) et si jamais l'utilisateur indique qu'il souhaiterai modifier un des cas on reviendrai au cas voulu si l'utilisateur est satisfait alors interrupteur à 1 et on continue le programme. Ps: Tous les cas seraient dans une boucle "while" Voilà ce que j'ai pensé à faire, mais pour l'instant rien ne marche bien sur :/ : (defun c:MAIN ();Début de la fonction principale (setq interupteur 0) (setq = cas1 0 cas1 0 cas2 0 cas3 0 cas4 0 cas5 0 ) (while(= interupteur 0) if( = cas1 0) ( (setq alignementEnCours(c:ALIGN));récupération de la fonction "ALIGN" et mise en variable ) if( = cas2 0) ( (c:DECAL_RESEAU alignementEnCours); récupération de la fonction DECAL_RESEAU avec comme argument "alignementEnCours" ) if( = cas3 0) ( (setq premierCandelabre (getpoint"\n cliquez sur le premier candélabre ")) (setq projectionCandelabre (c:PROJECTION premierCandelabre)) ) if( = cas4 0) ( (setq entraxeCandelabre (getdist"\n Indiquez l'entraxe des candélabres ")) ) if( = cas5 0) ( (setq decalageCandelabre(getdist"\n Indiquez le décalage des candélabres")); mettre la valeur de la droite par défaut ) );fin de la fonction principal (setq question (strcase(getstring "\n L'implantation vous est t-elle satisfaisante ? [Oui / Non] <Non> "))) (cond ((or(= choix "NON") (= choix "N") (= choix "")) (progn (setq question2 (strcase(getstring "\n Que souhaitez vous modifier? [Alignement / Décalage / PremierCandélabre / Entraxe / Ecart] <Alignement> "))) ) ) ((or(= choix "OUI") (= choix "O")) (setq interrupteur 1) ) ) ) Voilà je souhaiterai avoir des explications si possible en deux temps. Les premières sur la boucle "while" qui ne fonctionne pas , et les autres sur mes questions ( la première question m'est posée et met en variable la réponse "oui" ou "non" mais ne poursuit pas avec les conditions... Merci beaucoup :) et bon week end
-
Tout d'abord merci pour ta réponse Giles ! Je commence à comprendre la subtilité entre variable globale / variable locale / arguments grâce à toi, ta réponse et d'autre sujets connexes sur lesquels tu m'as envoyé. J'ai bien compris la nécessité d'imbriquer les fonctions entres-elles (sous-routines), même si je sais qu'il m'arrivera parfois de retomber dans des panneaux et de faire des confusions. Dans un premier temps j'ai crée ce "test" pour obtenir la valeur du gisement entre deux points. Maintenant si j'ai décidé de recréer la roue comme tu dis Giles c'est parce que ça me permet également de réviser mes maths ! Etant donné que je suis mauvais ! :) et plus sérieusement à bien comprendre comment est composée une fonction. PS: Comment puis-je faire si je veux pouvoir lancer le programme et obtenir la résultante (gisement ) puis la déposer dans une variable x ? J'ai essayé comme suit : (defun c:MAIN () (2points) (gisement x1 x2 y1 y2) (setq gis rad2grad) ) (defun 2points (/ p1 p2) ;_ variables p1 et p2 locales à 2points (setq p1 (getpoint "\n premier point ? ")) (setq p2 (getpoint p1 "\n deuxième point ? ")) (command "polylign" "_non" p1 "_non" p2 "") ;_ "_non" désactive l'accrochage (list (car p1) (cadr p1) (car p2) (cadr p2)) ;_ valeur de retour ) (defun hypo (x1 x2 y1 y2) (sqrt (+ (* (- x1 x2) (- x1 x2)) (* (- y1 y2) (- y1 y2)))) ) (defun gisement (x1 x2 y1 y2) (* 2 (atan (- x2 x1) (+ (- y2 y1) (hypo x1 x2 y1 y2)))) ;_ hypo imbriqué dans gisement ) (defun rad2grad (a) (/ (* a 200) pi) ) (defun ResultatGisement () (rad2grad (apply 'gisement (2points))) ) Mon but final est le calcul de points sur une polyligne pour pouvoir y insérer des blocs selon l'entraxe indiquée par l'utilisateur. J'aimerai rester sur mes formules mais si jamais cela ne convient pas tampis
-
essai pour essayer :unsure: Désolé ne tenez pas compte des fautes d'orthographes, j'ai écris un peu trop vite ...
-
Bonsoir à tous et toutes , voilà je viens à vous car j'aimerai procédé différemment quant à la manière de monter un programme en lisp. Je m'explique récemment j'ai un bon collègue de boulot qui m'a expliqué que plutôt de monter un programme avec toutes les fonctions utilisées à l'intérieur il serait préférable d'imbriquer les fonctions unes à unes de façon à éclaircir considérablement le programme et également afin d'éviter les surcharges de variables. D'ailleurs en parlant de variables, mon collègue m'a expliqué la différence entre les variables locales et variables classiques, les varialbes locales permetterai d'éviter de laisser traîner des variables dans la nature sans y remettre la valeur à zéro une fois qu'on on est plus l'utilité. Ce que j'aimerai c'est comprendre le fonctionnement pour imbriquer ces fonctions : ci dessous un essai pour essayer de comprendre la procédure a adapter: (defun c:MAIN ();Fonction principal (c:2POINTS); lancement de la fonction qui récupère les deux points (c:HYPO Dab);lancement de la fonction pythagore qui calcul la longueur de la droite et qui la stocke dans la variable "Dab" (c:GISMENT gis); lancement de la fonction GISMENT qui stocke la valeur du gisement dans la variable "gis" ) (defun c:2POINTS () (setq p1 (getpoint"\n premier point ? ")) (setq x1 (car p1)) (setq y1 (cadr p1)) (setq p2 (getpoint"\n deuxième point ? ")) (setq x2 (car p2)) (setq y2 (cadr p2)) (command "polylign" p1 p2 "") ) (defun c:HYPO (x1 x2 y1 y2 ) (sqrt (+(*(- x1 x2) (- x1 x2)) (*(- y1 y2) (- y1 y2)))) ) (defun c:GISMENT () (* (* 2 atan) (/ (- x2 x1) (+(- y2 y1) Dab))) ) Ici j'aimerai utilisé les coordonnées x1 y1 x2 y2 de la premiere fonction dans la deuxième "HYPO", d'utiliser le résultat de la fonction "HYPO" et de la renvoyer en variable "Dab" dans la fonction principale de façon à finir le programme par le calcul du gisement (dernière fonction) en fait mon gros problème c'est que j'ai du mal à basculer mes résultats dans les variables de la fonction principale (cf "Dab" "gis" et j'aimerai aussi faire de même pr la première fonction) voilà je sais pas si je me fais bien comprendre mais si quelqu'un pourrai m'expliquer à l'aide d'exemples ça m'arrangerai. Merci beaucoup par avance !
-
calcul d'un point P2 à partir d'un point P1
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Parce que là je commence à me mélanger profondément dans les unités de mesures :/. Les angles exprimés sur autocad sont en radians c'est bien ça ? la formule permettant de calculer un gisement entre deux points est en grade et au final l'angle sortant doit être en radian c'est bien ça ? Désolé pour la question bête mais c'est que j'étais justement en train de créer une petite fonction permettant de convertir les degrés en grades et vice versa, du coup les degrés on en parle plus ? -
calcul d'un point P2 à partir d'un point P1
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Merci également à toi Bruno , il y a un truc que je comprends pas par contre c'est le "100" et le "200" j'imagine que tu as converti l'angle en grade directement en radian dans la formule c'est ça? -
calcul d'un point P2 à partir d'un point P1
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Merci beaucoup Vincent pour la formule ! :) -
calcul d'un point P2 à partir d'un point P1
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
est ce que cette formule est bonne car je ne trouve pas la même partout pour le calcul d'un gisement <_< (defun c:GISEMENT (pta ptb) (setq gis (atan (/ (abs;valeur absolue (- (car ptb) (car pta) ) ) (abs (- (cdr ptb) (cdr pta) ) ) ) ) ) ) Merci par avance ! -
calcul d'un point P2 à partir d'un point P1
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Formule trouvée, par contre élément essentiel que je n'ai pas c'est la formule permettant de calculer un gisement, merci par avance ! -
Bonjour à tous et toutes, je recherche la formule mathématique qui permet de trouver un point P2 à partir d'un point connu soit P1 à l'aide du gisement et d'une distance. Merci par avance :)
-
Projection d'un point sur une droite (perpendiculairement)
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Exactement, erreur d'étourderie... Merci de me l'avoir fait remarqué je vais corriger cela. Merci beaucoup -
Projection d'un point sur une droite (perpendiculairement)
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Et voici la formule que j'ai choisis : Let the point be C (Cx,Cy) and the line be AB (Ax,Ay) to (Bx,By). The length of the line segment AB is L: L= sqrt( (Bx-Ax)^2 + (By-Ay)^2 ) . Let P be the point of perpendicular projection of C onto AB. Let r be a parameter to indicate P's location along the line containing AB, with the following meaning: r=0 P = A r=1 P = B r<0 P is on the backward extension of AB r>1 P is on the forward extension of AB 0<r<1 P is interior to AB Compute r with this: (Ay-Cy)(Ay-By)-(Ax-Cx)(Bx-Ax) r = ----------------------------- L^2 The point P can then be found: Px = Ax + r(Bx-Ax) Py = Ay + r(By-Ay) And the distance from A to P = r*L. -
Projection d'un point sur une droite (perpendiculairement)
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
(defun c:PROJECTION () ;avec ;A= premier point de la droite ;B= deuxième point de la droite ;C= point à projeter sur la droite ;P= projeté orthonormal ;r= paramètre indiquant l'emplacement de P sur la droite ;L= module de la droite AB (setq A (getpoint"\n cliquez sur le premier point ")) (setq xa (car A)) (setq ya (cadr A)) (setq B (getpoint"\n cliquez sur le deuxième point")) (setq xb (car B)) (setq yb (cadr B)) (setq droite (command "polylign" A B "")) (setq C (getpoint"\n cliquez sur le premier candélabre ")) (setq xc (car C)) (setq yc (cadr C)) (setq L (sqrt (+(*(- xb xa) (- xb xa)) (*(- yb ya) (- yb ya))))) (setq r (/(-(*(- ya yc) (- ya yb)) (*(- xa xc) (- xb xa))) (* L L))) (setq PX (*(+ xa r) (- xb xa))); abscisse du projeté orthonormal (setq PY (*(+ ya r) (- yb ya))); ordonné du projeté orthonomal (setq P (list PX PY) ) ) Avec le code c'est mieux <_< -
Projection d'un point sur une droite (perpendiculairement)
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Merci pour les infos Giles, j'ai toujours pas compris cet argument "Onseg" du coup j'ai crée une fonction lisp de projection avec une formule mathématique que j'ai trouvé sur le net. Par contre j'ai un soucis quant au résultat du point "projeté orthonormal" . J'ai essayé ensuite de créer un point nodal sur ce point dans mon cas "P" ou bien d'insérer un bloc à ce point et il s'avère que ce fameux point "P" est pas du tout projeté sur la droite. Y a-t'il une erreur dans la formule? Merci d'avance :) et bonne soirée à tous ! -
Projection d'un point sur une droite (perpendiculairement)
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Bonjour à tous, Bryce j'ai fait un test avec la fonction vlax-curve-getClosestPointTo, la projection du point se fait bien, par contre lorsque je décide de changer le scu et de mettre en scu local sur la polylign pour tracer un segment perpendiculaire à ma droite, le point projeté, dans mon cas : "projectPoint" sort de ma droite. Est ce normal? Giles comme je l'ai dis dans le post n°6 avec cette méthode, mon point projeté vaut "nil" est ce normal? Merci par avance et bonne journée à vous. -
Projection d'un point sur une droite (perpendiculairement)
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Merci pour ton cours Gile, je le garderai sous la main ! -
Projection d'un point sur une droite (perpendiculairement)
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
(defun c:ESSAI () (setq A(getpoint"\n cliquez sur le premier point : ")) (setq B(getpoint"\n cliquez sur le deuxième point : ")) J'ai fait un test sur une droite de type polylign et en ajoutant des espions je me suis rendu compte que le point projeté soit "proj" valait "nil" est-ce normal? Comment puis je faire également pour voir à l'écran mes points ? j'ai déjà été dans "format" "style de points" et choisis des points plus lisibles mais rien y fait :/ (command "polylign" A B "") (setq P(getpoint"\n cliquez sur le premier point d'insertion du candélabre :")) (setq proj (inters A B P (polar P (+ (/ pi 2.0) (angle A B)) 1.0))); A ET B sont les deux points formant la droite // P le point à projeter // proj est le point le projeté ) Merci d'avance :) -
Projection d'un point sur une droite (perpendiculairement)
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Gile existe t-il l'aide au développement en Français car avec ma version d'autocad je l'ai uniquement en anglais Merci -
Projection d'un point sur une droite (perpendiculairement)
mateus a répondu à un(e) sujet de mateus dans LISP et Visual LISP
J'adore ce site ! Merci à vous pour les réponses :) -
Projection d'un point sur une droite (perpendiculairement)
mateus a posté un sujet dans LISP et Visual LISP
Bonjour à tous je recherche une formule sous lisp qui permettrait de projeter un point sur une droite perpendiculairement. Merci d'avance -
Merci beaucoup Gile !! ça marche nettement mieux :)
-
Bonjour à tous voilà j'ai un soucis pour récupérer les sommets d'une polyligne. Je m'explique ma polyligne est composée de deux sommets , j'arrive à récupérer le premier mais lorsque je mets un espion sur mon deuxième sommet "s2" ça me renvoit "nil". je vous mets ci-dessous mon bout de code : (defun c:ESSAI() (setq pt1 (getpoint"\n cliquer sur le premier point:")) (setq pt2 (getpoint"\n cliquer sur le 2eme point:")) (command "polylign" pt1 pt2 "") (setq poly1 (entlast)) (command "décaler" (getdist"\nvaleur de décalage du réseau") poly1 (getpoint "\nCliquer sur le côté du réseau") "") (setq nomEntité(cdar(entget(entlast)))) (setq s1(cdr (assoc 10(entget nomEntité)))) (setq s2(cdr (assoc 10(entget(entnext nomEntité))))) ) Merci par avance
-
Bonjour Gile Voilà j'ai aussi un problème de ce genre sur autocad MAP 3D 2013 c'est à dire que lorsque je fait plusieure fois des retour arrière une érreur mes affichier je comprend pas pourquoi, car avant je travaillais avec la version 2012 j'avais pas ce problème là et de plus j'aimerais souligner aussi un autre problème au niveaux de la sélection des mes objets, lorsque je déplace mon cuseur la sélection ce déactive merci
