-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
209
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
Changement d’échelle texte multilignes
(gile) a répondu à un(e) sujet de Aleck_Ultimate dans AutoCAD 2015
Salut, Voir ce sujet récent. -
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).
-
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.
-
As-tu "débloqué" le ZIP ?
-
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).
-
RECHERCHE D'UNE ROUTINE LISP OU AUTRE
(gile) a répondu à un(e) sujet de Chris24 dans LISP et Visual LISP
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 ) ) ) ) -
Import/Export d\'attributs avec Excel
(gile) a répondu à un(e) sujet de (gile) dans ObjectARX/DBX, C++, .NET, RealDWG
Salut, Les liens sont réparés dans le premier message. -
Polyligne avec largeur personnalisable et texte centré
(gile) a répondu à un(e) sujet de Red dans LISP et Visual LISP
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) ) ) ;;... ) -
Polyligne avec largeur personnalisable et texte centré
(gile) a répondu à un(e) sujet de Red dans LISP et Visual LISP
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. -
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.
-
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.
-
RECHERCHE D'UNE ROUTINE LISP OU AUTRE
(gile) a répondu à un(e) sujet de Chris24 dans LISP et Visual LISP
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é. -
Synchronisation sélective des attributs
(gile) a répondu à un(e) sujet de (gile) dans ObjectARX/DBX, C++, .NET, RealDWG
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. -
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) )
-
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) )
-
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.
-
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.
-
SVP Routine: Selection facile des Objets Annotatifs
(gile) a répondu à un(e) sujet de lecrabe dans Routines LISP
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))) ) -
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) )
-
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.
-
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) ) ) )
-
Recomposer plusieurs blocs en même temps
(gile) a répondu à un(e) sujet de AutoKad dans LISP et Visual LISP
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. -
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.
-
Comment rendre un objtet vérouillé inselectionnable
(gile) a répondu à un(e) sujet de fiesta13310 dans AutoCAD 2016
Salut Steven, Le lien sur cette page est à jour et fonctionne sur AutoCAD 2013 à 2018. -
Comment rendre un objtet vérouillé inselectionnable
(gile) a répondu à un(e) sujet de fiesta13310 dans AutoCAD 2016
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.
