Aller au contenu

Déméter_33

Membres
  • Compteur de contenus

    30
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Déméter_33

  1. Bon c'est ma faute @didier, j'ai effectué le test de votre bout de code sur un "TEXT" et non un "MTEXT". En faisant le test correctement, j'obtiens bien les flèches : Sauf que mon code insère les caractères AVANT de faire la conversion de "TEXT" à "MTEXT", il faut donc que je change le processus pour faire les choses dans l'ordre. J'ai pas le temps ce soir, mais je vais bouger mes lignes dès que possible pour retenter dans le bon ordre.
  2. Bien trouvé sur le fond, mais mon dessin a pas aimé : Par contre j'ai réussi à me faire ma routine "propre" dans laquelle j'ai juste à taper les caractères et qui fonctionne nickel du coup : (defun c:TextDp1b2Mtext () (vl-load-com) (setq TDPsel (vla-get-activedocument (vlax-get-acad-object))) ; Récupérer le document actif (vla-startundomark TDPsel) (setq sel (ssget "_X" '((0 . "TEXT") (8 . "Sectionnement_PlotsAnno")))) ; Filtre de sélection : Texte + Mtext uniquement du calque "Sectionnement_PlotsAnno" (progn (setq Pref (getstring T "\Entrer alt+17")) ;; Préfixe facultatif (setq Suff (getstring T "\Entrer alt+16")) ;; Suffixe facultatif (vlax-for ent (vla-get-activeselectionset TDPsel) ; Traiter chaque entité sélectionnée (vla-put-textstring ent (strcat Pref (vla-get-textstring ent) Suff))) (vla-delete (vla-get-activeselectionset TDPsel)) ; Supprimer la sélection après modification ) (vla-endundomark TDPsel) (setq TPsel (ssget "X" '((0 . "TEXT") (8 . "Sectionnement_PlotsAnno")))) ;Sélection de tous les textes du calque Sectionnement_PlotsAnno (setq Setlen (sslength TPsel) Count 0 ) ;setq le nombre d'entités dans Setlen, setq le compteur à 0 (repeat SetLen ;Boucle de répétition (Setlen) fois (setq Ntxt (ssname TPsel Count)) ;setq Ntxt comme étant la (Count)ième entité dans la selection Tsel (command "_txt2mtxt" Ntxt "") ;Transformation de l'entité de Ntxt de texte en mtext (setq jsF (ssadd (entlast)) NMtxt (entlast)) ;setq NMtext la dernière entité Mtext créée (setq dxf_ent (entget NMtxt)) ;Lis le code DXF de l'entité NMtext (entmod (append dxf_ent (list (cons 71 5) ;Justifier (cons 90 19) ;Encadrement (cons 8 "G-ANNOTATIONS") ;Calque (cons 40 0.15) ;Hauteur de texte (cons 45 1.2) ;Bordure (cons 441 0) ;Echelle (cons 41 1.4) ;Largeur ) ) ) (setq Count (+ 1 Count)) ;Ajoute 1 au compteur ) ;Fin de Repeat (princ) ) Fut juste taper les deux caractères... Mais pour le moment ça marche.
  3. Pourtant, j'utilisais avant un autre LISP mais qui correspondait moins bien à mes besoins et qui lui fonctionne très bien avec ces caractères : ; Ajouter un morceau de texte (prefix) (defun c:ptx(/ doc ent tx1 tx2 txt) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "TEXT,MTEXT"))) (setq tx1 (getstring "\nTexte à ajouter : ")) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (vla-put-textstring ent (strcat tx1 (vla-get-textstring ent))) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) Peut être faut-il que je pense mon code autrement en ajustant la commande de sélection de celui-ci ?
  4. Bonjour @didier, L'élément de base : L'élément une fois converti :
  5. J'y ai pensé (je suis allé sur la même page), mais la liste des 255 caractères ASCII ne comporte pas les deux caractères, seulement les caractères < et > qui ne sont pas assez visuellement explicites dans l'utilisation de nos plans... https://www.purebasic.com/french/documentation/reference/ascii.html Il s'agit d'Alt codes issus de la table de codage graphique de la page de code 850, en fait si je tape (setq A ►) j'ai nil comme réponse, donc je pense juste que ça ne devrai pas être possible... SAUF QUE quand j'utilise le code duquel je me suis inspiré ça fonctionne, donc mon problème doit être ailleurs... Je cherche encore.
  6. Essaye ça : ;Modification des apparences des Mtext - Background bylayer (defun c:bg () (setq MTsel (ssget "_X" '((0 . "MTEXT")))) ;Sélectionne uniquement les objets Mtext (setq Setlen (sslength MTsel) Count 0 ) ;setq "Setlen" au nombre d'objets dans "MTsel" et "count" à 0 (repeat SetLen ;Début de la boucle (setq Nmtxt (ssname MTsel Count)) ;setq "Ntxt" comme étant la (Count)ième entité dans la selection Tsel (setq jsF (ssadd (entlast)) NMtxt (entlast)) ;setq "NMtext" comme la dernière entité Mtext créée (setq dxf_ent (entget NMtxt)) ;Lis le code DXF de l'entité "Nmtext" (setq LayEnt (cdr (assoc 8 dxf_ent))) ;Trouve le calque de l'entité (setq ColMt (cdr (assoc 62 (entget (tblobjname "LAYER" LayEnt)))));Trouve la couleur du calque de l'entité (entmod ;lance la modification de l' objet (append dxf_ent ;ouvre la liste dxf de l'objet (list ;suivant la liste (cons 62 7) ;Couleur du texte sur noir (7) (cons 90 19) ;Encadrement et arrière plan (19) (cons 45 1.2) ;Bordure (1.2) (cons 63 ColMt) ;Couleur de l'arrière plan (variable) ) ;fin de la liste ) ;ferme la liste dxf de l'objet ) ;fin de entmod (setq Count (+ 1 Count)) ;Ajoute 1 au compteur ) ;Fin de Repeat (princ) ) Je fais lire la couleur du calque à chaque texte, et je l'applique en couleur du fond de chaque texte après avoir changé sa couleur en noir. Avoir la couleur "ducalque" n'existe pas dans cette fonctionnalité, aussi tu es forcé de choisir une couleur. La parade serait de lancer une routine comme celle ci-dessus à chaque fois que tu change des textes de calques, ce qui est automatisable sûrement mais là je ne sais pas faire.
  7. Bonjour, Dans une routine assez imposante de fusion d'un fichier natif dans un modèle pré-paramétré, je cherche à transformer l'apparence et la composition de certains "TEXT" en éléments "MTEXT" avec l'insertion de préfixes et suffixes composés de caractères unicodes , ◄ en préfixes et ► en suffixes. Pour cela, j'ai adapté un morceau de LISP (PTX-STX) trouvé sur ce même forum, mais dans lequel je n'arrive pas à paramétrer les caractères UNICODE, même en les entrants manuellement. (defun TextDp1b2Mtext (/ doc ent Pref Suff) (setq TDPsel (ssget "X" '((0 . "TEXT") (8 . "Sectionnement_PlotsAnno")))) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (setq Pref (getstring "\Entrer alt+17")) ;Définition du préfixe manuelle (setq Suff (getstring "\Entrer alt+16")) ;Définition du suffixe manuelle (while (< i (sslength TDPsel)) (setq ent (vlax-ename->vla-object (ssname TDPsel i))) (vla-put-textstring ent (strcat Pref (vla-get-textstring ent) Suff)) (setq i (1+ i)) ) (vla-endundomark doc) (setq Setlen (sslength TDPsel) Count 0 ) (repeat SetLen (setq Ntxt (ssname TDPsel Count)) (command "_txt2mtxt" Ntxt "") (setq jsF (ssadd (entlast)) NMtxt (entlast)) (setq dxf_ent (entget NMtxt)) (entmod (append dxf_ent (list (cons 90 19) ;Encadrement (cons 8 "G-ANNOTATIONS") ;Calque (cons 40 0.15) ;Hauteur de texte (cons 45 1.2) ;Bordure (cons 441 0) ;Echelle (cons 41 1.4) ;Largeur ) ) ) (setq Count (+ 1 Count)) ) (princ) ) Le résultat du code joint me donne bien l'apparence désirée mais n'insère pas les caractères demandés. Help me please.
  8. Salut, Je suis loin d'être un pro, mais utilise la valeur 19 pour ton code DXF 90, tu obtiendra un encadrement et un masque suivant la valeur d'arrière plan. J'ai comparé les valeurs DXF d'un même objet avec et sans ce qui m'a permis de sortir cette valeur, et chez moi ça marche... Si tu veux mettre une couleur, alors tente manuellement avec des couleurs vraies et compare l’évolution des données dans ton code DXF. M'en veuillez pas, mais je code sur notepad...
  9. Une fois mis un peu plus à l'épreuve, ça fonctionne impeccablement. Je n'ai plus eu qu'à modifier quelques fonctionnalités, comme la transformation auto de toutes les lignes en LWpoly, la désactivation du contrôle de précision de virgule, la définition du séparateur uniquement en ";" et la sélection automatique de toutes les entités du dessin. J'ai maintenant une routine 100% opé, où en un appel, j'extrait toutes les données nécessaires à une analyse statistique linéaire de toutes les entités d'un dessin. Merci @(gile)
  10. Bon du coup j'ai pas le temps de réfléchir que la solution toute faite me tombe dans les mains. Je l'ai testé vite fait sur un ensemble de 1857 éléments (avec le dos d'un godet de Komatsu 8000) et il s'en est très bien sorti après contrôle sur une poly ouverte. Je le mettrai un peu plus à l'épreuve Lundi mais si c'est bon ça va m’économiser des heures de travail sur plusieurs projets donc... MERCI.
  11. Bon du coup je me suis calmé sur le test, je n'ai sélectionné que 64 éléments. (L'objectif est de pouvoir extraire les infos de plusieurs milliers d'éléments en simultané) Sauf que j'ai toujours la même erreur: ; erreur: division par zéro (A moins que je ne voie pas le code modifié, il n'y a pas de notification "modifié" dans ton code précédent) En parallèle je suis en train de réfléchir à une autre solution mais je bute un peu... Une autre solution plausible serait de donner comme point "centroïde" des poly non fermées le point situé au centre de leur longueur totale. Mais je suis encore en train de chercher des bouts de code sur le net qui me permettront de le faire (Je sais que j'ai vu des lisp faire des choses s'en rapprochant à droite et à gauche en farfouillant).
  12. Salut @(gile), lors de l'exécution, je reçois le message d'erreur suivant: Commande: STATEXTRACT_GILE Sélectionner les polylignes optimisées. Sélectionnez des objets: Spécifiez le coin opposé: 750 trouvé(s) Sélectionnez des objets: _.ddunits Commande: Commande: Séparateur [Espace/Virgule/Point-virgule/Tabulation]? <Point-virgule>: P ; erreur: division par zéro Je t'avoue que j'ai exécuté sans regarder ce que tu as fait pour le moment, donc je n'ai pas cherché à comprendre ou tu apporte des modifs. Edit: Je viens de regarder, et si je comprends bien, tu as rajouté un ensemble de fonctions complémentaires, qui calculent un centroïde issu d'un calcul de plusieurs centroïdes de triangles formés avec des sections consécutives de la polyligne. Je sais pas si mes mots sont très adaptés...
  13. Bonjour, Je m'explique (le titre est peut être ambigu) : à la suite d'un sujet précédent, auquel j'avais obtenu une bonne solution, j'ai commencé à me servir du LISP joint. Je me suis rendu compte que au cours de l'exécution, certaines polylignes (ouvertes) sortaient sans informations des coordonnées de centroïdes. En cherchant d'où viens l'erreur, je me suis redu compte que les polylignes qui n'exportent pas d'informations sont celles qui une fois fermées s'intersectent elles mêmes (en gros un S se transforme en $). Je me demande donc si il y a un moyen de contourner ce problème. Le LISP et le fichier que je traite en exemples. Statextrat.lsp Export vers statistiques - Test 3.dwg
  14. Bonjour Bonuscad. Pour une simplification c'en est une belle. Je n'ai eu qu'à "réorganiser" les éléments dans le sens dans lequel je les voulais et HOP... le tour est joué. Il faut aussi que j'y ajoute une petite boucle qui me transforme toutes les lignes en polylignes, et que la sélection se fasse sur le dessin entier (ne pas passer par une sélection d'objets) Merci beaucoup en tout cas c'est parfait.
  15. Bonjour, Aidé d'un code trouvé sur ce même site, je tente de l'adapter à mon besoin. Le but de ce lisp est de fabriquer un fichier.csv contenant des informations de longueurs et de surface et de positionnement (centroïde) de polylignes fermées et non fermées dans un fichier, avec d'autres informations sur ces objets (calque, ID). Sauf que je rencontre un problème lors de la transformation d'un objet VLA en région VLA (je ne sais même pas trop si c'est bien comme ca que ca marche...) Le message d'erreur dans la console est le suivant: ; erreur: type d'argument incorrect: VLA-OBJECT nil Je m'en remet à vos suggestions. mult-info_po2CSV.lsp
  16. Alors je ne connaissais pas... Mais je me sent tout de même tellement C... Du coup même juste avec (if (wcmatch Ouv "*µ*") Ca fonctionne impeccable... Je ne savais pas que l'écriture en ANSI était préférable pour le LISP. Près tout, c'est le premier langage de programmation que j'apprends... Eh bien merci beaucoup @JPhil
  17. @JPhil, oui j'ai essayé aussi avec ta syntaxe mais pas de changement malheureusement. @bonuscad, j'ai aussi essayé avec ta technique, mais dès l'acquisition, j'obtiens ce message à la commande: Ceci me fait penser que AutoCAD ne gère juste possiblement pas les caractères spéciaux... De plus je navigue entre une version 2022 et une 2023, donc il peut aussi y avoir un problème de ce côté là, si vous ne trouvez pas d'utre solution je retenterai lundi vos solutions sur ma version 2022 (je suis sur la 2023 aujourd'hui). Joint ci-dessous, j'ai mis le morceau de LISP sur lequel je fait ces tests, c'est pas très orthodoxe, mais jusqu'à maintenant, j'ai réussi à monter une grosse partie de mon code principal en faisant des tests de fonctions petit à petit comme ca, du coup dans ce document il y a la fonction en test, ainsi que les boucles nécessaires pour son utilisation. Fonction de type 2.2 - Faïençage - 127.lsp
  18. Bonjour, J'essaye de faire reconnaitre à une de mes routines un caractère spécial, et ce à l'aide de la commande wcmatch. Le morceau de code est le suivant: (if (= A 127) ; Faïençage - Type 2.2 (progn (setq Cal "100-PATHO SECHE") ;Choix du calque - propre à la fonction (DIACAL) ;Il devient courant (DESPLINE) ;Dessin de la spline (command "-fhach" "s" Forme "" "p" "HOUND" "0.8" "10" "") ;Création de la hachure - propre à la fonction (command "_erase" Forme "") ;Efface la forme (setq Ouv (getstring "\nDonner l'ouverture du faïençage en mm :")) ;Acquisition de l'ouverture en mm (if (wcmatch Ouv "*µ*") ;Si l'ouverture est égale à µ (setq Leg (strcat "F:" Ouv)) ;Alors Leg = F:µ (setq Leg (strcat "F: " Ouv "mm")) ;Sinon Leg = F: Ouvmm ) ;Fin de if (POSETEXTE) ;Pose du texte (BOUCLE) ;Boucle ) (princ) ) Comme vous pourrez le remarquer, je demande à wcmatch de dire si la valeur rentrée lors du (getstring _) est µ, et ce afin d'adapter une légende qui sera posée plus loin dans une autre boucle. Si j'exécute bêtement à la ligne de texte dans AutoCAD (setq Ouv (getstring "\nDonner l'ouverture du faïençage en mm :")) En lui donnant la valeur µ , puis (if (wcmatch Ouv "*µ*") (setq Leg (strcat "F:" Ouv)) (setq Leg (strcat "F: " Ouv "mm")) ) Le résultat de la commande donne bien "F:µ". Mais lorsque j'exécute ma routine complètement, alors j'obtiens "F: µmm" (lorsque je "pose" le texte avec une commande (POSETEXTE) personalisée). Et lorsque je tente de contrôler ma valeur après l'exécution de la boucle, j'obtiens: Commande: (princ Leg) F: µmm"F: µmm" J'ai essayé avec plusieurs syntaxes dans wcmatch mais aucune ne s'est avérée efficace...: (wcmatch Ouv "µ") (wcmatch Ouv "*µ*") (wcmatch Ouv "*'µ*") (wcmatch Ouv "*\\µ*") J'hésite à changer de méthode, mais il est dur de trouver quand les autres valeurs qui seront rentrées se situeront entre 0,05 et 2 (avec une incrémentation tous les 0,1 à partir de 0,1). Si vous avez des pistes à me donner. Merci par avance.
  19. Merci beaucoup (gile), ta réponse vient compléter différemment celles précédentes, mais avec une approche à laquelle je ne pouvais en effet penser sans avoir compris que Du coup cette méthode: Bien que tout aussi efficace dans cette configuration m'emmène à penser à des moyens d'optimiser encore cette partie du code. Merci encore à vous trois VDH-Bruno , Luna et (gile) pour vos éclaircissements et solutions.
  20. Bonjour Luna, En effet, je comprend désormais sa réponse, ton explication est plus explicite aussi que le site da-code qui ne rentre pas vraiment dans le détail. Merci beaucoup j'en apprend tous les jours en ce moment...
  21. Bonjour VDH-Bruno, Tout à fait, cela convient impeccablement, j'ai galéré ailleurs dans le code pour ajouter d'autres éléments mais tout fonctionne à merveille maintenant. Merci beaucoup. Toutefois, cela ne dit pas pour quelle raison le bout de code suivant ne fonctionne pas: (initget "Oui Non") (setq rep1 (getkword "\nContinuer ? [Oui/Non] <Oui>: ")) Des idées là dessus? A des fins d'apprentissage surtout...
  22. En ne mettant que ces deux lignes de code, une fois fait ENTREE, le résultat de la console ci-dessous: Commande: Continuer ? [Oui/Non] <Oui>: Commande: Commande: (princ rep1) nilnil Du coup je n'ai pas d'idée...
  23. Bonjour, Comme le titre l'indique, dans la routine suivante, les valeurs par défaut des entrées utilisateur paramétrées à l'aide de GETWORD ne prennent pas en compte la valeur par défaut comprise entre les chevrons lorsqu'on appuie sur ENTREE: (defun FISSURE() (setq OS (getvar "OSMODE" )) ;Enregistre la variable définissant la combinaison d'acroche objets en cours (setq AU (getvar "autosnap")) ;enregistre la valeur de variable autosnap de l'utilisateur (command "accrobj" "proche") ;Définis l'acroche minimale pour le dessin (command "autosnap" "55") (initcommandversion 2) ;exécute la fonction suivante avec les options complètes (command "_spline") ;Lance le dessin de la fissure (while (= (getvar "cmdactive") 1) ;permet à l'utilisateur de tracer plusieurs points sans interrompre la routine (Command pause) ) (command "accrobj" "proche") ;définition de l'accroche objet pour placer la barette (setq D (getpoint "\n Donner la position: ")) ;acquisition de coordonnées d'un point de mise en place de bloc (command "-inserer" "bar" D "1" "") ;insertion du bloc "bar" aux coordonnées capturées précédement (while (= (getvar "cmdactive") 1) ;permet à l'utilisateur d'orienter le bloc sans interrompre la routine (Command pause) ) (Command "osmode" "0") ;désactive tous les accroche objet (if (= Ouv nil) (setq Ouv (getstring "\nDonner la valeur de l'Ouverture O:" "\_space" )) ) (initcommandversion 1) (setq STY "DIADES") (if (not (tblsearch "style" STY)) ;Vérifie l'existence du style Diadès, et le définit comme style de base (command "-style" "DIADES" "ARIAL" "2" "" "" "" "") (command "-style" "DIADES" "" "" "" "" "" "") ) (command "-texte" 0 0 (strcat "O:" Ouv "mm")) ; Renvoie O:Omm (ou le O central est le nombre) en texte (sans retours à la ligne) (setq js (ssadd (entlast)) ;définis le dernier jeu d'entités dans le groupe d'entités nommé js dernier (entlast) ) (command "_copyclip" dernier "") ;Copie le dernier jeu d'entités (command "_erase" dernier "") ;supprime le dernier jeu d'entités (command "_pasteclip") ;colle le dernier jeu d'entités (while (= (getvar "cmdactive") 1) ;permet a l'utilisateur de placer l'objet avant la continuation de la routine (Command pause) ) (initget "Oui Non") (setq rep1 (getkword "\nContinuer ? [Oui/Non] <Oui>: "));demande si la fonction doit être renouvelée, par défaut sur oui (if (= rep1 "Oui") ;si la réponse est oui, (progn (initget "Oui Non") (setq rep2 (getkword "\nConserver l'ouverture? [Oui/Non] <Oui>: ")) (if (= rep2 "Non") (setq Ouv nil) ) (FISSURE) ;la commande est renouvelée (princ) ) (progn ;sinon (command "osmode" OS) ;Réactive l'ancien mode d'acroche objets de l'utilisateur (command "AUTOSNAP" AU) ;réactive l'ancien ssnapmode de l'utilisateur (setq Ouv nil) (princ) ) ) (princ) ) ;Fin de la fonction de dessin du désordre Ci-dessous mon code complet, tout est fonctionnel si on utilise le clic de souris pour sélectionner les choix. Avez vous une idée de ce pourquoi cela ne fonctionne pas? (J'ai pourtant bien suivi les cours de da-code...) Merci d'avance.
  24. Re... une heure après, la solution est apparue comme par magie: dans la fonction (if ) de mon code, je comparais les coordonnées en X de mes deux points: (if (> (car PText)(car Coord_CG)) ;Problème présent à partir de là, le point P1 ne se calcule pasdans le 1/4 polaire supérieur droit ou inférieur droit suivant le signe > ou < respectivement (progn (setq P1 (list (+ (car Coord_CG) 1) (+ (cadr Coord_CG) 1))) ;Calcule le premier point de coordonnée pour la zone de sélection d'ajustement (Dans ce cas de figure (>) , le point P1 n'a pas l'air d'être calculé ici) (setq P2 (list (- (car Coord_CG) 1) (- (cadr Coord_CG) 1))) ;Calcule le second point de coordonnées pour la zone de sélection d'ajustement ) (progn (setq P1 (list (+ (car Coord_CG) 1) (- (cadr Coord_CG) 1))) ;Calcule le premier point de coordonnée pour la zone de sélection d'ajustement (setq P2 (list (- (car Coord_CG) 1) (+ (cadr Coord_CG) 1))) ;Calcule le second point de coordonnées pour la zone de sélection d'ajustement ) ) Alors que en fait il fallait comparer les coordonnées Y de ces mêmes points, la correction était donc: (if (< (cadr PText)(cadr Coord_CG)) (progn (setq P1 (list (+ (car Coord_CG) 1) (+ (cadr Coord_CG) 1))) (setq P2 (list (- (car Coord_CG) 1) (- (cadr Coord_CG) 1))) ) (progn (setq P1 (list (+ (car Coord_CG) 1) (- (cadr Coord_CG) 1))) (setq P2 (list (- (car Coord_CG) 1) (+ (cadr Coord_CG) 1))) ) ) Désormais la routine fonctionne parfaitement. Mais je vais revenir pour d'autres problèmes sur d'autres routines en cours de montage.
  25. Bonjour, Suite à un autre sujet sur lequel je n'avais pas reçu de réponse mais sur lequel j'ai trouvé la solution, je reviens pour un autre sujet sur une routine déjà bien ficelée (a mes yeux bien sur...). Pour expliquer rapidement, le but de cette routine est de dessiner un nuage de révision, puis de positionner un texte, et automatiquement, une ligne de repère va se former pour relier le texte au bord du nuage de révision, en direction de son centre de gravité. Actuellement, le LISP est opérationnel, toutefois sous certaines conditions: le texte peut être positionné dans les 3/4 polaires du côté inférieur gauches, mais lorsqu'on tente de le positionner dans le 1/4 polaire supérieur droit, la routine ne s'exécute plus comme prévu. Tout semble tourner autour du calcul de points de coordonnées pour un ajustement à l'intérieur d'une fonction (if ) (voir les commentaires du code ci-dessous). (defun c:ANNO(/ js1 nuage js2 regionN VlaNua VLACoord_CG Coord_CG PText js3 P1 P2 js4 barre vlabar pt-debut prec)(vl-load-com) (command "nuagerev" "L" 2 5 "S" "N") ;Lance la commande de création du nuage de révision (while (= (getvar "cmdactive") 1)(Command pause)) ;permet à l'utilisateur de tracer plusieurs points sans interrompre la routine (setq js1 (ssadd (entlast))nuage (entlast)) ;définis la variable js1 dans laquelle le jeu d'entité "nuage" contient la dernière entité créée (command "_copybase" "0" "0" nuage "") ;Copie le jeu d'entités "nuage" en base 0,0 (command "_pasteclip" "0" "0") ;Colle le jeu d'entité "nuage" copié en base 0,0 - Une copie du nuage de révision est créé (command "REGION" nuage "") ;transforme l'entité "nuage" en région (setq js2 (ssadd (entlast))regionN (entlast)) ;définis la variable js2 dans laquelle le jeu d'entité "regionN" contient la dernière entité créée (la région de nuage) (setq vlaNua (vlax-ename->vla-Object regionN)) ;transforme l'objet de "regionN" en objet VLA (setq VLACoord_CG (vla-get-centroid vlaNua)) ;extrait les informations des coordonnées de centroide de la sélection "VlaNua" (setq Coord_CG (vlax-safearray->list(vlax-variant-value VLACoord_CG))) ;inscrit les informations des coordonnées du centroides dans une variable de nom Coord_CG (setq PText (getpoint "\n Donner la position du texte")) ;acquisition des coordonnées du point de mise en place du texte (setq prec (getstring T "\n Entrer la précision")) ;demande à l'utilisateur le texte à rentrer dans la ligne de repère (command "_line" Coord_CG PText "") ;dessine la ligne qui servira de base de ligne de repère suivant les points Coord_CG et PText (setq js3 (ssadd (entlast))ligne (entlast)) ;définis la variable js3 dans laquelle le jeu d'entité "ligne" contient la dernière entité créée (if (> (car PText)(car Coord_CG)) ;Problème présent à partir de là, le point P1 ne se calcule pasdans le 1/4 polaire supérieur droit ou inférieur droit suivant le signe > ou < respectivement (progn (setq P1 (list (+ (car Coord_CG) 1) (+ (cadr Coord_CG) 1))) ;Calcule le premier point de coordonnée pour la zone de sélection d'ajustement (Dans ce cas de figure (>) , le point P1 n'a pas l'air d'être calculé ici) (setq P2 (list (- (car Coord_CG) 1) (- (cadr Coord_CG) 1))) ;Calcule le second point de coordonnées pour la zone de sélection d'ajustement ) (progn (setq P1 (list (+ (car Coord_CG) 1) (- (cadr Coord_CG) 1))) ;Calcule le premier point de coordonnée pour la zone de sélection d'ajustement (setq P2 (list (- (car Coord_CG) 1) (+ (cadr Coord_CG) 1))) ;Calcule le second point de coordonnées pour la zone de sélection d'ajustement ) ) (command "_trim" js2 js3 "" "C" P1 P2 "") ;Ajuste en sélectionnant les entités js2 et js3 contenant la region de nuage et la ligne, et sur la zone définie par les points P1 et P2 (problème ici) (setq js4 (ssadd (entlast))barre (entlast)) ;définis la variable js2 dans laquelle le jeu d'entité "barre" contient la dernière entité créée (La ligne ajustée) (setq vlabar (vlax-ename->vla-object barre)) ;transforme l'objet de "barre" en objet VLA (setq pt-debut (vlax-safearray->list (vlax-variant-value (vla-get-StartPoint vlabar)))) ;extrait les informations des coordonnées du point de début de "barre" dans la variable pt-début (command "_.mleader" pt-debut Ptext prec "") ;crée une ligne de repère avec pour coordonnée de départ "pt-debut" et coordonnee d'arrivee "ptext" (command "_erase" regionN barre "") ;supprime "regionN" et barre (princ) ) Après avoir vérifié et revérifié, ma logique semble bonne en l'état, peut être est ce que je me trompe? Merci d'avance.
×
×
  • 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é