Aller au contenu

mateus

Membres
  • Compteur de contenus

    261
  • Inscription

  • Dernière visite

  • Jours gagnés

    2

Tout ce qui a été posté par mateus

  1. Bonsoir à tous , voilà je suis toujours coincé pour récupérer mes entités (jonctions des candélabres au réseau d'éclairage) pour ce faire je viens de revoir tout mon pgn en terme de commentaires, essayé d'expliqué au mieux ce que j'ai essayé de faire dans ce dernier. Je joins ce lisp en espérant que quelqu'un pourra m'aider à récupérer le noms de toutes mes entités Ps: Je sais que mon programme est loin d'être parfait, je suis loin d'être au stade de la perfection , c'est un projet d'étude qui doit bientôt se terminer. Je souhaiter garder mon programme tel qu'il est et essayé de trouver des solutions aux problèmes que je rencontrerai jusqu'à la fin de ce programme sans toucher les fonctions ou commandes que j'ai fait avant. Merci de bien comprendre ma démarche. Bonne soirée à tous Amicalement Commandes_v0.1.1.LSP
  2. Au niveau des blocs j'ai un dossier ou je range 3 ou 4 blocs et j'aimerai pourquoi pas que l'utilisateur choisisse mais j'aimerai déjà régler mon problème de récupérations des entités ... Merci :)
  3. Voici le schéma
  4. Bonsoir Didier et merci pour ta réponse, en fait voilà je veux tracer mon réseau avec mes luminaires (blocs) espacés à une distance rentrée par l'utilisateur, ci-joint un imprim écran avec en haut ce que mon programme fait jusqu'à présent et en bas ce que je voudrais qu'il fasse. Je suis coincé pour récupérer les entités de mes droites qui composent le piquage des luminaires au réseau principal. une fois que je l'ai aurait récupérer je pourrai finaliser ce programme en ajustant avec raccord et effaçant les droites qui ne seront pas conservées. Merci bien en tout cas
  5. Bonjour tout le monde, voilà j'ai un problème pour récupérer toutes mes "droites1" sur le prolongement de mon réseau Au début mon programme implante tous les blocs d'assistance le long de la droite(voir image ci-jointe "ASSISTANCE" (le code concernant cette partie n'est pas joint). Ensuite le bout de code ci-dessous demande à l'utilisateur de quel côté veut t'il décaler ses candélabres. J'en suis à cette étape là. Je m'occupe pour l'instant au cas ou l'utilisateur répondra par "rouge" (donc décalage en haut de la droite). Je souhaiterai récupérer toutes mes "droites1" ( image ci-jointe : "droite1") et les mettre dans une variable pour garder en mémoire tous les noms d'entités de ces dernières. Je mets aussi l'image "Schéma" pour mieux se rendre compte. (defun DECAL_CANDE (/ rep n pt3) ;;rappel : rouge : en haut ;; Bleu : en bas ;;decalageCandelabre: distance de décalage ;; lst_pt : liste des points d'insertions des blocs et aussi des droites ;; orient : l'angle de rotation ;; pt3 les points perpendiculaires aux points d'insertions des droites (initget "Rouge Bleu") (setq rep (getkword "\n De quel côté voulez vous placer vos candélabres? [Rouge/Bleu] <Rouge> : " ) ) (if (or (eq rep "Rouge") (eq rep "R") (eq rep "")) (progn ;tracé du côté rouge (foreach n lst_pt (setq pt3 (polar n (+ orient (/ pi 2)) decalageCandelabre)) (command "polylign" n pt3 "") (setq lst_droite1 (list(entlast))) ; J'ESSAIE ICI DE RECUPERER LES ENTITES MAIS SEULEMENT LA DERNIERE DROITE IMPLANTEE EST ENREGISTREE ) ) (princ "Bleu" ; en attendant le reste du programme) ) (setq jsBlock (ssget "_A" (list '(0 . "INSERT") '(2 . "assistant")))) (command "_erase" jsBlock "") ) Merci par avance
  6. ah d'accord je comprends mieux maintenant je savais pas que ça s'appelait prédicat par contre merci pr l'info Gile !
  7. Bonjour à tous , J'aurai juste une question parce que je m'interroge sur la définition de prédicat j'ai regardé sur le net mais je ne comprends pas tellement la définition du terme. Est ce que quelqu'un pourrait m'expliquer grossièrement et simplement ce que c'est? Merci
  8. Merci beaucoup Gile même si j'ai encore du mal avec ces fonctions : mapcar/lambda j'ai compris l'essentiel ! Bonne soirée et merci encore pour l'explication
  9. Ok j'ai compris pourquoi le code DXF correspondant à la couleur n’apparaît pas. C'est parce qu'elle est par défaut au noir. J'aimerai quand même pouvoir changer la couleur ex: (defun c:essai () (setq pt1 (getpoint "\n premier point ")) (setq pt2 (getpoint "\n deuxième point ")) (command "polylign" pt1 pt2 "") (setq entCouleur (entget (entlast))) (subst '(62 . 2) '(62.1) entCouleur) ) Ci-dessus un essai pour changer la couleur de ma polyligne en jaune alors qu'elle était en rouge au départ. Je n'arrive pas à la remplacer avec "subst" Ensuite je souhaiterai pouvoir dire au pgn : changer la couleur de l'entité en jaune par exemple peut importe la couleur de l'entité ( si elle est en noir ou déjà en jaune ) Quelqu'un aurait-il une idée? Merci
  10. Merci Olivier ça marche l'incrémentation se fait bien maintenant. Je souhaiterai désormais changer de couleur des deux entités qui composent mon bloc (avant la création du block "assistant"). Je rentre dans l'entité et je m’aperçois qu'il n'y a pas le code "DXF 62" correspondant à la couleur alors je voudrais le rajouter et y mettre le code appartenant à une couleur. Comment faire? Merci (defun c:essai () (setq pt1 (getpoint"\n premier point ")) (setq pt2 (getpoint"\n deuxième point ")) (command "polylign" pt1 pt2 "") (setq entCouleur (entget(entlast))) ;là je pensais utilisr "cons" et y rajouter le code DXF 62 mais je bloque ) Merci
  11. Gile j'avais pas vu ta réponse du post 23 mais ça fait plaisir d'apprendre ce qu'est un modulo car grâce à toi je sais ce qu'il en ai après cette petite recherche. Bonne soirée !
  12. Bonjour Olivier et merci pour ta réponse je vais rectifier ça dès ce soir. Je me disais bien qu'il y avait une erreur par rapport au premier candélabre. Bonne journée :)
  13. Si quelqu'un pourrait me dire d'où vient le pb ? Merci
  14. Désolé j'ai oublié l'imprime écran
  15. Bonjour à tous, j'ai un soucis avec le bouclage des blocs. En fait ils s'incrément bien le long de la droite mais ils dépassent la droite. Je souhaiterai que les blocs s'incrément jusqu'à la fin de la droite. En pièce jointe l'imprime écran Et voici le code: (setq pt_start (list (car projectionCandelabre)(cadr projectionCandelabre))) ;premier luminaire (setq entraxeCandelabre(getdist pt_start"\n Indiquez l'entraxe des candélabres ") entraxeCandelabre(/ entraxeCandelabre (cos orient)) ) (cond ((> distDroite entraxeCandelabre) (setq lst_pt(list pt_start); première liste avec le premier luminaire increment_dist entraxeCandelabre ) (while (< increment_dist distDroite) (setq increment_dist (+ increment_dist entraxeCandelabre)) (setq pt (polar pt_start orient increment_dist)) (command "inserer" "assistant" pt 1 1 100 "") (setq lst_pt (cons pt lst_pt)) ) ) (T(princ"\nL'entraxe de vos candélabres est trop grande pour la droite !")) ) ) Avec pt_start : la première insertion entraxeCandelabre: la distance entre deux blocs disDroite: la distance totale Merci
  16. j'ai un soucis avec ma fenêtre d'espion qui ne s'affiche plus avec l'Autocad du boulot mais il me semble que mon code fonctionne comme ça : (defun CALCULPOINT (PX PY orient distDroite / pt pt_start increment_dist entraxeCandelabre ) (setq pt_start (list PX PY));premier luminaire (setq entraxeCandelabre (getdist pt_start "\n Indiquez l'entraxe des candélabres " ) entraxeCandelabre (/ entraxeCandelabre (cos orient)) increment_dist entraxeCandelabre lst_pt (list pt_start) ; première liste avec le premier luminaire ) (while (< increment_dist distDroite) (setq increment_dist (+ increment_dist entraxeCandelabre)) (setq pt (polar pt_start orient increment_dist)) (setq lst_pt (cons pt lst_pt)) ) ) Je vais vérifier ce soir avec mon pc. Bonne journée
  17. Bonjour Didier ! pas de problème j'accepte complètement les critiques, elles sont là pour me faire avancer , c'est comme ça que je le prend en tout cas. Et puis face à des gens comme vous qui ont l'habitude de programmer et qui ont de l'expérience, on ne peut qu'en tirer profit. Pour l'instant j'essaie de faire mon programme , qu'il fonctionne dans un premier temps et après je m'occuperai de l'optimiser et de le rendre plus simple si possible. J'ai également une question car j'ai du mal avec l'incrémentation et j'en ai besoin pour la partie que je traite. Je souhaite boucler le long de ma droite l'insertion des blocks mais je suis coincé : (defun CALCULPOINT (PX PY module orient distDroite / pt) (setq pt(list PX PY)) ;premier luminaire (setq lst_pt (list pt)); première liste avec le premier luminaire (while(< module distDroite) (setq pt(polar pt orient module)) (setq lst_pt(cons pt lst_pt) ) ) ) Avec pt la première insertion du bloc Ensuite je crée une liste avec ce premier point Je dis au programme tant que l'entraxe entre les deux points n'est pas plus grand que la distance de la droite alors : on redéfini le "pt" avec (polar) Et je redéfini la liste des points en ajoutant à chaque fois le dernier point jusqu'à ce que la boucle retourne nil Merci bien
  18. Je sais pas pourquoi je suis parti dans le calcul de tangente côté opposé et etc... j'ai simplifié mon code et avec la fonction polar ça marche très bien merci à toi Giles. par contre du coup je ne converti par mon angle avec l'angle courant d'autocad parce que j'utilise la fonction cos pour calculer mon module et comme la fonction cos demande un angle en radian. Cela n'empêche que ça fonctionne bien comme ça. (defun ORIENTATION (listeDecal / pta ptb) (setq pta (list (car ListeDecal) (cadr ListeDecal)) ptb (list (caddr ListeDecal) (cadddr ListeDecal)) ) (angle pta ptb) ;renvoit l'angle entre pta et ptb en radian ) ;________________________________________________________________________________________ MODULE________________________________________________________________________________________________ (defun HYPO (orient entraxeCandelabre) (/ entraxeCandelabre(cos orient)) ) ;________________________________________________________________________________________ CALCUL POINT________________________________________________________________________________________________ (defun CALCULPOINT (PX PY module orient / P Q) ;avec P : premierCandelabre ; Q : prochain point (setq P(list PX PY)) (setq Q (polar P orient module)) ) Merci beaucoup Giles maintenant il faut que je fasse une boucle sur l'abscisse. Je vais essayer ça. Bonne soirée à toi
  19. J'ai réussi Giles désolé de te faire perdre du temps j'étais perdu dans mes formules avec polar, ça marche bien et c'est plus simple ...
  20. Désolé si je ne me fait pas bien comprendre, j'essai simplement de faire fonctionner mon programme. J'ai essayé egalement de le faire avec (polar) mais mon deuxième point se retrouve au dessus du premier aussi :( (defun GISEMENT (ListeDecal / pta ptb) (setq pta(list(car ListeDecal)(cadr ListeDecal))) (setq ptb(list(caddr ListeDecal)(cadddr ListeDecal))) (atof (angtos (angle pta ptb) (getvar "AUNITS") 16)) ) ;________________________________________________________________________________________ CALCUL POINT________________________________________________________________________________________________ (defun CALCULPOINT (PX PY module gis / P Q) ;avec P : premierCandelabre ; Q : prochain point (setq P(list PX PY)) (setq Q (polar P gis module)) ) ci-joint le lisp avec polar boucle abscisse block_V3.LSP
  21. Néanmoins j'ai quand même essayé avec ta formule du gisement que tu m'as envoyé dans ton dernier post qui utilise la fonction "angle" "atof" "angtos". Je l'ai remplacé par ma fonction gisement et ensuite j'ai essayé avec la fonction calcul du POINT les points ne sont pas alignés il y a le deuxième point qui est au dessus du premier. Voilà j'aimerai juste que tu m'aides dans mon cas de figure. Merci :)
  22. Bonjour Gile , j'avais bien compris ces fonctions là. Je vais essayer de m'expliquer différemment parce que on ne s'est pas bien compris. J'essai de calculer et placer les luminaires sur une droite qui est en vérité mon réseau d'éclairage suivant l'entraxe désiré par l'utilisateur. Je suis encore dans la partie test de mon programme. Ma démarche a été la suivante (et j'aimerai pour l'instant rester dans cette démarche car je comprends bien mon programme) j'ai commencé par demander à l'utilisateur de tracer une droite en deux points (pta ptb) --> 1ère fonction Ensuite j'ai décalé cet alignement pour en avoir le réseau d'éclairage. J'ai demandé où est ce que l'utilisateur voulait placer son premier candélabre , j'en ai fait la projection. Je demande l'entraxe des candélabres et le décalage de ces derniers par rapport au réseau principal. je calcul l'angle entre mes deux points de droite (pta ptb) avec la commande (angle) justement que je laisse en radian Je crée la fonction tangente et la met en variable. je calcule le côté opposé de l'angle calculé juste avant. La fonction module qui est la distance entre le premier candélabre et mon prochain. Je calcul le gisement avec la formule mathématique que je laisse également en radian. Et pour finir je calcul le prochain candélabre à l'aide de la fonction "CALCULPOINT" j'utilise alors volontairement la formule du gisement car elle se base par rapport à l'axe des ordonné et que c'est cette formule qui m'est demandé pour la formule du calcul du point. Seulement il y a 4 cas de figures pour utiliser cette formule (document joint en post #15) c'est pour cela que je demandais de l'aide pour pouvoir récupérer le signe d'une variable pour pourvoir faire des conditions et donc, choisir la formule approprié au cas de figure. mon programme actuel fonctionne dans le cas ou le deltaX et deltaY sont compris entre 0 et 100 grades. Il me reste 3 autres cas à traiter. Si tu pouvois m'aider sur ce cas de figure Gile, je t'en serai reconnaissant. Bonne soirée Ps: ci-joint : mon lisp actuel boucle abscisse block_V3.LSP
  23. je pense avoir trouvé mais il faudrai que je puisse récupérer le signe d'une variable je pensais a faire comme cela : (defun CALCULPOINT (ListeDecal PX PY module gis / xa ya xb yb deltaX deltaY QX QY) ;;avec ;;PX : abscisse du premier luminaire ;;PY : ordonné du premier luminaire ;;module: distance entre les deux points ;;gis: gisement AB les deux points de la droite ;;xa: abscisse du pta ;;ya: ordonnée du pta ;;xb: abscisse du ptb ;;yb: ordonnée du ptb ;;QX abscisse du prochain point recherché ;;QY ordonné du prochain point recherché (setq xa (car ListeDecal) ya (cadr ListeDecal) xb (caddr ListeDecal) yb (cadddr ListeDecal) ) ;je récupère ici les coordonnées des deux points de la droite (setq deltaX(- xb xa) deltaY(- yb ya) ) ;calcul des delta x et y ;ici je souhaiterai dire : si deltaX et deltaY sont positifs alors --> formule 1 si deltaX est positif et deltaY et négatif alors --> formule2 si deltaX et deltaY sont négatifs alors --> formule3 sinon si deltaX est négatif et deltaY est positif alors --> formule4 ;;formule1 (setq QX (+ PX (* module (sin gis)))) (setq QY (+ PY (* module (cos gis)))) (list QX QY) )
  24. Bonjour à tous , Je suis sérieusement bloqué pour le calcul du point sur ma droite. J'ai rentré dans mon lisp la formule du "gisement" et du "calcul du point" mais après coup je me suis rendu compte qu'il y avait plusieurs cas possible pour le "calcul du point" soit 4 cas (voir "formule d'obtention d'un point P2 à partir d'un point P1". En effet mon programme fonctionne dans une seule condition: il faut que ma droite soit compris dans les x et y positifs. Concrètement, j'aimerai dire à mon programme : si ta droite est comprise dans les x et y positifs -->valeurs de "cos" et "sin" sont positives si ta droite est comprise dans les x positifs et les y négatifs --> valeur de cos positive et valeur de sin négative si ta droite est comprise dans les x négatifs et les y négatifs --> valeur de cos et sin négatives et enfin si ta droite est comprise dans les x négatifs et y positifs --> valeur de cos négatif et valeur de sin positive Voici mon code de gisement et calcul du point actuel : ;________________________________________________________________________________________ GISEMENT________________________________________________________________________________________________ (defun GISEMENT (xa ya xb yb) ; avec: xa et ya coordonnées du point A de la droite // xb et yb sont les coordonnées du point B de la droite (atan (/ (abs ;valeur absolue (- xb xa) ) (abs (- yb ya) ) ) ) ) ;________________________________________________________________________________________CALCULPOINT________________________________________________________________________________________________ (defun CALCULPOINT (PX PY module gis / QX QY) ;;avec ;;PX : abscisse du premier luminaire ;;PY : ordonnée du premier luminaire ;;module: distance entre les deux points ;;gis: gisement AB ;;QX abscisse du prochain point recherché ;;QY ordonné du prochain point recherché (setq QX (+ PX (* module (sin gis)))) (setq QY (+ PY (* module (cos gis)))) (list QX QY) ) Merci par avance
  25. Bon j'ai réussi mais bizarrement j'ai pas compris pk ça fonctionne comme cela. (defun ORIENTATION (listeDecal / angl) (setq pta (list (car ListeDecal) (cadr ListeDecal)) ptb (list (caddr ListeDecal) (cadddr ListeDecal)) ) (angle pta ptb) ) (defun radianDegre (angl); argument qui est égal à orient (l'angle en radian entre les deux points de la droite) (* (/ angl pi) 180.0)); conversion de l'angle en radian en degré ) En fait j'ai juste récupéré les deux points de ma droite, utilisé la commande "angle" entre ces deux derniers. et j'ai convertit l'angle retourné en radian en degré avec la fonction ci-dessus. Pour moi je pensais qu'il fallait rajouter 90 degrés à l'angle entre ces deux points, mais la conversion des radians en degrés à suffit pour obtenir une insertion perpendiculaire du block. Si quelqu'un peut m'expliquer je veux bien :) Bonne soirée !
×
×
  • 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é