JPhil
Membres-
Compteur de contenus
207 -
Inscription
-
Dernière visite
-
Jours gagnés
6
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par JPhil
-
Tu peux nous donner un avant et un après ? "06-04-RTE-PROJET-COORDONNEES_AAAAA-GGGGG" devient quoi ? "06-04-RTE-PROJET-COORDONNEES_AUTO-CAD" ? Est-ce que la partie "AAAAA-GGGGG" aura au final le même nom ou des noms différents ? T'as beaucoup de calques à gérer ou seulement ceux qu'on voit dans ton post ?
-
Le problème est sur un fichier en particulier ou sur tous les fichiers ? Sinon, redémarrer, mettre à jour Windows/AutoCAD ... [Edit] Ca peut aussi venir du profil utilisateur (dans AutoCAD).
-
Publication de plusieurs folios en PDF avec noms de signet automatique...
JPhil a répondu à un(e) sujet de JPhil dans Pour aller plus loin en LISP
Je viens de tomber sur un autre formatage bizarre du Mtext, en fait pour être plus précis il s'agit d'une police de texte forcée. Le Mtext est en Arial mais le contenu est en "Segoe UI". Pourquoi faire simple quand on peut faire compliqué 😆 Au passage j'ai aussi traité le "A1". Si ça peut aider certain(e)s. Donc il faut remplacer cette partie là : ;;; Remplacement des caractères (if (wcmatch folioinfo "*\\P*") (while (wcmatch folioinfo "*\\P*") (setq folioinfo (vl-string-subst " - " "\\P" folioinfo)) ) ) (if (wcmatch folioinfo "*/*") (while (wcmatch folioinfo "*/*") (setq folioinfo (vl-string-subst "-" "/" folioinfo)) ) ) par cette partie ci : ;;; Remplacement des caractères (if (wcmatch folioinfo "*\\P*") (while (wcmatch folioinfo "*\\P*") (setq folioinfo (vl-string-subst " - " "\\P" folioinfo)) ) ) (if (wcmatch folioinfo "*\\A1;*") (while (wcmatch folioinfo "*\\A1;*") (setq folioinfo (vl-string-subst " - " "\\A1;" folioinfo)) ) ) (if (and (wcmatch folioinfo "*\\f*") (wcmatch folioinfo "*;*")) (while (and (wcmatch folioinfo "*\\f*") (wcmatch folioinfo "*;*")) (setq folioinfo (vl-string-subst "" (substr folioinfo (+ 1 (vl-string-search "\\f" folioinfo)) (- (+ 1 (vl-string-search ";" folioinfo)) (vl-string-search "\\f" folioinfo))) folioinfo)) ) ) (if (wcmatch folioinfo "*{*") (while (wcmatch folioinfo "*{*") (setq folioinfo (vl-string-subst "" "{" folioinfo)) ) ) (if (wcmatch folioinfo "*}*") (while (wcmatch folioinfo "*}*") (setq folioinfo (vl-string-subst "" "}" folioinfo)) ) ) (if (wcmatch folioinfo "*/*") (while (wcmatch folioinfo "*/*") (setq folioinfo (vl-string-subst "-" "/" folioinfo)) ) ) Je pense que je vais attendre encore un peu avant d'effacer le fichier DSD 😁 -
@(gile), j'ai jamais dit que je ne l'utiliserai pas un jour, c'est juste que j'y pense jamais et que donc mon premier réflexe va sur le bloc-note. Trop habitué à son environnement, à ses qualités et défauts, peur du changement, très certainement, même si je reconnais très volontiers les nombreuses qualités d'un environnement IDE. Plus le temps passe, et plus je me rends compte que je n'ai pas la structure au niveau programmation : indiquer les versions avec commentaires en tête de lisp, déclarer les variables, utiliser des noms de variables plus "pro" (je pense à ma variable "toto" que j'utilise trop souvent), faire plus souvent des mini fonctions (je commence à y venir et c'est vrai que c'est jouissif) .... C'est l'inconvénient d'avoir appris sur le tas en faisant des programmes une fois tous les 36 du mois. Là j'ai plus progressé en à peine 2 ans que les 12 dernières années car l'activité s'y prête, ce qui n'était pas forcément le cas avant et pour ça merci aux membres du forum.
-
Merci @didier. Très intéressant ton sujet sur le VS Code, peut-être qu'un jour j'arrêterai mon bloc-notes basic pour enfin utiliser les outils mis à ma disposition. Au passage, ton site est TOP ;)
-
Déterminer si un bloc se trouve à gauche ou à droite d'une polyligne
JPhil a répondu à un(e) sujet de JPhil dans Pour aller plus loin en LISP
J'ai pas encore fait l'essai mais que se passe-t-il lorsqu'on duplique une polyligne ou bloc de signalisation qui possèdent une donnée étendue ? Ces nouveaux objets auront-ils ces données étendues ou au contraire vierges ? Dans le cas d'une polyligne ça peut être intéressant mais pas dans le cas d'un bloc de signalisation. Bref, à creuser en attendant que je fasse un schéma fonctionnel. Merci ;) -
Déterminer si un bloc se trouve à gauche ou à droite d'une polyligne
JPhil a répondu à un(e) sujet de JPhil dans Pour aller plus loin en LISP
@didier, Actuellement, il y a deux blocs qui visuellement sont les mêmes, juste le nom du bloc qui change et la rotation. Donc forcément dans certains coins, il y a le "mauvais" bloc et comme il y a des données qui sont liés avec une base de données externes, c'est difficile de faire un ménage rapide sans mettre le foutoir. Hors, un seul bloc aurait suffit en appliquant la rotation à l'endroit où il faut, avec une gestion de l'évolution plus souple. N'étant pas là au début de ce projet (pas loin de 10 ans), je vois des erreurs de choix qui fait que le besoin en interne a évolué mais pas le programme qui lui n'est plus assez souple pour encaisser tout ça. Donc oui, seulement un seul bloc, l'interroger afin qu'il nous donne sa position. J'ai conscience que sur le papier c'est super facile, mais à structurer c'est une autre paire de manche. Un joli challenge en fait. @Luna, Si je reprends ton exemple de donnée étendue. J'applique ceci sur une polyligne (dont je peux inverser le sens à tout moment parce que ça me fait plaisir) : ((lambda (key value / crv val) (setq crv (car (entsel "\nSelect polyline : "))) (if (null (setq val (vlax-ldata-get crv key))) (setq val (vlax-ldata-put crv key value)) val ) )) Avec 'key' dont la valeur serait "Nom", et 'value' dont la valeur serait "section 1 voie 1". J'applique la même procédure sur un bloc de signalisation : ((lambda (key / crvb value val) (setq crv (car (entsel "\nSelect bloc de signalisation : "))) (setq value (car (entsel "\nSelect polyline de liaison : "))) (if (null (setq val (vlax-ldata-get crv key))) (setq val (vlax-ldata-put crv key value)) val ) )) Avec 'key' dont la valeur serait "Chemin", et 'value' dont la valeur serait le nom de l'entité polyligne afin de permettre de créer une liaison. Donc si j'ai bien compris, même si je renomme "section 1 voie 1" en "truc mumuche", le bloc signalisation sera lié à la polyligne à la condition bien évidement de ne pas supprimer cette dernière. J'ai bon ? -
Déterminer si un bloc se trouve à gauche ou à droite d'une polyligne
JPhil a répondu à un(e) sujet de JPhil dans Pour aller plus loin en LISP
Merci @didier. En effet, je comprends totalement ta remarque qui est totalement légitime et plus simple, mais vu le plan source actuel je voulais éviter les mauvaises surprises, c'est le pourquoi j'avais en tête 2 attributs pour dire toi t'es au début et toi t'es à la fin. En plus j'ai des bouts de chemins à double sens de circulation mais généralement il y a un sens prioritaire. Bref, comme tu peux le voir il y a plusieurs solutions, reste à savoir quelle décision prendre pour être à la fois souple pour l'utilisateur, et souple pour une évolution future (nouveaux chemins...). Si je prends l'exemple de mon graphique, potentiellement tu peux avoir un chemin (ou liaison) entre le point (A) et (Z'), ça c'est plutôt simple, mais tu peux avoir un nouveau chemin (en plus de celui qui relie (A) et (Z')) qui part du point (C) se situant entre les points (A) et (Z') vers un nouveau point. Pour imager, c'est comme si tu devais redéfinir (structurer ?) le réseau routier afin d'avoir des feux de signalisation plus "intelligents" (d'où le mini-Revit). Il y a eu un travail de fait (plutôt excellent), mais l'outils est arrivé à limitation, d'où mon questionnement pour faire quelque chose d'encore plus fou (d'un point de vue dev) mais surtout plus souple (d'un point de vue utilisateur) et permettant par la suite d'être utilisé pour faire des études ou vérifications d'études. -
Déterminer si un bloc se trouve à gauche ou à droite d'une polyligne
JPhil a répondu à un(e) sujet de JPhil dans Pour aller plus loin en LISP
Merci @Curlygoth, à tester aussi. @Luna, chat à l'air intéressant, mais chat à l'air un poil complexe ton affaire 😅 Le plus dur avant de se lancer tête baissée, c'est de bien définir la structure, et là y'a du boulot car pour l'instant je n'ai seulement que 2/3 idées, je n'ai pas encore la vision globale du projet. En fait, le projet existe déjà, mais j'ai envie que l'utilisateur fasse moins de saisies manuelles, et qu'il y ait plus de nouvelles informations comme le sens d'orientation du bloc signalisation (actuellement y'a pas, mais ça deviendra un plus pour un autre programme qui est déjà en cours). -
Déterminer si un bloc se trouve à gauche ou à droite d'une polyligne
JPhil a répondu à un(e) sujet de JPhil dans Pour aller plus loin en LISP
Merci @Luna Pour répondre à la question d'un bloc à la place d'une polyligne classique, c'est que le bloc je peux lui donner un nom contrairement à une polyligne, du style "section 1 voie 1" ou "raccord n°XX" ou "truc mumuche" ... Donc en fait "il suffirait" de remplacer "Select polyline" par la sélection du bloc chemin qui irait automatiquement rechercher la polyligne qui s'y trouve. L'idée est donc de créer un lien entre le bloc de signalisation et le bloc chemin, afin de permettre au bloc de signalisation d'aller récupérer en mode champ automatique toutes les infos nécessaires dans le bloc chemin. Une sorte de mini-Revit 🤪 afin de limiter les saisies de l'utilisateur (qui sont longues et fastidieuses 😣). -
Pour un futur projet je me pose la question s'il est possible de savoir si un bloc est à gauche ou à droite d'une polyligne. Graphique: [B1]__ _______|______ / | \ / |__[B2] \_____ (A') (Z')__/ [B3]__ _______|______ / | \ / |__[B4] \_____ (Z) (A) __/ Chemin (à base de polyligne) dans un bloc avec attribut (A/Z ou Z'/A') pour le sens de circulation (il y a le sens de la polyligne mais en fait je veux pas en tenir compte). Les attributs (A/Z ou Z'/A') pour indiquer le "début" et la "fin" du chemin (saisie par l'utilisateur). Pour les blocs (B1 à B4), qui ne contiennent pas la barre verticale, je pense me focaliser sur la rotation du bloc par rapport à la polyligne pour ainsi savoir si le bloc [B1] est dans le sens normal (réponse oui) de circulation, avec d'autres champs automatiques comme le nom du bloc chemin ... L'idée est de demander à l'utilisateur de sélectionner [B1] puis de demander à quel bloc chemin il appartient (en l'occurence (A'/Z')). Je ne demande pas un programme tout fait, mais plutôt de savoir si ce que j'envisage est possible ou non. Merci. PS: En vue éclatée (car j'ai pas réussi à mettre de la couleur sur le graphique au-dessus) : Bloc Chemin (A') à (Z') ______________ / \ / \_____ (A') (Z')__/ Bloc Chemin (A) à (Z) ______________ / \ / \_____ (Z) (A) __/ Blocs de signalisation : [B1]__ __[B2] [B3]__ __[B4]
-
Le plus gros problème du télétravail c'est la connection internet. N'ayant pas la fibre mais l'ADSL, j'utilise principalement le téléphone en mode USB : Téléphone PRO sur Bouygues Pro, téléphone perso sur Red SFR (la roue de secours qui peut être pire que l'ADSL), tablette perso qui fait téléphone sur Sosh (quasi équivalent à Bouygues Pro) et l'ADSL chez OVH où je plafonne à 1,7Mo/s en Dl et 0,9Mo/s en Up. Je bascule en fonction du quota et de la stabilité de la connexion. Consommation data d'environ 6Go (Dl+Up) en moyenne par jour. J'suis dans un service de 80 personnes dans un département de 500 personnes intégré dans un grand groupe. En 2019, nous sommes tous passés de PC fixe à PC portable. Hp zbook 15" pour les projeteurs (2,7kg tout nu, ouch mon dos). 2 écrans (24" full hd) au boulot et 1 écran perso (même taille physique mais résolution plus élevée) à domicile. On a un VPN pour l'accès aux serveurs et licences. Même avec la fibre, ça "rame" chez mes collègues. On peut travailler hors internet pour certaines activités mais c'est plutôt rare car on a besoin d'un accès aux serveurs (style de tracé, imprimante, documents ...). On utilise Teams pour téléphoner, faire une réunion et partage d'écran (gros plus surtout à distance). Étant en télétravail exceptionnel, pas de prime, mais faut pas oublier qu'on a la chance d'avoir un boulot donc faut pas trop se plaindre pendant cette période comparé à d'autres personnes. En tant normal c'est 2 jours (possibilité jusqu'à 3 jours) de télétravail.
-
Trouver blocs non uniforme - exportlayout bloqué
JPhil a répondu à un(e) sujet de tbass dans AutoCAD 2020-2024
Il faudrait en effet faire le test sur ton fichier en détachant l'xref, et faire un autre test depuis l'xref. Si le problème est du côté de l'xref, (faire une copie de sauvegarde du fichier si pas déjà fait) faire un autre test en utilisant la commande "burst" (plusieurs fois s'il le faut) puis un "purger" intégral avant de relancer la commande exportlayout. La commande "burst" c'est comme la commande "décomposer" sauf que ça garde les calques et la valeur des attributs. Bref t'as pas grand chose à perdre sauf un peu de temps. -
Que veux tu savoir réellement ? Pour ma part en télétravail exceptionnel comme pour 2020/2021.
-
Bonne Année et que cette nouvelle année soit riche en partage.
-
Ça devient compliqué ton premier lisp. Est-ce un lisp pour la production (là vu le chemin pris je ne pense pas) ou pour le fun de voir ce qu'on peut faire avec du lisp (ça donne l'impression que c'est le chemin pris) ? Pour la couleur, pourquoi ne pas faire appel à la palette de couleur d'AutoCAD ? Encore une fois, il faut faire simple, mais surtout se mettre dans la peau d'un utilisateur lambda qui n'a pas envie d'avoir un menu avec 10000 choix. Si je prends le cas de ton lisp pour l'épaisseur de ligne, perso en tant qu'utilisateur lambda je ne l'utilise pas. En tant qu'utilisateur je m'attends à avoir la question "quelle épaisseur ?" (ou "quelle épaisseur [DuCalque] ?") avec une donnée que je rentre à la main ou "DuCalque" si je tape directement sur la touche "entrée" sans taper le mot "DuCalque". Pour la valeur donnée par l'utilisateur je m'adapte par rapport aux contraintes d'AutoCAD, mais ça reste transparent pour l'utilisateur.
-
Tu peux, mais à un moment donné il faudra bien sortir du programme, donc qu'as-tu prévu comme porte de sortie ? La touche "Echap", la combinaison "Ctrl+C" ou autre ?
-
Personnellement ça ne me dérange pas de relancer le programme pour une nouvelle épaisseur. Pour répondre à la dernier question, à quel moment (et comment) tu termines l'action ? A partir de là, tu vas te lancer dans une boucle complexe dont il faudra prévoir une porte de sortie. Comme déjà dit, il vaut mieux 3 petits programmes tout simple qui font une tâche plutôt qu'un seul qui imbrique tout avec potentiellement des problèmes.
-
Plutôt que d'essayer de faire un programme compliqué qui fait tout, essaye de faire un seul programme qui fait une seule tâche mais bien 😉 Un programme lisp est une succession de petit programme lisp. LA question qu'il faut se poser quand on veut tout intégrer dans un seul programme c'est : - les petits programmes sont indépendants des uns des autres - les petits programmes sont tous imbriqués dans un seul. Exemple d'imbrication avec une seule sélection de la ligne : (defun c:ECH_EP_LIGNE (/ echelle e) (initget 7) (setq echelle (getint "\nQuelle échelle : ")) (setq epaisseur (getint "\nQuelle épaisseur : ")) (while (and (setq e (car (entsel "\nSélectionner une ligne :"))) (wcmatch (cdr (assoc 0 (entget e))) "*LINE")) (vla-put-LineTypeScale (vlax-ename->vla-object e) echelle) (vla-put-lineweight (vlax-ename->vla-object e) epaisseur) ) (princ) )
-
Comme le souligne @Luna, il y a 3 types d'utilisateurs : - celui qui respecte les consignes, - celui qui fait une erreur de saisie (oups!), - celui qui tente de mettre n'importe quoi pour voir comment le programme réagit. Donc, si l'utilisateur final n'est pas toi, il faut y mettre un cadre (un point sur les i si tu préfères).N'hésite pas non plus à mettre des commentaires, ça peut être utile quand on revient sur un ancien programme et qu'on ne sait plus le pourquoi du comment : ;;; étape 1, je demande un nombre entier supérieur à 0 (setq echelle (getint "Quelle echelle :")) --> test pour voir si l'utilisateur a bien respecté la consigne, dans le cas contraire soit s'adapter soit reposer la question jusqu'à obtention du résultat souhaité ;;; fin étape 1 ;;; étape 2, je demande à l'utilisateur de sélectionner une ligne et pas autre chose (setq e (entsel "\nSelectionner une ligne")) --> test pour voir si l'utilisateur a bien sélectionné une ligne, si négatif, reposer la question jusqu'à obtention du résultat souhaité ;;; fin étape 2 ;;; étape 3, la suite du programme .... ;;; fin étape 3 ;;; étape 4, la suite de la suite du programme .... ;;; fin étape 4 Y'a des indices cachés dans mes commentaires, à toi de bien les déchiffrer 😉
-
As-tu testé dans AutoCAD directement cette partie (copier coller dans la barre de commande) : (setq echelle (getint "Quelle echelle :")) Quel est le résultat attendu ? Pour ma part, si c'est pour l'échelle de type de ligne d'un objet, tu peux faire le test et tu verras qu'AutoCAD accepte des valeurs non entières mais refuse des valeurs négatives. Pour résoudre le problème des valeurs négatives il faut utiliser "abs" : (setq echelle (abs (getint "Quelle echelle :"))) Pour que l'utilisateur puisse mettre des valeurs non entières il faut utiliser autre chose que "getint" à moins que ce soit un choix délibéré. As-tu testé cette partie : ( (setq e (entsel "\nSelectionner une ligne")) La parenthèse du début est de trop 😉. Essaye dans AutoCAD, et tu verras 😉. Il faut donc tester un à un chaque ligne directement dans AutoCAD quand on a un doute. C'est le réflexe Number 1!
-
Pour l'éditeur j'utilise le simple Bloc-notes de Windows. Avantage : super léger, rapide, simple sans fioriture Inconvénient : n'affiche pas les erreurs de syntaxe ou de parenthèse manquante ou en trop, donc de bonnes sueurs froides quand AutoCAD ne veux pas lancer le programme, mais ça permet d'être plus rigoureux (enfin, normalement😇) A conseiller ? pas forcément
-
A gauche, tu as une case "Utiliser les unités de l'espace papier pour une mise à l'échelle", est-elle cochée ou pas ? Il faut que la case soit cochée (ou décochée) partout : espace objet, espace papier et quand tu rentres dans chaque fenêtre de présentation. Pour infos, dans l'idéal, le facteur d'échelle global, l'échelle de l'objet courant, et l'échelle du type de ligne dans les propriétés de l'objet doivent être à 1 partout.
-
Création Type de ligne avec des triangles pour un losange
JPhil a répondu à un(e) sujet de Eli-110 dans AutoCAD 2020-2024
J'ai trouvé ceci qui se rapproche d'un losange : Police : Wingdings 2 Code de caractère : 0x3AF ou 0xAF ou 0xB8 C'est mieux ? -
@srault, tout est indiqué mais bon vu l'heure tardive du message je peux entendre que l'explication n'était pas claire. C'est le problème d'avoir plusieurs idées qui arrivent en même temps 🙂 @Luna, en effet avec un seul champ il n'est pas possible d'avoir le "+" au milieu, il faut donc décomposer le champ en deux. Insérer un premier champ "Formule" dans ton objet texte, attribut, cotation, ... : Valeur : trunc(740/(240-28)) Format : Fractionnaire (0 1/4) Insérer un deuxième champ "Formule" à la suite du premier champ : Valeur : 740/(240-28)-trunc(740/(240-28)) Format : Fractionnaire (0 1/4) Format supplémentaires : mettre "+" comme préfixe Donne le résultat suivant : "3+1/2" Par contre si tu mets "740/(240)-trunc(740/(240))" comme valeur, ça va donner au final "3+0" 😶
