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,

    je pense qu'il est grandement temps de faire quelque chose pour éviter que des robots n'arrivent à s'inscrire sur CADxp pour innonder le site de spams.

  2. Je ne pense pas, sinon EATT ne fonctionnerait pas non plus. Le problème semble venir de la lecture du fichier Excel, regarde dans le gestionnaire des tâches qu'il n'y ait plus de processus Excel actif ; s'il en reste un, termine le.
  3. (gile)

    Solide vers maillage ?

    Je viens de ressortir la routine SURFDEV pour faire un test mais ça ne fonctionne pas parce que les maillages générés par SURFREG ne sont plus du type POLYLINE mais de type MESH (depuis 2013 il me semble). j'ai donc mis à jour et renommé la routine MeshDev pour qu'elle fonctionne avec ce type de maillage.
  4. Je m'aperçois aujourd'hui que ce LISP ne fonctionne pas avec les nouvelles versions. En effet, la commande SURFREGL (_RULESURF) ne génère plus des maillages de type POLYLINE mais des maillages de type MESH. Voici donc une nouvelle version (renommée MESHDEV) pour développer les maillages créés avec SURFREG depuis 2013 il me semble, tout ce qui a tété dit précédemment concernant la validité et la précision des maillages reste valable. (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) ;; gc:massoc ;; Retourne la liste de toutes les valeurs pour le code spécifié dans une liste d'association ;; ;; Arguments ;; key : la clé à rechercher dans la liste ;; alst : une liste d'association (defun gc:massoc (key alst) (if (setq alst (member (assoc key alst) alst)) (cons (cdar alst) (gc:massoc key (cdr alst))) ) ) ;; gc:acos ;; Retourne l'arc cosinus du nombre ;; ;; Argument ;; n : le cosinus de l'angle (defun gc:acos (n) (cond ((equal n 1. 1e-9) 0.) ((equal n -1. 1e-9) pi) ((< -1. n 1.) (atan (sqrt (- 1. (expt n 2))) n) ) ) ) ;; gc:breakAt ;; Retourne une liste de deux sous listes, ;; la première contenant les n premiers éléments, la seconde les éléments restants ;; ;; Arguments ;; n : le nombre d'éléments pour la première sous liste ;; l : une liste (defun gc:breakAt (n l / r) (while (and l (< 0 n)) (setq r (cons (car l) r) l (cdr l) n (1- n) ) ) (list (reverse r) l) ) (defun c:MeshDev (/ *error* ent elst lst1 lst2 rslt1 rslt2 n1 n2) (defun *error* (msg) (and msg (/= msg "Fonction annulée") (prompt (strcat "\nErreur: " msg)) ) (and osm (setvar 'osmode osm)) (and cmd (setvar 'cmdecho cmd)) (and del (setvar 'delobj del)) (vla-EndUndoMark *acdoc*) (princ) ) (defun sqr (x) (* x x)) (defun third_pt (pt1 pt2 dist1 dist2 /) (cond ((zerop dist1) pt1) ((zerop dist2) pt2) (T (polar pt1 (+ (angle pt1 pt2) (gc:acos (/ (+ (sqr (distance pt1 pt2)) (sqr dist1) (- (sqr dist2))) (* 2 (distance pt1 pt2) dist1) ) ) ) dist1 ) ) ) ) (defun index_name (tbl prfx / nom compt) (setq nom (strcat prfx "1") compt 1 ) (while (tblsearch tbl nom) (setq compt (1+ compt) nom (strcat prfx (itoa compt)) ) ) nom ) (while (not (and (setq ent (car (entsel "\Sélectionnez la surface à développer: ")) ) (= (cdr (assoc 0 (setq elst (entget ent)))) "MESH") ) ) ) (mapcar 'set '(lst1 lst2) (gc:breakAt (/ (cdr (assoc 92 elst)) 2) (gc:massoc 10 elst)) ) (if (equal (car lst1) (car lst2) 1e-9) (setq rslt1 (cons '(0 0 0) rslt1) rslt2 (cons '(0 0 0) rslt2) rslt1 (cons (polar '(0 0 0) (angle (car lst1) (cadr lst1)) (distance (car lst1) (cadr lst1)) ) rslt1 ) rslt2 (cons (third_pt (car rslt1) '(0 0 0) (distance (cadr lst1) (cadr lst2)) (distance (car lst2) (cadr lst2)) ) rslt2 ) lst1 (cdr lst1) lst2 (cdr lst2) ) (setq rslt1 (cons '(0 0 0) rslt1) rslt2 (cons (polar '(0 0 0) (angle (car lst1) (car lst2)) (distance (car lst1) (car lst2)) ) rslt2 ) ) ) (setq n1 0 n2 0 ) (repeat (1- (length lst1)) (setq rslt1 (cons (third_pt (car rslt1) (car rslt2) (distance (nth n1 lst1) (nth (setq n1 (1+ n1)) lst1) ) (distance (nth n2 lst2) (nth n1 lst1)) ) rslt1 ) ) (if (equal (nth n1 lst1) (nth (1+ n2) lst2) 1e-9) (setq rslt2 (cons (car rslt1) rslt2) n2 (1+ n2) ) (setq rslt2 (cons (third_pt (car rslt1) (car rslt2) (distance (nth n1 lst1) (nth (1+ n2) lst2)) (distance (nth n2 lst2) (nth (setq n2 (1+ n2)) lst2) ) ) rslt2 ) ) ) ) (vla-StartUndoMark *acdoc*) (setq osm (getvar 'osmode) cmd (getvar 'cmdecho) del (getvar 'delobj) ) (setvar 'cmdecho 0) (setvar 'osmode 0) (setvar 'delobj 1) (setq ss (ssadd)) (foreach l (list rslt1 rslt2) (if (not (vl-every '(lambda (pt) (equal pt (car l) 1e-9)) l) ) (progn (command "_.spline") (mapcar 'command l) (command "" "" "") (ssadd (entlast) ss) ) ) ) (foreach fun (list 'car 'last) (if (not (equal (apply fun (list rslt1)) (apply fun (list rslt2)) 1e-9 ) ) (progn (command "_.line" (apply fun (list rslt1)) (apply fun (list rslt2)) "" ) (ssadd (entlast) ss) ) ) ) (setq ind (index_name "BLOCK" "MeshDev_")) (command "_.block" ind '(0 0 0) ss "") (setvar "OSMODE" osm) (command "_.insert" ind "_scale" 1) (princ "\nSpécifiez le point d'insertion: ") (command pause) (princ (strcat "\nSpécifiez l'angle de rotation <" (angtos 0) ">: " ) ) (command pause) (setq bloc (entlast)) (initget "Oui Non") (if (= "Oui" (getkword "\nEffectuer un miroir ? [Oui/Non] < Non >: ") ) (progn (command "_mirror" bloc "" (setq pt (cdr (assoc 10 (entget bloc)))) "_non" (polar pt 0.0 1) "_yes" "_.explode" bloc "_.block" ind "_yes" pt "_previous" "" ) (command "_.insert" ind "_scale" 1) (princ "\nSpécifiez le point d'insertion: ") (command pause) (princ (strcat "\nSpécifiez l'angle de rotation <" (angtos 0) ">: " ) ) (command pause) ) ) (initget "Oui Non") (if (= "Oui" (getkword (strcat "\nRenommer le bloc \"" ind "\" ? [Oui/Non] < Non >: " ) ) ) (progn (initdia) (command "_.rename" "_block") (while (< 7 (getvar "CMDACTIVE")) (command pause) ) (command) ) ) (*error* nil) )
  5. (gile)

    Solide vers maillage ?

    Salut; SURFDEV est prévue pour fonctionner avec les maillages de type "surface réglée" créés avec la commande SURFREGL (_RULESURF). Modéliser un "rond-carré" excentré avec cette commande n'est pas aussi simple que de faire une surface ou un solide avec LISSAGE. Il faut décomposer ton rectangle en 4 lignes, mener une ligne depuis chaque sommet vers la perpendiculaire au cercle pour déterminer les points auxquels il faut couper le cercle (ou dessiner 4 arcs) et enfin faire 4 surfaces réglées (penser à la valeur de SURFTAB1 qui déterminera la précision du développé).
  6. Salut, On ne peut pas utiliser le nom effectif dans un filtre de sélection, il faut faire un traitement post sélection Voir un vieux sujet ici ou une réponse plus récente là.
  7. Salut, L'opérateur = sert à comparer uniquement des nombres et des chaînes. Pour comparer des listes, il faut utiliser : equal.
  8. Essaye de décrire le plus clairement ce que tu cherches à faire parce que là c'est toujours très obscur. (getpropertyvalue pline "Vertices" 0 "Position")comme (cdr (assoc 10 (entget (pline))))renvoient les coordonnées du premier sommet (0) de la polyline (pline) définies dans le SCO de la polyligne. Le SCO est identique au SCG si la polyligne est dessinée sur le plan XY du SCG. Si tu veux avoir les coordonnées des sommets définies dans le SCU courant (comme dans le palette des propriétés), il faut utiliser la fonction trans : (trans (getpropertyvalue pline "Vertices" 0 "Position") pline 1)ou (trans (cdr (assoc 10 (entget (pline)))) pline 1)
  9. Difficile à dire sans voir au moins le résultat de dumpallproperties ni même connaître le type d'entité concernée...
  10. J'arrête de supprimer les spams et de signaler les nouveaux inscrits qui le postent. Ça fait plus d'une semaine qu'avec d'autres nous essayons de juguler cette invasion en tachant de nettoyer le site pour qu'il reste utilisable par les utilisateurs. Aujourd'hui il semble bien que l'administrateur / propriétaire de CADxp n'ait toujours rien fait pour éviter les inscriptions de robots (alors que certains "vrais utilisateurs" continuent à avoir du mal à s'inscrire). Les efforts que j'ai pu faire, avec les moyens dont je dispose, pour essayer de le maintenir ce site sont uniquement motivés par un désir de ne pas voir disparaître cette énorme base connaissance. Mais ce site a une valeur marchande (Patrick l'avait vendu) et j'en ai assez de faire le ménage pour un propriétaire qui semble s'en foutre, alors soit, que cette vitrine de CAD magazine devienne une plateforme pour les spameurs de tous types et peut-être qu'il finira par réagir...
  11. Salut, Il s'agit d'une petite* bibliothèque de routines comme beaucoup d'entre nous ont pu en écrire pour étendre les fonctions natives. À mon avis, on est bien loin de ce que qu'avait pû faire Reini Urban en son temps ou de ce qu'offre Lee Mac aujourd'hui, ou même des modestes bibliothèques que j'offre en bas de cette page (Le coin des lispeurs). Néanmoins, il est toujours intéressant de lire ce type de code ne serait-ce que pour voir le type de fonction définies et la façon dont elle sont implémentées. * destine à grossir d'après ce que dit l'auteur.
  12. Salut, Peux tu décrire les circonstances plus en détail : - dans quel répertoire enregistre-tu le fichier de sortie ? - quelles modifications fais-tu dans les attributs ? - fermes-tu bien le fichier Excel avant de faire l'importation ?
  13. As-tu essayé en désinstallant proprement via le panneau de configuration avant de ré-installer ? Sinon, il y a toujours la possibilité de modifier le fichier PackageContents.xml dans : "%appdata%\Autodesk\ApplicationPlugins\SelectiveAttSync.bundle" en remplaçant : SeriesMax="R22.0" par : SeriesMax="R23.1"
  14. J'ai mis à jour l'installeur pour que le programme soit compatible jusqu'à AutoCAD 2020.
  15. Salut, Merci de préciser sur quelle version d'AutoCAD la commande ne fonctionne pas.
  16. Salut, Il faut débloquer le ZIP : clic droit > Propriétés > onglet Général > Débloquer
  17. Pour les paramètres d'inversion, la valeur est 1 ou 0.
  18. Dans ce genre de période, inutile de signaler, nous passons régulièrement pour nettoyer ce qui ne l'a pas déjà été. J'ouvre toujours CADxp par la page : "Contenu actif durant les dernières 24 heures".
  19. Salut, Tu peux définir un nouveau SCU à l'altitude désirée et la polyligne sera dessinée sur le plan XY de ce SCU. Tu peux aussi modifier les valeurs des variables système OSNAPZ et ELEVATION avant de dessiner la polyligne. Dans les deux cas, n'oublie pas de restaurer les valeurs initiales.
  20. Bien sûr que oui. On comapare les nombre réels en utilisant tous les chiffres significatifs (environ 15 sans compter les 0 au début ou à la fin). Essaye: (< 37.20000000000002 37.20000000000001) (< 37.20000000000002 37.20000000000003) Si tu veux comparer des nombre arrondis, il faut les arrondir dans les comparaisons de la fonction de tri.
  21. Salut, Je te propose d'extraire une fonction de ta commande, fonction qui renvoie un jeu de sélection (ou nil). Tu peux utiliser cette fonction directement en ligne commande en réponse à une invite ou dans d'autres fonctions LISP comme dans la commande que tu essayes de faire. ;;; ;;;-------------------------------------------------- ;;;selectionner bloc par nom effectivenanme ;;;-------------------------------------------------- ;; renvoie un jeu de sélection filtré par le nom effectif du bloc source (defun ssbname (/ source namebloc selinsert i ent) (if (and (setq source (car (entsel "\nCLIQUER SUR LE BLOC DE REFERENCE : "))) (setq source (vlax-ename->vla-object source)) (= (vla-get-objectname source) "AcDbBlockReference") ) (progn (setq namebloc (vla-get-effectivename source)) (prompt "\nSELECTIONNER LES BLOCS :") (if (setq selinsert (ssget (list (cons 0 "INSERT") (cons 2 (strcat "`*U*," namebloc))))) (repeat (setq i (sslength selinsert)) (setq ent (ssname selinsert (setq i (1- i)))) (if (/= (vla-get-EffectiveName (vlax-ename->vla-object ent)) namebloc ) (ssdel ent selinsert) ) ) ) ) ) selinsert ) ;; sélectionne/grippe les blocs sélectionné dont le nom effectif correspond au bloc source (defun c:selectionner_bloc_meme_nom () (sssetfirst nil (ssbname)) (princ) )
  22. (gile)

    Entmake : Polyligne

    Salut, Regarde ici. 90: nombre de sommets (obligatoire) 43: largeur globale (optionnel, défaut = 0.0)
  23. En début de routine on stocke la valeur initiale de la variable système et on désactive l'écho des commandes : (setq oldEcho (getvar "cmdecho")) (setvar "cmdecho" 0) En fin de routine on restaure la valeur initiale de la variable système : (setvar "cmdecho" oldEcho) Le mieux d'utiliser un gestionnaire d'erreur pour garantir la restauration de la variable système au cas où une erreur survienne.
  24. Il n'y a aucun moyen de filtrer directement les blocs anonymes par leur nom (c'est pas une lapalissade ça ?). Il faut traiter le jeu de sélection a posteriori. Généralement on filtre les référence de bloc qui ont le le nom du bloc de référence ou qui sont anonymes. (ssget (list (cons 8 "INSERT") (cons 2 (strcat "`*U*," nomDuBloc))))
  25. (gile)

    LISP changement attribut

    Salut, Regarde la fonction vl-sort.
×
×
  • 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é