Aller au contenu

Classement

Contenu populaire

Affichage du contenu avec la meilleure réputation depuis le 23/05/2025 dans toutes les zones

  1. Pour info, lettre recommandée envoyée: J’ai été informé de la procédure de liquidation judiciaire en cours concernant la société Cimax, éditeur de magazines spécialisés en CAO à Versailles. Je me permets de vous solliciter afin de savoir s'il serait possible d'engager une procédure de sauvegarde pour l'un des sites web appartenant à cette société, accessible à l'adresse suivante : https://cadxp.com. Pour information, j'ai créé ce nom de domaine et ce site web en novembre 2002. En 2008, j'ai cédé le nom de domaine, le site ainsi que la base de données associée à la société Cimax. Je ne suis donc plus propriétaire de ce site depuis cette date. Cependant, en tant que fondateur historique et animateur de la communauté, je reste fortement impliqué dans cet espace. Les membres fondateurs, qui ont contribué à cette vaste base de données, m'ont chargé de vous demander d’envisager toutes les mesures possibles pour sauvegarder ce site, notamment ses contenus, fichiers et surtout sa base de données. En effet, ce site constitue le principal point de rencontre pour la communauté des utilisateurs de logiciels de CAO en France (utilisation professionnelle), et il est crucial que ses contenus et ses données ne soient pas définitivement perdus, compte tenu de plus de 20 années de travail. Je vous remercie par avance pour votre attention et votre engagement à préserver cet outil essentiel pour la communauté.
    5 points
  2. Je veux bien me charger de faire un courrier au liquidateur judiciaire pour demander une sauvegarde des données du site. Si vous êtes ok avec ça dites le moi, je le ferais dans les heures qui viennent ou demain au plus tard?
    4 points
  3. Salut, pour faire plaisir à Didier on va rajouter de l'humain. - la V9 a été remplacée par la V10 en juin 2020, remplacée en octobre-novembre 2022 par la V11, en juin-juillet 2024 par la V12 et en mai 2025 par la 2026 - en vrac et non exhaustif : * pas de métré par calques * pas de copie de surfaces projet d'une phase vers une autre, avec si besoin la découpe automatique des copies pour un "emboitement" parfait * pas d'attachement ou l'importation des ifc * pas de gestion attributaire, les listes d'attributs * pas les nouveaux modules pour les réseaux électriques, éclairage, eau * avoir choix entre les barres d'outils ou les rubans * pas d'insertion des points TN et des images aériennes depuis la banque de données IGN * pas d'amélioration du rend3D (gestionnaires des vues, zone de plantation, choix d'afficher tel ou tel réseau, les ifc, ...) * pas le multi-fenêtrage (pratique lorsque l'on a plusieurs écrans sur son bureau) * pas d'amélioration des exports Dxf/Dwg et de la fonctionnalité Attacher Dxf/Dwg * pas de simplification de la création des points de sondages TN * pas d'amélioration de l'interface de présentation des résultats de comparaison de surfaces. * ... Enfin le dernier inconvénient et non des moindres, comme pour tout logiciel "Objet", pas de possibilités d'enregistrer dans les versions antérieures ce qui est très problématique pour les échanges entre partenaires d'un projet, sauf à demander la décomposition et l'envoi de la partie Dessin et de chaque élément des modules métier pour tout reconstruire sur la V9 (faut avoir du temps à perdre). Si vous utilisez le module Métré il est toujours disponible mais aucune amélioration, il vaut donc mieux éviter d'en parler. Bonne chance.
    3 points
  4. Bonjour Déjà que faire appel à l'IA peut se montrer discutable, répondre à quelqu'un qui pose une question à un humain par une proposition de réponse de robot frise l'ineptie, pour rester dans l'euphémisme ! Je suis désenchanté de ce genre de déviation énergivore et morbide.
    3 points
  5. Bonjour @Carpo La solution est très simple, car une Commande Covadis est dédiée. Ce qui est nécessaire est d'avoir le MNT de la zone, je ne sais pas si dans votre dénomination de "plan de masse" vous sous-entendez posséder un MNT. Si c'est le cas, on vous demandera un MNT, une altitude souhaitée, et une polyligne se dessinera, c'est une courbe de niveau à l'altitude donnée. Amicalement
    2 points
  6. Bonjour, Même si dans la plupart des cas AutoCAD n'utilise qu'un coeur de processeur, avec l'évolution des versions, de plus en plus de fonctionnalités utilisent plusieurs coeurs. https://www.autodesk.com/fr/support/technical/article/caas/sfdcarticles/sfdcarticles/FRA/Support-for-multi-core-processors-with-AutoCAD.html Personnellement, je ne pense pas que 20 coeurs soient utiles, mais aujourd'hui, les processeurs modernes augmente sans cesse le nombre, donc s'il y en a 20, on prends quand même. 😉 Concernant le problème de l'affichage conceptuel, il faut savoir que depuis quelques années, Autodesk travaille sur un nouveau moteur d'affichage 3D dans AutoCAD. Ce nouveau moteur d'affichage est présent et fonctionnel dans le logiciel, mais pas pour tous les styles visuels. Le style conceptuel utilisait l'ancien moteur d'affichage 3D (les 2 coexistent dans AutoCAD) jusqu'à la version 2025. Depuis AutoCAD 2026, le style conceptuel utilise le nouveau moteur d'affichage 3D, bien plus performant que l'ancien. Si vous n'utilisez pas encore cette version, je vous conseille de faire des tests avec AutoCAD 2026.
    2 points
  7. Lorsque tu parles de geler, tu penses au calque, ou bien au masquage des objets. Si les objets 2D et 3D ne sont pas dans les mêmes calques, pourquoi ne pas passer par les états de calque. Il suffit de faire un état TRAVAIL_2D avec les calques des objets 2D et 3D visibles et un autre état TRAVAIL_3D dans lequel tous les calques des objets 2D sont gelés. A partir de là, il suffit de passer d'un état à l'autre selon le type de travail que l'on souhaite.
    2 points
  8. Ce n'est pas pire que les autres commandes. Je te mets au défi de me dire quelles variables sont lues et utilisées par 100% des commandes présentes dans AutoCAD Map 3D. Je ne suis même pas sûr qu'il reste un développeur chez Autodesk qui le sache. Donc comme toujours dans AutoCAD, on teste, on essaie et on voit ce qui est pris en compte ou pas. On s'adapte ... ça au moins c'est clair 😉
    2 points
  9. Cher @didier, Je me trouve dans l'obligation de répondre publiquement à tes attaques répétées, non par esprit de polémique, mais dans l'espoir que cette réflexion puisse nourrir un débat plus large sur l'une des questions les plus fondamentales de notre époque. L'Authenticité de la Parole Numérique Ta remise en question de mon humanité dans mes échanges numériques révèle une incompréhension profonde de ce que nous sommes devenus en tant qu'êtres pensants du XXIe siècle. Lorsque je réponds à Obsidienne, c'est bien un être humain qui s'exprime - un être humain que tu connais depuis suffisamment longtemps pour ne pas en douter. Cette suspicion m'attriste car elle traduit une vision manichéenne de l'intelligence qui me semble dangereusement réductrice. Notre cerveau, cet organe extraordinaire qui nous définit, ne s'est jamais développé ex nihilo. Il s'est construit progressivement, se nourrissant des interactions multiples avec son environnement : l'éducation formelle, la transmission familiale, les maîtres qui ont marqué notre parcours, les livres qui ont façonné notre pensée, et désormais, inévitablement, l'écosystème numérique dans lequel nous évoluons. Cette évolution de nos sources d'apprentissage n'est pas une dégénérescence, mais une adaptation naturelle à la complexité croissante de notre époque. L'Évolution Technologique et Ses Résistances Je perçois dans tes positions une forme de nostalgie pour un monde révolu, où les frontières entre "authentique" et "artificiel" semblaient plus nettes. Cette résistance aux innovations technologiques n'est pas nouvelle - chaque révolution a suscité ses détracteurs, ses enthousiastes aveugles et ses observateurs critiques. Je me situe résolument dans cette dernière catégorie, loin de tout ayatollisme technologique. Mon approche se veut pragmatique et nuancée. Je reconnais volontiers que l'intelligence artificielle, comme toute innovation humaine, porte en elle autant de promesses que de dangers. Cette ambivalence constitutive n'est pas une faiblesse conceptuelle mais une caractéristique fondamentale de toute avancée technologique significative. La Pertinence de l'Assistance Artificielle Concernant ma réponse à Obsidienne, élaborée avec l'assistance de ChatGPT, je maintiens qu'elle était particulièrement pertinente. Si tu y décèles des éléments "déconnectés", j'aimerais que tu explicites tes objections plutôt que de rejeter en bloc une démarche intellectuelle que tu ne comprends manifestement pas. Nous ne sommes ni des génies ni des détenteurs de la science infuse. Nous sommes des êtres humains ordinaires qui, face aux limites de nos connaissances, cherchons les réponses là où elles se trouvent. Hier, c'était dans les bibliothèques et les encyclopédies ; aujourd'hui, c'est également dans l'intelligence artificielle. Cette évolution des outils de recherche ne constitue pas une trahison de notre humanité mais une expansion de nos capacités cognitives. Les Vraies Questions Énergétiques et Épistémologiques Tes deux objections principales méritent une analyse plus approfondie. D'abord, la question énergétique : s'il est probable qu'une requête d'intelligence artificielle consomme plus d'électricité qu'une simple recherche web, il faut considérer l'efficacité globale du processus. Une seule requête d'IA peut remplacer des dizaines de recherches traditionnelles, produisant une synthèse argumentée et sourcée qui aurait nécessité un travail de compilation considérable et donc une consommation importante d'énergie. Ensuite, la question épistémologique fondamentale : la nature de l'intelligence humaine versus l'intelligence artificielle. Nos connaissances dans ces deux domaines restent trop fragmentaires pour permettre des jugements définitifs. Cette incertitude devrait nous conduire à l'humilité plutôt qu'au rejet dogmatique. L'Hybridation Inévitable Ton concept de "réponse purement humaine" relève d'une illusion épistémologique. Aucune de nos productions intellectuelles ne surgit du néant de notre conscience. Elles s'enracinent dans l'ensemble de nos expériences, lectures, échanges - y compris, désormais, nos interactions avec l'intelligence artificielle. Cette hybridation n'est pas une contamination mais une évolution naturelle de nos processus cognitifs. Lorsque tu recherches une information, que ce soit dans un livre, sur internet ou via une IA, tu exerces ton esprit critique pour évaluer la pertinence des résultats. C'est exactement ce que j'ai fait avec la réponse suggérée par ChatGPT : je l'ai lue, analysée, approuvée avant de la publier. Vers une Réconciliation Pragmatique Ton intransigeance me semble non seulement irréfléchie mais également vouée à l'échec face à la réalité qui s'impose déjà. Les forums Autodesk intégreront massivement l'IA dès l'automne 2025. De nombreux articles que tu lis sont déjà rédigés avec l'assistance de l'intelligence artificielle. Cette révolution silencieuse transforme notre rapport à l'information sans que nous en ayons toujours conscience. Tu m'as demandé un jour de signaler systématiquement mon recours à l'IA. Pour Obsidienne, je l'ai fait par transparence, reconnaissant mes limites dans ce domaine spécifique. Mais je ne généraliserai pas cette pratique, car elle procède d'une vision artificielle de la production intellectuelle. Nous n'avons jamais signalé nos consultations de Google ou d'encyclopédies - pourquoi traiterions-nous différemment les outils d'IA qui ne sont, au fond, que des extensions sophistiquées de nos capacités de recherche et de synthèse ? Conclusion : L'Esprit Critique à l'Épreuve du Changement Cette réflexion dépasse nos divergences personnelles pour toucher aux fondements même de ce que signifie penser et apprendre au XXIe siècle. L'intelligence artificielle n'est ni notre salut ni notre damnation - elle est un outil qui amplifie nos capacités tout en exigeant de nous une vigilance critique accrue. Comme le rappelait Aristote avec une sagesse intemporelle : "C'est la marque d'un esprit cultivé qu'être capable de nourrir une pensée sans la cautionner pour autant." Cette maxime n'a jamais été aussi pertinente qu'à l'époque de l'intelligence artificielle, où notre capacité à examiner, critiquer et synthétiser l'information devient plus cruciale que jamais. L'avenir appartient non pas à ceux qui rejettent aveuglément ces nouveaux outils, ni à ceux qui s'y abandonnent sans réflexion, mais à ceux qui sauront les intégrer intelligemment dans une démarche intellectuelle authentiquement humaine.
    2 points
  10. Bonjour @rebcao Ne nous en plaignons pas ! Les dessins de versions quelque peu anciennes s'ouvrent toujours et aisément, c'est très bien ainsi. Il ne faut pas se plaindre POUR se plaindre. Amicalement
    2 points
  11. Hello @Carpo Quand @didier parle sur Covadis, on dit AMEN ! Bye, lecrabe
    1 point
  12. Dans les projet Covadis, est-ce qu'il y a aussi beaucoup d'objets 2D (profil en long et en travers, point topo, hachure ...)? Tous ces objets 2D à intégrer dans le moteur 3D, plus les grandes coordonnées CC, ça met AutoCAD à plat.
    1 point
  13. le proc i7 13850HX est annoncé pour une fréquence turbo à 5.3GHz, maintenu sur quelques cœurs, donc normalement ça devrait quand même boosté pas mal https://www.intel.fr/content/www/fr/fr/products/sku/232161/intel-core-i713850hx-processor-30m-cache-up-to-5-30-ghz/specifications.html Le problème des portables concerne surtout le refroidissement, avec un mode performance maxi qui fait tourner les ventilo à fond, et difficilement supportable à longueur de journée.
    1 point
  14. Module Dao : - lancer la commande Insérer / Références Attachement / DXF DWG / Attacher Dxf / Dwg, sélectionner le fichier et valider la commande - activer le module Terrain (M.N.T.) Module Terrain : - dans le Gestionnaire de calques sélectionner dans la partie gauche le ou les calques des points/objets 3D nécessaires à la modélisation du Tn et cliquer sur la flèche sens gauche-droite pour afficher ces calques dans le module Terrain. - lancer la commande Terrain / Assistant modélisation et suivre les instructions de la boite de dialogue pour sélectionner et valider les éléments à partir desquels Mensura doit modéliser le MNT On peut demander la modélisation du MNT avec l'intégration automatique des lignes d'arêtes depuis les polylignes dessinées, si ce le dessin de base est fait correctement ce qui est très rare, ou bien modéliser le MNT uniquement avec les points 3D et réaliser les lignes d'arêtes, manuellement ou automatiquement, dans un deuxième temps. L'avantage de la commande Attacher Dwg / Dxf est que l'on peut "détacher" ce fichier si on le souhaite, une fois les données nécessaires récupérées, notamment si le fichier Dwg est très lourd ou pour éviter l'empilement des versions (indices A, B, C ...)
    1 point
  15. Bonjour @Didj05 Je suis surpris de ce que vous écrivez au sujet des polices, c'est connu depuis la nuit des temps sur AutoCAD et c'est bien plus rapide SANS les polices TTF. Mais admettons ! Pour connaitre le "poids" d'un calque, ouvrir un fichier vierge entièrement purgé, y coller les entités à mesurer, enregistrer et noter le poids et faire pareil une fois la simplification appliquée. Je ne parle à aucun moment de Lisp donc je ne vois pas de quoi vous parlez. : "n'apporte avec le lisp pas grand chose" Si vous voulez absolument garder TOUTES ces entités dans le même dessin, il ne va guère être possible de modifier votre situation. C'est comme si vous demandiez comment changer SANS rien changer ? Amicalement
    1 point
  16. La commande Publier Pdf reprend le nom de la mise en page = changer le nom de la mise en page.
    1 point
  17. Je n'ai pas testé, mais je ne pense pas que ça fonctionnera ! J'utilise la commande _-plot pour afficher le nom des imprimantes système dans l'historique de commandes. Et c'est cette commande qui précisément déclenche le F2. Une fois la commande passée je récupère les infos notées dans l'historique pour ne garder que les imprimantes. Nomutt va empêcher la commande d'affichage des imprimantes (qui elles-mêmes déclenchent le F2), donc pas d'enregistrement possible dans l'historique.
    1 point
  18. OK dans ce cas-là ne vous est-il pas possible de lancer Nomutt avant les lignes que vous ne voulez pas voir s'afficher et de la remettre à sa valeur précédente ensuite ?
    1 point
  19. Bonjour, vous avez essayé Nomutt? https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-9289326E-DEE9-40E7-839C-A4B031A29B2A
    1 point
  20. Il faudrait le fichier LSP ... ça aiderai pas mal 🙂
    1 point
  21. Bonjour, Je ne sait pas comment c'est sur BricsCad, mais sur Autocad c'est plutôt. (vlax-invoke-method (vlax-get-or-create-object "WScript.Shell") "SendKeys" "{F2}") Cdt
    1 point
  22. +1 pour la solution soconnect DICT2DAO
    1 point
  23. Petite solution en fin de fonction : ; Fermer Fenetre Texte (defun CloseWindowText () (textscr) ; Basculer sur fenêtre de texte (vlax-invoke-method (vlax-get-or-create-object "WScript.Shell") "SendKeys" "%{F4}")) ; Fermer fenêtre de texte
    1 point
  24. Hello Merci pour vos contributions ... Bye, lecrabe
    1 point
  25. Bonjour, Ca ne serait pas cela que vous recherchez ? https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-E7599129-5A3B-4121-A0C3-A625CA96E55B
    1 point
  26. Bonjour @danlac Sauf à ne pas avoir compris la question, je me permets de dire que la proposition de @Erased est hors-sujet. C'est surtout que cette commande va complètement modifier le dessin et plus aucune coordonnée ne sera exacte. Je pense que la solution est de créer un SCU dont la direction croissante des X sera parallèle à l'écran. Ensuite lancer REPERE et choisir courant pour justement mettre les X parallèle à l'écran. Et finalement taper SCU et répondre Général. Attention si la variable UCSFOLLOW est à une autre valeur que 0 ça ne fonctionnera pas Attention à bien choisir une entité en 2D pour définir l'axe des X sinon un rotation autour de Z va s'opérer et les gros ennuis vont commencer. Amicalement Vidéo exemple : 2025-06-05_16-52-08.mp4
    1 point
  27. This strategic move comes as brands without AI-enhanced capabilities face up to 40% drops in visibility and engagement. Cette décision stratégique intervient alors que les marques sans capacités améliorées par l’IA font face à des baisses de visibilité et d’engagement allant jusqu’à 40 %. J'aimerais bien savoir qui lance ce genre "d'étude", ce n'est pas dit comme ça, c'est plus pratique ! J'ai cherché et j'ai trouvé ça ailleurs sur la toile : Les spécialistes du marketing et les consommateurs sont également divisés quant aux capacités créatives de l'IA. L'étude « État du marketing 2025 » de SurveyMonkey révèle que 46 % des consommateurs n'apprécient pas les entreprises qui utilisent l'IA pour générer du contenu , et que 43 % sont moins susceptibles d'acheter auprès d'une telle entreprise. Je ne sais pas si elle plus crédible, au moins le questionneur est cité. Amicalement (sans IA)
    1 point
  28. Si tu veux faire des dessins artistiques ou une BD, tu penses direct à AutoCAD® ? 🎨📖 Probablement pas, parce que tu sais que c’est surtout un logiciel de dessin technique, rien de plus. 📐✏️ Mais bon, certains dépassent ça et utilisent le logiciel pour d’autres trucs. 🚀 Par exemple, là on a un auteur de BD, qui est aussi architecte certes, mais qui se sert d’AutoCAD® pour créer ses bandes dessinées. 🏗️📚 Pas mal, non ? 😊 https://dessein-tech.com/t/des-bandes-dessinees-avec-autocad-pourquoi-pas/3665/1
    1 point
  29. Bonjour, l’intelligence artificielle a connu des avancées significatives, notamment dans le domaine de la génération automatique de scripts et de programmes informatiques. Cependant, elle n’a pas encore atteint la capacité de se substituer totalement à un développeur logiciel expérimenté. En revanche, pour l’ensemble des utilisateurs, qu’ils soient débutants, intermédiaires ou avancés, l’IA peut s’avérer extrêmement utile pour automatiser des tâches mineures mais fastidieuses, telles que la génération de commentaires dans un code dépourvu de leurs annotations. https://go.dessein-tech.com/ia_code_source
    1 point
  30. Merci Patrick, je ne savais pas que cela s'appelait comme ça. J'ai connu les photocopieuses à l'ammoniaque, ça te défonçait le nez, mais je ne sais pas si c'est pareil. Oui, on pourrait en faire des kms de trucs comme ça. Je vois encore souvent sur des bons de commande marqué : Envoyer la facture à l'adresse courriel facturation@nomdecomaine.com en double exemplaire 😁
    1 point
  31. Ha :') Je me fatigue moi même xD
    1 point
  32. Bonjour @William44850 Ce qui est demandé est loin d'être banal. Cette fonction est très compliquée à créer si on veut quelque chose d'efficace et de bien programmé. Une routine se promène sur la toile, mais elle est "simpliste" et pas vraiment déboguée. Je me suis attelé à vouloir faire mieux sans réel succès, manquant de connaissances mathématiques évoluées. Mon résultat est fonctionnel, mais n'est pas à la hauteur de mes attentes. C'est une demande de fonction professionnelle qui dépasse le concept de ce forum d'entraide et de partage de savoir. Amicalement
    1 point
  33. Bonjour @Vincent P. Raison supplémentaire de ne pas se plaindre que la version 2026 ait conservé le format 2018 ! Amicalement
    1 point
  34. Bonjour et merci à tous pour ces renseignements
    1 point
  35. Bonjour Il y a une fonction Covadis qui fait ça super bien, mais @William44850 a-t-il Covadis ? Si oui : C'est dans Covadis 2D >> Cotations/Divisions >> Divisions de surfaces Amicalement
    1 point
  36. @nG! Hebus C'était il y a 20 ans 😉
    1 point
  37. Merci pour ton intérêt ! Chaque semaine je ferais un podcast qui résumera les derniers et principaux articles, le dernier.
    1 point
  38. C'est parfait merci beaucoup 👌 bonne journée
    1 point
  39. Un bloc qui fait chier, il va pas faire chier longtemps... Après t'a le replace_bloc mais bon, casser un bloc pour le refaire propre et replace bloc c'est long... Mais faisable via un peu de LISP. Des fois on a tellement le nez dans le guidon que finalement les choses plus simples fonctionnent
    1 point
  40. Oki I get it ! Simplement il faut mettre le nom de tes grues entre guillemets ^^' (MDT219 Ici cela indique qu'il faut exécuter la fonction nommée (MDT219). Il te faut écrire : "MDT219" Bisous, Luna
    1 point
  41. Coucou, Juste à titre d'exemple (désolée, la passion à pris le dessus ^^') j'ai retravaillé ton code dans sa globalité pour qu'il soit un peu plus poussé (sans intégrer la partie concernant les blocs) et plus facilement modifiable (les paramètres développeurs notamment, car je reconnais que pour le reste c'est peut-être plus difficile à comprendre désormais). Il s'agit du fichier GRUE.lsp (mais il est dépendant des fonctions (getkdh), (lst2str) et (str2lst) d'où leur présence également mais rien ne t'empêche de tout regrouper dans le même fichier) et le nom de la commande est GRUE. Bisous (et désolée pour le dérangement), Luna UtDac . lst2str.lsp UtDac . str2lst.lsp UtUse . getkdh.lsp GRUE.lsp
    1 point
  42. Coucou, Tu parles d'avoir les courbes de charge de plusieurs grues sous forme de commandes séparées, or je doute que le fond du code change drastiquement. Je suppose que les seules informations qui changent réellement sont celles que l'on trouve dans la variable 'capacites' ? Au vu du programme, il y a de nombreuses choses que l'on peut vraiment améliorer pour un rendu plus professionnel, mais pour cela il faudrait l'ensemble du LISP et quelques infos supplémentaires (notamment qu'entends-tu par "les courbes de charge soient crées dans un bloc" ?). Si en revanche tu souhaites effectuer ces modifications de ton côté : Il faut ajouter : (setq point (getpoint "\nSpécifier le point d'insertion : ") x (car point) y (cadr point) ) juste après la ligne (setq valeur ... et modifier les 2 lignes comme suit : ;; remplacer '(0 0) par point (command "_circle" point (rtos rayon 2 2)) ;; remplacer (list rayon 0) par (list (+ x rayon) y) afin d'ajouter les coordonnées du point d'origine au calcul des coordonnées du texte (command "_text" (list (+ x rayon) y) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t")) Pour cela, j'aurais besoin d'un peu plus de détail et en fonction des réponses, cela changera la nature du code. Souhaite tu créer des définitions de blocs ou souhaites-tu insérer des références de blocs ? Dans le premier cas, ne serait-il pas plus simple de créer les définitions de blocs à la main (puisqu'il ne me semble pas que cela représente de nombreuses heures de travail) et cela permettrait en plus de créer des blocs dynamiques. Dans le second cas, cela suppose que les définitions de blocs existent déjà. Ou bien est-ce un programme qui se veut "intelligent" c'est-à-dire qu'il insère des références de blocs, et si la définition de bloc n'existe pas encore dans le dessin, alors il faut dans un premier temps créer cette définition de bloc pour ensuite insérer une référence de bloc ? Pour poser une question à un utilisateur (et dans ton cas je te suggère de n'autoriser que certaines valeurs), tu peux utiliser (getkword) avec la fonction (initget). Voir un exemple ci dessous (pas le plus opti) : (initget 1 "219 218 178") (setq grueNum (getkword "\nVeuillez choisir le type de grue [219/218/178] : ")) (cond ((grueNum = "218") (c:GRUE_DIAG218)) ((grueNum = "219") (c:GRUE_DIAG219)) ((grueNum = "178") (c:GRUE_DIAG178)) ) Bisous, Luna
    1 point
  43. Bonjour, Sogelink a déployé il y a quelque mois SoConnect https://www.sogelink.com/nos-solutions/so-connect/ C'est un logiciel annexe qui s'installe avec Mensura (tout du moins, il s'est installé en même temps que Covadis chez moi), et qui permet de faciliter l'intégration des PDF de DT avec l'outil DICT2DAO. Je n'ai pas eu l’occasion de l'utiliser (mon employeur n'est pas à la pointe de la technologie), mais ça semble être un bon gain de temps.
    1 point
  44. Bonjour, Pour gérer ce genre d'information, j'ai pris l'habitude de nommer mes Onglets de PRESENTATION de la manière suivante : 001-0-A4H, 002-0-A4H, 003-0-A3H, ... , 010-0-A0, etc. Ce qui me permet de mettre à jour automatiquement mon cartouche qui est bien sur inséré sur l'Espace PAPIER et qui récupère les données : 3 premiers caractères = N° de PAGE 5e caractère = INDICE de 7 à 9 le FORMAT de la feuille Tout ça se fait sans LISP simplement en créant un CHAMP avec un peu de DIESEL... $(substr,$(getvar,CTAB),7,3) = Format A titre d'exemple, voici un de mes gabarits... Christian PS: c'est nul de limiter les pièces jointes à 48,43 Ko !!!!!!!!!!!
    1 point
  45. Hello Je l avais rencontre une fois aux Etats-Unis d'Amérique dans les annees 1990-1995 lors d un CAD Salon ! Il avait ete tres sympa en parlant lentement pour que je comprenne bien ses reponses a mes questions ! SNIFF, Bye, lecrabe
    1 point
  46. Bonjour à Toutes et à Tous Assurément, CadXP a contribué dans une grande proportion à nous faire grandir. Sans ce site d'échange, nombreux sont celles et ceux qui auraient laissé tombé, seuls dans leur coin, sans aide aucune. D'autres sites voyaient le jour à cette époque et certains existent encore à l'instar de CadXP, mais ce sont pour la plupart des anglophones. Il y avait une réelle demande, car ils existent encore de nos jours, TheSwamp, CadTutor, Afralisp... Merci Patrick Amicalement
    1 point
  47. Salut, C'était mon premier message sur CADxp. Cette routine LISP a été écrite pour dessiner les triangulations ou contreventements dont la construction peut parfois être un peu fastidieuse (CF le screencast). Elle peut en fait servir à dessiner tout contour trapézoïdal à partir d'une hauteur (la largeur du contreventement), d'un point à chacune des extrémités (situés sur la même base ou non) et de l'angle depuis chacun de ces points, soit 4 clics une fois la hauteur paramétrée. Pratiquement, pour dessiner tout profil dont les coupes aux extrémités peuvent être de fausse équerre. J'ai repris cette routine en .NET pour en faire un plugin (AutoCAD 2013 et plus) que je propose ici en test. Télécharger et exécuter TrapezeSetup.msi pour installer le plugin sur toutes les versions d'AutoCAD (et verticaux) de 2013 à 2018. Télécharger Trapezoid.zip depuis cette page, débloquer puis extraire et exécuter TrapezeSetup.msi pour installer le plugin sur toutes les versions d'AutoCAD (et verticaux) depuis 2013. Lancer la commande TRZ. La hauteur est enregistrée avec le dessin. Le code : using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using static System.Math; using AcAp = Autodesk.AutoCAD.ApplicationServices.Application; [assembly: CommandClass(typeof(Trapeze.Commands))] namespace Trapeze { public class Commands { Document doc; Database db; Editor ed; double height; public Commands() { doc = AcAp.DocumentManager.MdiActiveDocument; db = doc.Database; ed = doc.Editor; height = GetHeight(); db.BeginSave += (s, e) => SaveHeight(); } [CommandMethod("TRZ")] public void Trapeze() { PromptPointOptions ppo; PromptPointResult ppr; Point3d pt1; while (true) { ppo = new PromptPointOptions($@" Hauteur courante = {height} Spécifiez le premier coin ou [Hauteur du trapeze]: ", "Hauteur"); ppo.Keywords.Default = "Hauteur"; ppr = ed.GetPoint(ppo); if (ppr.Status == PromptStatus.Keyword) { var pdo = new PromptDistanceOptions("\nSpécifiez la hauteur: "); pdo.DefaultValue = height; pdo.UseDefaultValue = true; var pdr = ed.GetDistance(pdo); if (pdr.Status != PromptStatus.OK) return; height = pdr.Value; } else { if (ppr.Status != PromptStatus.OK) return; pt1 = ppr.Value; break; } } ppo.Message = "\nSpécifiez un point dans la direction de ce côté: "; ppo.AppendKeywordsToMessage = false; ppo.BasePoint = pt1; ppo.UseBasePoint = true; ppr = ed.GetPoint(ppo); if (ppr.Status != PromptStatus.OK) return; var pt2 = ppr.Value; ppo.Message = "\nSpécifiez l'autre extémité de la base ou de la diagonale: "; ppr = ed.GetPoint(ppo); if (ppr.Status != PromptStatus.OK) return; var pt3 = ppr.Value; using (var tr = db.TransactionManager.StartTransaction()) using (var pline = new Polyline(4)) { pline.AddVertexAt(0, new Point2d(pt1.X, pt1.Y), 0.0, 0.0, 0.0); pline.AddVertexAt(1, new Point2d(pt1.X, pt1.Y), 0.0, 0.0, 0.0); pline.AddVertexAt(2, new Point2d(pt3.X, pt3.Y), 0.0, 0.0, 0.0); pline.AddVertexAt(3, new Point2d(pt3.X, pt3.Y), 0.0, 0.0, 0.0); pline.Closed = true; pline.Elevation = pt1.Z; var ucs = ed.CurrentUserCoordinateSystem; pline.TransformBy(ucs); var jig = new TrapezeJig(pline, height, pt1.TransformBy(ucs), pt2.TransformBy(ucs), pt3.TransformBy(ucs)); var pr = ed.Drag(jig); if (pr.Status == PromptStatus.OK) { var curSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); curSpace.AppendEntity(pline); tr.AddNewlyCreatedDBObject(pline, true); } tr.Commit(); } } private void SaveHeight() { using (var tr = db.TransactionManager.StartOpenCloseTransaction()) { var NOD = (DBDictionary)tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead); DBDictionary dict; if (NOD.Contains("GILE_TRAPEZE")) { dict = (DBDictionary)tr.GetObject(NOD.GetAt("GILE_TRAPEZE"), OpenMode.ForRead); } else { NOD.UpgradeOpen(); dict = new DBDictionary(); NOD.SetAt("GILE_TRAPEZE", dict); tr.AddNewlyCreatedDBObject(dict, true); } Xrecord xrec; if (dict.Contains("TrapezeHeight")) { xrec = (Xrecord)tr.GetObject(dict.GetAt("TrapezeHeight"), OpenMode.ForWrite); } else { xrec = new Xrecord(); dict.SetAt("TrapezeHeight", xrec); tr.AddNewlyCreatedDBObject(xrec, true); } xrec.Data = new ResultBuffer(new TypedValue(40, height)); tr.Commit(); } } private double GetHeight() { using (var tr = db.TransactionManager.StartOpenCloseTransaction()) { var NOD = (DBDictionary)tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead); if (NOD.Contains("GILE_TRAPEZE")) { var dict = (DBDictionary)tr.GetObject(NOD.GetAt("GILE_TRAPEZE"), OpenMode.ForRead); if (dict.Contains("TrapezeHeight")) { var xrec = (Xrecord)tr.GetObject(dict.GetAt("TrapezeHeight"), OpenMode.ForWrite); return (double)xrec.Data.AsArray()[0].Value; } } return 10.0; } } class TrapezeJig : EntityJig { Polyline pline; Plane plane; Point3d dragPt, basePt; Point2d p1, p2, p3; Vector2d v1, v2, v3; double width, a1; public TrapezeJig(Polyline pline, double width, Point3d pt1, Point3d pt2, Point3d pt3) : base(pline) { this.pline = pline; this.width = width; plane = new Plane(Point3d.Origin, pline.Normal); basePt = pline.GetPoint3dAt(2); p1 = pt1.Convert2d(plane); p2 = pt2.Convert2d(plane); p3 = pt3.Convert2d(plane); v1 = p1.GetVectorTo(p3); v2 = p1.GetVectorTo(p2).GetNormal(); a1 = v2.Angle - v1.Angle; } protected override SamplerStatus Sampler(JigPrompts prompts) { var options = new JigPromptPointOptions("\nSpécifiez un point dans la direction de ce côté: "); options.UseBasePoint = true; options.BasePoint = basePt; options.Cursor = CursorType.RubberBand; options.UserInputControls = UserInputControls.Accept3dCoordinates | UserInputControls.UseBasePointElevation; var result = prompts.AcquirePoint(options); if (result.Value.IsEqualTo(dragPt)) return SamplerStatus.NoChange; dragPt = result.Value; return SamplerStatus.OK; } protected override bool Update() { v3 = p3.GetVectorTo(dragPt.Convert2d(plane)).GetNormal(); double a2 = v3.Angle - v1.Angle; Point2d pt1, pt2, pt3, pt4; if (Sign(Sin(a1)) == Sign(Sin(a2))) { double d1 = Abs(width / Sin(a1)); double d2 = Abs(width / Sin(a2)); pt1 = p1 + v2 * d1; pt2 = p3 + v3 * d2; pt3 = p3; pt4 = p1; } else { double a0 = Acos(width / v1.Length); double d1, d2; if (Sin(a1) < 0) { d1 = Abs(width / Cos(a0 + a1)); d2 = Abs(width / Cos(a0 + a2)); } else { d1 = Abs(width / Cos(a0 - a1)); d2 = Abs(width / Cos(a0 - a2)); } pt1 = p1; pt2 = p1 + v2 * d1; pt3 = p3; pt4 = p3 + v3 * d2; } if (IsConvex(pt1, pt2, pt3, pt4)) { pline.SetPointAt(0, pt1); pline.SetPointAt(1, pt2); pline.SetPointAt(2, pt3); pline.SetPointAt(3, pt4); } return true; } private bool IsConvex(Point2d pt1, Point2d pt2, Point2d pt3, Point2d pt4) { var a1 = (pt2 - pt1).Angle; var a2 = (pt3 - pt2).Angle; var a3 = (pt4 - pt3).Angle; var a4 = (pt1 - pt4).Angle; var sign = Sign(Sin(a1 - a2)); return Sign(Sin(a2 - a3)) == sign && Sign(Sin(a3 - a4)) == sign; } } } }
    1 point
  48. Puisqu'on parle d'orthographe, soit il y a une faute dans le titre du sujet, soit j'ai le cerval qui fuit...
    1 point
  49. Autodidacte et débutant en AutoLISP je soumets cette routine à la critique. Tous les commentaires sont évidemmment les bienvenus. ;;; 20/04/05 Fonction TRAPEZE - Gilles Chanteau - ;;; ;;; c:trapeze Crée une polyligne fermée décrivant un quadrilatère trapézoïdal. ;;; Permet à l'utilisateur de spécifier la largeur entre les deux côtés parallèles (hauteur du trapèze). ;;; Demande respectivement pour chacun des autres côtés, un point à un des sommets (indifféremment ;;; sur l'une ou l'autre base) et, à ce sommet, l'angle formé par ce côté avec l'axe des X. ;;; Cette fonction a été créée pour tracer les pièces rectilignes dont les coupes en bout ne sont ;;; pas d'équerre (écharpes, jambes de force, goussets et autres "diagos") utilisées en menuiserie, ;;; charpente, serrurerie... ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; TRAPEZE_ERR Redéfinition de *error* ;;; ferme le groupe "UNDO" et restaure la valeur initiale des variables. (defun TRAPEZE_ERR (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon") ) (princ) (princ (strcat "\nErreur: " msg)) ) (command "_undo" "_end") (rest_var) (setq *error* m:err m:err nil ) (princ) ) ;;; TRPZ_ERR - Envoie un message explicatif et quitte l'application. (defun TRPZ_ERR (msg) (princ (strcat "\nErreur: " msg)) (exit) ) ;;; EQUALKPI - Évalue si un angle est égal à k pi radians à 0.000000001 près. (defun EQUALKPI (ang) (or (equal (rem ang pi) 0 1e-009) (equal (abs (rem ang pi)) pi 1e-009) ) ) ;;; ACOS Retourne l'arc cosinus du nombre, en radians (defun ACOS (num) (if (<= -1 num 1) (atan (sqrt (- 1 (expt num 2))) num) (princ "\nErreur: L'argument pour ACOS doit être compris entre -1 et 1" ) ) ) ;;; REST_VAR & SAVE_VAR ;;; ;;; SAVE_VAR Enregistre la valeur initiale des variables système dans une liste associative (defun save_var (lst) (setq varlist (mapcar '(lambda (x) (cons x (getvar x))) lst)) ) ;;; REST_VAR Restaure leurs valeurs initiales aux variables système de la liste SAVE_VAR (defun rest_var () (foreach pair varlist (if (/= (getvar (car pair)) (eval (cdr pair))) (setvar (car pair) (eval (cdr pair))) ) ) (setq varlist nil) ) ;;; C:TRAPEZE - Fonction principale (defun c:trapeze (/ pt1 pt2 pt3 pt4 a0 a1 a2 a3 a4 alpha) (setq m:err *error* *error* TRAPEZE_ERR ) (save_var '("orthomode" "cmdecho" "osmode")) (command "_undo" "_begin") (setvar "orthomode" 0) (setvar "cmdecho" 0) (princ "trapeze") ;; Saisie des données (if (not (numberp *larg*)) (setq *larg* 10) ) (while (not (setq pt1 (getpoint (strcat "\nLa largeur courante est de " (rtos *larg*) "\nSpécifiez le premier sommet ou <Largeur>: " ) ) ) ) (initget 6) (setq *larg* (getdist "\nSpécifiez la largeur: ")) ) (setq a1 (getangle pt1 "\nSpécifiez l'angle décrit par ce côté: ")) (initget 1) (setq pt2 (getpoint pt1 "\nSpécifiez le second sommet: ")) (if (not (equal (caddr pt1) (caddr pt2) 1e-009)) (TRPZ_ERR "les sommets ne sont pas dans un plan parallèle au SCU courant." ) ) (setq a2 (getangle pt2 "\nSpécifiez l'angle décrit par ce côté: ")) ;; Conversion des données (setq a0 (angle pt1 pt2) pt3 (polar pt1 a1 *larg*) pt4 (polar pt2 a2 *larg*) ) (foreach n '(a1 a2) (set n (- (eval n) a0)) (if (minusp (eval n)) (set n (+ (eval n) (* 2 pi))) ) (if (EQUALKPI (eval n)) (TRPZ_ERR "un des côtés est aligné avec les sommets.") ) ) (setvar "osmode" 0) ;; Évaluation de la position des côtés par rapport aux deux sommets spécifiés (if (or (and (< 0 a1 pi) (< 0 a2 pi)) (and (< pi a1 (* 2 pi)) (< pi a2 (* 2 pi))) ) ;; Calcul des autres sommets si les premiers sont situés sur une base du trapèze (setq pt3 (polar pt1 (+ a0 a1) (/ *larg* (abs (sin a1)))) pt4 pt2 pt2 (polar pt2 (+ a0 a2) (/ *larg* (abs (sin a2)))) ) ;; Calcul des autres sommets si les premiers sont situés sur une diagonale du trapèze (if (> *larg* (distance pt1 pt2)) (TRPZ_ERR "la largeur est plus grande que la diagonale.") (progn (setq alpha (ACOS (/ *larg* (distance pt1 pt2)))) (if (< a1 pi) (setq a3 (- alpha a1) a4 (- alpha a2 pi) ) (setq a3 (+ alpha a1) a4 (+ alpha a2 pi) ) ) (foreach n (list a3 a4) (if (equal (cos n) 0 1e-009) (TRPZ_ERR "un des côtés est aligné avec une des bases.") ) ) (setq pt3 (polar pt1 (+ a0 a1) (/ *larg* (cos a3))) pt4 (polar pt2 (+ a0 a2) (/ *larg* (cos a4))) ) ) ) ) ;; Création de la polyligne, si les données le permettent (if (inters pt1 pt3 pt2 pt4 T) (TRPZ_ERR "intersection des côtés (polygone croisé).") (command "_pline" pt1 pt3 pt2 pt4 "_c") ) (command "_undo" "_end") (rest_var) (setq *error* m:err m:err nil ) (princ) )
    1 point
  50. c'est peut être la variable texterap qui est active.Dans ce cas, la désactiver
    1 point
×
×
  • 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é