Aleck_Ultimate Posté(e) le 14 avril 2017 Posté(e) le 14 avril 2017 Bonjour à tous. Pour les besoins de mon code j'extraie les coordonnées x et y et je les bricoles avant de les recoller. Le truc, c'est que au niveau du recollage rien n'y fait, je n'arrive pas a faire ça correctement, et je n'arrive pas à savoir ce qui pourrait ne pas aller dans la suite du code. Mon bute est de créer un rectangle avec des hachures le faisant ressembler à une gaine de ventilation en aluminium torsadé, mais pour que les hachures gardent leur orientation par rapport à la gaine je crée le rectangle à l'horizontale, je lui met les hachures et je le fait pivoter avec ALIGNER. Voila le pourquoi du comment de mon application de Pythagore. Est-ce que vous pourriez m'indiquer mon (ou probablement mes) erreurs et le moyen de les corriger moi-même s'il vous plais ? Ce code c'est mon bébé et je préférerait éviter de passer par une césarienne J'ais bourré les annotation pour m'y retrouver et je n'ais pas fait de copié-collé, donc tout ce que j'ais écrit je l'ais compris... sauf qu'en l’absence de résultat ça doit être de travers pour un paquet de trucs... Merci de votre attention. (Defun c:alkrectanglehachure (/ point1 point2 dn ;; Entrées utilisateur x1 y1 x2 y2 x2b ;; Coordonnées des points rect1 rect2 ;; Points du rectangle rect ;; Jeu de sélection align1 align2 align3 ;; Points de l'alignement ) ;;; Entrées utilisateur (setq point1 (getpoint "\nEntrez le premier point") point2 (getpoint "\nEntrez le second point") dn (getreal "\nSpécifiez le diamétre")) ;;; Extraction des coordonnées des points 1 et 2 et calcule de 2b (setq x1 (car point1) y1 (cadr point1) x2 (car point2) y2 (cadr point2) ) (setq x2b (+ x1 (expt (+ (expt (- x1 x2) 2) (expt (- y1 y2) 2) ) ;; Fin de + 0.5 ) ;; Fin de expt ) ;; Fin de + ) ;; Fin de setq ;;; Calcule des deux points du rectangle tel que le milieux ;;; des côtés opposés de longeur dn soit égale à y1 (setq rect1 (list (x1 (+ y1 (/ dn 2.)))) rect2 (list (x2b (- y1 (/ dn 2.)))) ) ;;; Commande RECTANG (command-s "rectang" "_none" rect1 "_none" rect2) ;;; Creation du jeu de sélection du rectangle (ssadd (entlast (rect))) ;;; Commande HACHURES (command-s "-hachures" "Propriétés" "JIS_LC_8A" "40" "15" ;; type ; échelle ; angle "Sélectionner les objets" rect " ") ;;; Ajout des hachures au jeu de sélection (ssadd (entlast (rect))) ;;; Calcule de point pour la commande ALIGNER (setq align1 (list (x1 y1)) align2 (list (x2b y1)) align3 (list (x2 y2)) ) ;;; Commande ALIGNER (command-s "aligner" rect " " "_none" align1 "_none" align1 "_none" align2 "_none" align3 " " "non") (princ) );; Fin de defun Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux. Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage ! Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;]) Utilisateur d'AutoCAD 2021 sous Windows 10
bonuscad Posté(e) le 14 avril 2017 Posté(e) le 14 avril 2017 Bonjour, Tes liste sont mal construite:(setq rect1 (list (x1 (+ y1 (/ dn 2.)))) rect2 (list (x2b (- y1 (/ dn 2.)))) )devrait être:(setq rect1 (list x1 (+ y1 (/ dn 2.))) rect2 (list x2b (- y1 (/ dn 2.))) )ainsi que(setq align1 (list (x1 y1)) align2 (list (x2b y1)) align3 (list (x2 y2)) )qui devrait être:(setq align1 (list x1 y1) align2 (list x2b y1) align3 (list x2 y2) ) Ton jeu de sélection est aussi mal construit: ;;; Creation du jeu de sélection du rectangle(ssadd (entlast (rect)))est plutôt:(setq rect (ssadd (entlast))) et plus loin(ssadd (entlast (rect)))devrait être:(setq rect (ssadd (entlast) rect)) Autre remarque, EVITE les validations dans commande avec un espace entre guillemets par exemple(command-s "-hachures" "Propriétés" "JIS_LC_8A" "40" "15" ;; type ; échelle ; angle "Sélectionner les objets" rect " ") sera mieux comme ceci:(command-s "_.-hatch" "_Properties" "JIS_LC_8A" "40" "15" ;; type ; échelle ; angle "_Select" rect "" "") Et enfin et je ne sais pas pourquoi!, mais chez moi:(command-s "aligner" rect " " "_none" align1 "_none" align1 "_none" align2 "_none" align3 " " "non")me fait des violations et plante autocadcelle-ci passe bien(command "_.align" rect "" "_none" align1 "_none" align1 "_none" align2 "_none" align3 "" "_no") Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
didier Posté(e) le 14 avril 2017 Posté(e) le 14 avril 2017 Coucou Une autre piste de recherche, sans en faire un bébé éprouvette: Si j'ai bien compris tu souhaites que tes hachures aient un certain angle par rapport au grand côté de ton rectangledonc il te faudrait créer un SCU aligné sur cette base et enfin créer tes hachuresTu n'as pas copié-collé et je t'en félicite c'est la meilleure façon de grandir, donc je ne te donne pas de code mais reviendrai t'aider à la demande. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Aleck_Ultimate Posté(e) le 14 avril 2017 Auteur Posté(e) le 14 avril 2017 Merci de votre aide.bonuscad : Bon, ça me rassure, apparemment je n'ais pas fait d’erreur de méthode mais seulement de syntaxe (dans toutes les matières y'a un truc qu'on comprend moins bien que le reste, et bah pour moi en LISP c'est ça), et apparemment il y en a beaucoup moins que ce que je craignais. Bon, pour le passage à l'anglais par contre, je vais d’abord attendre de bien gérer en français. Didier : Merci pour l'astuce. Pour les hachures comme pour le rectangle ce sera surement plus simple de passer par un autre SCU qu'un hypoténuse plus une rotation. Ça me fera de l'entrainement de faire une deuxième version de mon code. Je vais reprendre tout ça et je vous recontacte Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux. Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage ! Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;]) Utilisateur d'AutoCAD 2021 sous Windows 10
Aleck_Ultimate Posté(e) le 15 mai 2017 Auteur Posté(e) le 15 mai 2017 Re-bonjour. Comme je papillonne beaucoup dans mon travail je viens seulement de me remettre sérieusement au LISP, et après quelques corrections et l'ajout de getvar/setvar je n'ais plus qu'un seul problème : la commande HACHURE me refuse ma variable "rect" comme jeu de sélection, alors que ALIGNER me l'accepte. Mon rectangle pivote mais le hachurage ne se fait pas Comme je ne vois pas de raison logique à ça et qu'essayer de contourner le problème ne mène à rien pour le novice que je suis, je m'en remet à vous. (Defun c:alkrectanglehachure (/osm osmdef asso assodef;; Valeures globales et locales des variables système point1 point2 dn ;; Entrées utilisateur x1 y1 x2 y2 x2b ;; Coordonnées des points rect1 rect2 ;; Points du rectangle rect ;; Jeu de sélection align1 align2 align3 ;; Points de l'alignement ) ;;; Mémorisation et localisation des variables systèmes (setq osm (getvar "OSMODE") osmdef 0) (setvar "OSMODE" osmdef) (setq asso (getvar "HPASSOC") assodef 1) (setvar "HPASSOC" assodef) ;;; Entrées utilisateur (setvar "OSMODE" 15359) (setq point1 (getpoint "\nEntrez le premier point") point2 (getpoint "\nEntrez le second point") dn (getreal "\nSpécifiez le diamétre")) (setvar "OSMODE" osmdef) ;;; Extraction des coordonnées des points 1 et 2 et calcule de x2b (setq x1 (car point1) y1 (cadr point1) x2 (car point2) y2 (cadr point2) ) (setq x2b (+ x1 (expt (+ (expt (- x1 x2) 2) (expt (- y1 y2) 2) ) ;; Fin de + 0.5 ) ;; Fin de expt ) ;; Fin de + ) ;; Fin de setq ;;; Calcule des deux points du rectangle tel que le milieux ;;; des côtés opposés de longeur dn soit égale à y1 (setq rect1 (list x1 (+ y1 (/ dn 2.))) rect2 (list x2b (- y1 (/ dn 2.))) ) ;;; Commande RECTANG (command-s "rectang" rect1 rect2) ;;; Creation du jeu de sélection du rectangle (setq rect (ssadd (entlast))) ;;; Commande HACHURES (command-s "-hachures" "Propriétés" "JIS_LC_8A" "40" "15" ;; type ; échelle ; angle "Sélectionner les objets" rect "") ;;; Ajout des hachures au jeu de sélection (setq rect (ssadd (entlast) rect)) ;;; Calcule de point pour la commande ALIGNER (setq align1 (list x1 y1) align2 (list x2b y1) align3 (list x2 y2) ) ;;; Commande ALIGNER (command-s "aligner" rect "" align1 align1 align2 align3 "" "non") ;;; Remise en état des variables systèmes (setvar "OSMODE" osm) (setvar "HPASSOC" asso) (princ) );; Fin de defun Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux. Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage ! Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;]) Utilisateur d'AutoCAD 2021 sous Windows 10
didier Posté(e) le 16 mai 2017 Posté(e) le 16 mai 2017 Coucou (setq rect (entlast)) (command "_-bhatch" "p" "ansi31" "0.1" "15" "s" rect "" "") Si tu fais un jeu de sélection il faut pour retrouver l'entité la rechercher par ssname et sa position dans le jeuPuisque tu n'as qu'une entité pas la peine de faire un ssget Tiens-nous au courant. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Aleck_Ultimate Posté(e) le 23 mai 2017 Auteur Posté(e) le 23 mai 2017 Re-bonjour. J'ais enfin réussit à faire quelque-chose de valable. Au niveau des problèmes : - ce qui faisait buger mes hachures, c’était "sélectionner les objets". Deux espace, donc deux validations, donc erreur. - comme je n'arrivait pas à utiliser les deux entités de mon jeu de sélection, j'en ais fait un second pour les hachures. J'ais encore des projets pour ce code, mais voilà la première version viable, allégée de mes annotations. ;;; ;;; Rectangle hachuré ;;; De Aleck Ultimate ;;; Vertion 1.0 ;;; (Defun c:alkrectanglehachure (/ osm osmdef asso assodef;; Valeures globales et locales des variables système point1 point2 dn ;; Entrées utilisateur x1 y1 x2 y2 x2b ;; Coordonnées des points rect1 rect2 ;; Points du rectangle rect hach ;; Jeux de sélections align1 align2 align3 ;; Points de l'alignement ) (setq osm (getvar "OSMODE") osmdef 0) (setvar "OSMODE" osmdef) (setq asso (getvar "HPASSOC") assodef 1) (setvar "HPASSOC" assodef) (setvar "OSMODE" 15359) (setq point1 (getpoint "\nEntrez le premier point") point2 (getpoint "\nEntrez le second point") dn (getreal "\nSpécifiez le diamétre")) (setvar "OSMODE" osmdef) (setq x1 (car point1) y1 (cadr point1) x2 (car point2) y2 (cadr point2) ) (setq x2b (+ x1 (expt (+ (expt (- x1 x2) 2) (expt (- y1 y2) 2) ) ;; Fin de + 0.5 ) ;; Fin de expt ) ;; Fin de + ) ;; Fin de setq (setq rect1 (list x1 (+ y1 (/ dn 2.))) rect2 (list x2b (- y1 (/ dn 2.))) ) (command-s ".rectang" rect1 rect2) (setq rect (entlast)) (command-s "-hachures" "Propriétés" "JIS_LC_8A" "40" "15" ;; type ; échelle ; angle "Sélectionner" rect "" "") (setq hach (entlast)) (setq align1 (list x1 y1) align2 (list x2b y1) align3 (list x2 y2) ) (command-s "aligner" rect hach "" align1 align1 align2 align3 "" "non") (setvar "OSMODE" osm) (setvar "HPASSOC" asso) (princ) );; Fin de defun Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux. Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage ! Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;]) Utilisateur d'AutoCAD 2021 sous Windows 10
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant