Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

Tout ce qui a été posté par (gile)

  1. Salut, Voir ce sujet récent.
  2. (gile)

    Couper SOLIDE avec SURFACE

    Salut Bryce, Il y a probablement une variable qui n'est pas correctement paramétrée chez moi, parce que AutoCAD refuse catégoriquement d'unir des Faces 3d, je dois d'abord les convertir en maillage (OPTIONMAILLE) ou, plus simplement, en surfaces (CONVENSURFACE).
  3. (gile)

    Surfacique vers solide

    En partant directement de points AutoCAD (nodal), il serait probablement avantageux d'utiliser la commande MNT_SOLID3D définie dans DelaunayTriangulation_19.dll qui permet de créer directement le MNT sous forme de solide à partir d'un semis de points.
  4. (gile)

    Surfacique vers solide

    As-tu "débloqué" le ZIP ?
  5. (gile)

    Couper SOLIDE avec SURFACE

    Bravo Bryce ! Je ne connaissait pas cette subtilité de la commande UNION. PS : cette méthode fonctionne parce que les objets sont des maillages (MESH), ça ne fonctionnerait pas directement avec des faces 3d (3DFACE) qu'il faudrait d'abord convertir en maillage avec OPTIONMAILLE (_MESHOPTIONS).
  6. Salut, Voilà un petit LISP qui fonctionne avec des attributs "classiques" et renseigne l'attribut DEBIT en fonction des valeurs des attributs PUISSANCE et DELTA. Il faut bien être conscient que modifier la valeur de l'attribut DEBIT en procédant ainsi détruira le champ dynamique qui permettait de calculer automatiquement la valeur. Autrement dit, les blocs traités avec ce LISP ne fonctionneront plus automatiquement avec AutoCAD 2010 et plus. (defun c:debit (/ getAttribs getAtt getVal block attribs puissance delta debit elst) (defun getAttribs (ent / elst rslt) (while (and ent (= (cdr (assoc 0 (setq elst (entget ent)))) "ATTRIB")) (setq rslt (cons (cons (cdr (assoc 2 elst)) ent) rslt) ent (entnext ent) ) ) rslt ) (defun getAtt (tag /) (cond ((cdr (assoc tag attribs))) (T (prompt (strcat "\nL'attribut '" tag "' est introuvable"))) ) ) (defun getVal (tag / att val) (if (and (setq att (getAtt tag)) (< 0. (setq val (atof (cdr (assoc 1 (entget att)))))) ) val (prompt (strcat "\nLa valeur de l'attribut '" tag "' n'est pas valide")) ) ) (and (setq block (car (entsel "\nSélectionnez un bloc: "))) (setq attribs (getAttribs (entnext block))) (setq puissance (getVal "PUISSANCE")) (setq delta (getval "DELTA")) (setq debit (getAtt "DEBIT")) (setq elst (entget debit)) (entmod (subst (cons 1 (strcat (rtos (/ (* puissance 0.86) delta) 2 0) " l/h")) (assoc 1 elst) elst ) ) ) )
  7. Salut, Les liens sont réparés dans le premier message.
  8. Non, la fonction vl-load-com s'appelle directement sans arguments (et la fonction vla-get-ActiveDocument n'accepte qu'un seul argument). Tu peux l'appeler avant la routine : (vl-load-com) (defun c:conduite (/ AcDoc Space) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) ;;... ) ou au début de la routine : (defun c:conduite (/ AcDoc Space) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) ;;... )
  9. Pour que les fonctions vla-*, vlax-* et vlr-* soient reconnues, il faut que l'interface COM/ActiveX soit chargée. Ajoute simplement : (vl-load-com) au tout début du code.
  10. (gile)

    Couper SOLIDE avec SURFACE

    Salut, La commande SECTION permet de couper des solides 3d à l'aide d'entité de type Surface (apparue avec AutoCAD 2007) mais pas avec des maillages. Pour ton dessin, on peut faire plus simple avec la commande MNT_SOLID3D définie dans DelaunayTriangulation_19.dll qui va directement créer le MNT en Solide 3d à partir des points. Un autre méthode serait, à partir d'un MNT classique constitué de Faces 3d d'extruder les faces avec la routine F2S ou son équivalent .NET Face2Solid. Voir ce sujet, ou celui là plus récent.
  11. (gile)

    MNT avec autocad

    Salut, Si c'est pour le MNT, on peut trouver la routine d'Elpanov Evgeniy sur son site. Sinon, j'avais fait un truc en .NET (exécution environ 10 fois plus rapide que le LISP) voir ce sujet.
  12. Salut, Cette demande me rappelle ce sujet. Si tu parles d'attributs, on peut supposer qu'il s'agit d'attributs de bloc. Dans ce cas il serait plus simple de simplement sélectionner un (ou plusieurs) bloc et de traiter ses attributs. Il faut juste s'assurer que le format du texte des valeurs d'attribut permette de retrouver des nombres valides pour faire les opérations. Le mieux serait que tu mettes à disposition un exemple du bloc à traiter s'il est différent de celui du sujet sus-cité.
  13. Salut, Avec la commande native ATTSYNC les références d'attribut sont supprimées et recréées à partir des définitions d'attribut et de leur propriétés initiales (exceptée la valeur). Pour éviter ça, SELECTATTSYNC ne supprime pas les références d'attribut existantes mais synchronise sélectivement leurs propriétés en fonction des paramètres entrés dans la boite de dialogue. Et pour ce faire, le programme récupère les propriétés des définitions d'attribut et les affecte aux références d'attribut ayant la même étiquette, donc, si tu "renommes" un attribut, c'est un peu comme si tu en créais un nouveau et le programme ne peut pas le retrouver dans les référence d'attribut existantes.
  14. (gile)

    Outils Texte

    Si ça plait, je mets ici le LISP que j'ai posté sur AutoCAD Français (ah, les double posts...) qui fonctionne avec un jeu de sélection plutôt qu'avec une sélection unique. (defun c:LARG0 (/ ss i text) (if (setq ss (ssget '((0 . "MTEXT")))) (repeat (setq i (sslength ss)) (setq text (ssname ss (setq i (1- i)))) (if (< 0.0 (getpropertyvalue text "Width")) (progn (if (/= (getpropertyvalue text "ColumnType") 0) (setpropertyvalue text "ColumnType" 0) ) (setpropertyvalue text "Width" 0.0) ) ) ) ) (princ) )
  15. (gile)

    Outils Texte

    Salut, Si tu parles de la largeur des textes multilignes, il suffit que celle-ci soit égale à 0. Tu peux la forcer celle-ci à 0 quand tu crées le texte multiligne : Commande: TEXTMULT Style de texte courant: "Standard" Hauteur de texte: 2.5 Annotatif: Non Spécifiez le premier coin: Spécifiez le coin opposé ou [Hauteur/Justifier/Espacement lignes/Rotation/Style/Largeur/Colonnes]: l Spécifiez la largeur: 0 Pour le faire après coup, on peut forcer la propriété "Largeur définie" du texte multiligne à 0 dans la palette des propriétés après avoir changé la propriété Colonnes sur "Aucun". Ou en LISP : (defun c:LARGEUR0 (/ text) (if (and (setq text (car (entsel "\nSélectionnez un texte multiligne: "))) (= (getpropertyvalue text "LocalizedName") "Textmult") (< 0.0 (getpropertyvalue text "Width")) ) (progn (or (= (getpropertyvalue text "ColumnType") 0) (setpropertyvalue text "ColumnType" 0) ) (setpropertyvalue text "Width" 0.0) ) ) (princ) )
  16. (gile)

    Surfacique vers solide

    C'est pour ça que dans les deux cas il est proposé une option : LISP F2S : "Union des solides [Auto/Manuelle]: " .NET Face2Solid : "Union des solides ? [Oui/Non] : " Avec le LISP F2S on peut considérablement réduire le temps d'exécution en se mettant en style visuel Filaire 2D. Extrusion et union de 1100 faces 3d : .NET : 5.7 secondes. LISP : 8.8 secondes.
  17. (gile)

    Surfacique vers solide

    La version .NET est quand même plus rapide que le LISP : 5 secondes contre 1 minute et demi avec un fichier exemple (1103 faces). EDIT : la différence est en grande partie due au style visuel. Voir plus bas.
  18. Mais c'est qu'il deviendrait impatient le décapode... Voilà un petit truc qui devrait répondre à la demande. Noter que pour les lignes de repère non multiple (ancienne mode) seul le texte peut être annotatif, ils sont donc traités dans la catégorie "Texte mtexte" (Pas testé en profondeur) ;; Supprime du jeu de sélection les objets non annotatifs (defun filterAnnot (ss / i ent dict) (if ss (repeat (setq i (sslength ss)) (setq ent (ssname ss (setq i (1- i)))) (if (not (setq dict (cdadr (member '(102 . "{ACAD_XDICTIONARY") (entget ent))))) (ssdel ent ss) (if (not (setq dict (cdr (assoc -1 (dictsearch dict "AcDbContextDataManager"))))) (ssdel ent ss) (if (not (dictsearch dict "ACDB_ANNOTATIONSCALES")) (ssdel ent ss) ) ) ) ) ) ss ) ;; Sélectionne les objet annotatifs par type (defun c:selannot (/ kw ss fr) (initget "Texte Hachure Cotation Repere") (setq kw (getkword "\nChoisir une option [Texte mtexte/Hachure/Cotation/ligne de Repere multiple] <Texte>: " ) fr (cond ((= kw "Hachure") '((0 . "HATCH"))) ((= kw "Cotation") '((0 . "DIMENSION"))) ((= kw "Repere") '((0 . "MULTILEADER"))) (T '((0 . "TEXT,MTEXT"))) ) ) (sssetfirst nil (filterAnnot (ssget fr))) )
  19. Salut, Si tu fais du "patchwork" avec des codes récupérés à droite et à gauche, tu as intérêt à les organiser en routines. ;; Retourne un liste de sous-listes des cumuls de longueur de polyligne par calque ;; ((nom_calque nombre_polylignes longueur_cumulée) ...) (defun LongueurPolyligneParCalque (/ ss i pline layer lst sub) (if (setq ss (ssget "_X" '((0 . "LWPOLYLINE") (410 . "Model")))) (repeat (setq i (sslength ss)) (setq pline (ssname ss (setq i (1- i))) layer (getpropertyvalue (getpropertyvalue pline "LayerId") "Name") leng (getpropertyvalue pline "Length") ) (setq lst (if (setq sub (assoc layer lst)) (subst (list layer (1+ (cadr sub)) (+ (caddr sub) leng)) sub lst) (cons (list layer 1 leng) lst) ) ) ) ) ) ;; Ecrit les données dans Excel ;; ;; Argument ;; data : une liste contenant un sous liste de données par rangée (defun EcrireExcel (data / xlApp wBook cells i j) (setq xlApp (vlax-create-object "Excel.Application") wBook (vlax-invoke-method (vlax-get-property xlapp 'WorkBooks) 'Add) cells (vlax-get-property xlApp 'Cells) i 0 ) (foreach row data (setq i (1+ i) j 0 ) (foreach val row (setq j (1+ j) cell (vlax-variant-value (vlax-get-property cells 'Item i j)) ) (vlax-put-property cell 'Value2 val) ) ) (vlax-invoke-method (vlax-get-property (vlax-get-property xlApp 'ActiveSheet) 'Columns ) 'AutoFit ) (vlax-put-Property xlApp 'Visible :vlax-true) ) ;; Ecrit les longueurs de polyligne par calque (defun c:metres (/ data filename) (and (setq data (LongueurPolyligneParCalque)) (EcrireExcel (cons '("Calque" "Nombre" "Longueur") data)) ) (princ) )
  20. (gile)

    Corde et arc [Résolu]

    Salut, C'est possible, mais pas directement. L'équation corde/arc = sin(alpha/2) / (alpha/2) ne peut être résolue directement. L'utilisation de la "Méthode de Newton" pour trouver le 0 d'une fonction permet d'obtenir un résultat par approximations successives. On peut faire ça en LISP (voir ici et là). Tu peux télécharger Arcs.zip; Il contient un fichier "Memo arc.pdf" avec différentes formules pour trouver une dimension dans un arc quand on en connait deux, et explique sommairement la "méthode de Newton" utilisée dans le cas que tu soumets. Il contient aussi une petite feuille de calcul Excel qui permet de calculer toutes les dimensions dans un arc à partir de deux connues.
  21. (gile)

    donnée "nentsel"

    Salut, Avec ssget, on n'obtient que les blocs. Pour accéder aux attributs, il faut traiter tous les blocs sélectionnés un par un en recherchant les attributs. (if (setq ss (ssget '((0 . "INSERT") (2 . "TCPOINT")))) (repeat (setq i (sslength ss)) (setq blk (ssname ss (setq i (1- i)))) (if (not (distof (getpropertyvalue blk "ALT"))) (entdel blk) ) ) )
  22. Comme décris plus haut, le LISP remplace les "rectangles" (polylignes fermées rectangulaires) par un bloc qui, en l'état n'est qu'un rectangle.
  23. (gile)

    Surfacique vers solide

    Salut, lecrabe m'a transféré les fichiers. On peut faire ça avec le LISP F2S ou la version .NET Face2Solid. Dans un dessin vierge on insère, en décomposant le bloc, la couche inférieure sous forme de faces 3d, on extrude, en les unissant, les faces 3d avec les routines sus-citées tout en spécifiant une distance confortable (50 par exemple) sous le point le plus bas. On fait de même avec les faces de la couche supérieure. Puis on soustrait le premier solide du second.
  24. Salut Steven, Le lien sur cette page est à jour et fonctionne sur AutoCAD 2013 à 2018.
  25. Tu fais tout comme c'est écrit dans le premier message de cette page. Tu extraits l'installeur du zip, tu lances l'installeur et c'est tout. Ensuite, tu as une juste nouvelle variable système dans AutoCAD (LAYLOCKSEL) qui gère la "sélectionnabilité" des objets sur les calques verrouillé : Commande: LAYLOCKSEL Entrez une nouvelle valeur pour LAYLOCKSEL <Inactif>: tu entres a (pour Actif) et les objets sur les calques ne seront plus sélectionnables. Tu entres i (pour Inactif) et les objets sur les calques verrouillés seront à nouveaux sélectionnables.
×
×
  • 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é