-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
208
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
Proposition d'un pense-bête pour les accès au registre Windows.
(gile) a répondu à un(e) sujet de DenisHen dans Pour aller plus loin en LISP
Salut, Voir les fonctions vlax-product-key vlax-machine-product-key vlax-user-product-key Jusqu'à AutoCAD 2012 on utilisait vlax-product-key indifféremment pour HKCU et HKLM, depuis AutoCAD 2012, il y a deux fonctions différenciées au cas ou le chemin dans HKCU soit différent de celui dans HKLM. _$ (strcat "HKEY_CURRENT_USER\\" (vlax-user-product-key)) "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\R24.3\\ACAD-7101:40C" _$ (strcat "HKEY_LOCAL_MACHINE\\" (vlax-machine-product-key)) "HKEY_LOCAL_MACHINE\\Software\\Autodesk\\AutoCAD\\R24.3\\ACAD-7101:40C" -
Le DCL est formidable, mais très ironique, en fait...
(gile) a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
Salut, Pour faire des boites dialogue comme avec VBA (voire plus), il y a ObjectDCL ou OpenDCL. -
Ris si tu veux, mais je connais un peu la programmation et l'organisation de la base de données d'un dessin AutoCAD. Le programme compte bien les référence de bloc insérées, mais pour pouvoir afficher une miniature dans un tableau, il utilise de la définition du bloc dans la table des blocs.
-
Manifestement, on ne se comprends pas. Personnellement j'ai beaucoup de mal à comprendre tes messages, mais il me semble bien que tu ne comprends pas la différence entre une définition de bloc et les références à cette définition insérées dans le dessin.
-
La miniature affichée pour les blocs dans les tableaux AutoCAD correspond à la définition du bloc, pas aux références de bloc insérées (ces dernières pouvant être insérées sur des calques de couleurs différentes).
-
Voir ce sujet, plus particulièrement la vidéo dans cette réponse.
-
Bloc suite de chiffre, suite de lettre
(gile) a répondu à un(e) sujet de sale-price dans Routines LISP
Salut, Ce n'est pas du LISP, mais ça devrait faire ce que tu veux (et probablement bien plus) : Increment. -
Comme ça ? (command "_.pedit" "_m" (ssget "_X" '((0 . "POLYLINE") (-4 . "&") (70 . 8) (410 . "Model"))) "" "_j" 0.1 "")
-
Salut, Tu peux copier cette expression LISP sur la ligne de commande, après avoir remplacé 0.1 par la "distance approximative" que tu veux. (command "_.pedit" "_m" (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8))) "" "_j" 0.1 "")
-
Incrémentation variable dans boucle while
(gile) a répondu à un(e) sujet de vitvit2000 dans Débuter en LISP
Salut, (setq i 0) ; initialisation du compteur (while condition ;; ici, le code qui modifie condition (setq i (1+ i)) ; incrémentation du compteur ) -
[RESOLU] Est-il possible de "sélectionner" les arêtes d'un objet 3D créer avec la fonction _BOX
(gile) a répondu à un(e) sujet de LElemurien dans Débuter en LISP
Salut, Voir ce sujet. -
(defun c:PTALT (/ ss i blk pt alt) (if (setq ss (ssget "_X" '((0 . "INSERT") (2 . "TCPOINT,`*U*") (410 . "Model")) ) ) (repeat (setq i (sslength ss)) (setq blk (ssname ss (setq i (1- i)))) (if (and (= (getpropertyvalue blk "BlockTableRecord/Name") "TCPOINT") (setq alt (distof (getpropertyvalue blk "ALT"))) (setq pt (getpropertyvalue blk "Position")) ) (setpropertyvalue blk "Position" (list (car pt) (cadr pt) alt)) ) ) ) (command-s "_attsync" "_name" "TCPOINT") (princ) )
-
La palette des propriétés affiche le nom "effectif" du bloc. Si tu entres l'expression suivante en ligne de commande et que tu sélectionnes un bloc, tu verras son nom tel qu'enregistré dans les données DXF du fichier. (cdr (assoc 2 (entget (car (entsel)))))
-
Salut, Je suppute que ton problème est un problème de sélection avec le nom du bloc (sinon, il n'y a aucune raison de ne pas pouvoir avoir un Z différent de 0 avec le bloc attaché). Quand on modifie un propriété dynamique d'un bloc, AutoCAD génère une nouvelle définition de bloc "anonyme" (nom de bloc commençant par "*U") donc si on filtre une sélection avec le nom de bloc "TCPOINT", on ne sélectionnera que les blocs dont aucune propriété dynamique n'a été modifiée. Tu devrais poster le code que tu utilises pour qu'on puisse éventuellement le modifier.
-
Garder le nom d'un objet après modification de celui-ci
(gile) a répondu à un(e) sujet de Frog dans Débuter en LISP
À moins qu'une valeur n'ait été affectée au symbole 'c:' avec setq : (setq c: ...) (ssget c:) est équivalent à (ssget nil) qui est équivalent à (ssget) Dans tout les cas cette expression propose de sélectionner des objets et renvoie un jeu de sélection (ou nil). Concernant la sélection des entités dans AutoCAD, je te recommande vivement de lire (entre autres) le chapitre 16 de Introduction à AutoLISP (sur cette page) et les sections Autolisp\Fonctions par genres\Entités graphiques et Autolisp\Fonctions par genres\Jeux de sélection sur le site da-code. -
Garder le nom d'un objet après modification de celui-ci
(gile) a répondu à un(e) sujet de Frog dans Débuter en LISP
Salut, Peux tu préciser quel logiciel utilises-tu, parce que dans AutoCAD (setq obj (ssget c:)) ne donne rien (renvoie nil). Sinon, si je comprends à peu près la demande, ce que tu appelles le "nom" serait le ENAME (nom d'entité) de l'objet. Le ENAME est un identifiant unique dans la session, il est affecté par AutoCAD (ou autre) à chaque nouvel objet créé. Il est donc impossible de le modifier. Dans ton exemple, la commande _meshsmooth crée un nouvel objet (MAILLAGE) et lui affecte un nouvel identifiant. Pour ne pas avoir à sélectionner à l'écran le nouvel objet, tu peux utiliser la fonction entlast qui revoie l'identifiant (ENAME) de la dernière entité créée. Dans ce cas, il faut stocker le ENAME renvoyé par entlast avant de lancer la décomposition et retrouver les ENAMEs des nouvelle entités créées dans une boucle while avec la fonction entnext. -
Modifier simultanément des TextMult sur l'ensemble d'un projet
(gile) a répondu à un(e) sujet de Lucas DE AMORIM dans Routines LISP
Salut, Quelques petites remarques : Il est toujours préférable de déclarer localement les variables. Tu devrais utiliser un filtre de sélection. Par ailleurs, depuis AutoCAD 2012, je préfère utiliser les fonctions getpropertyvalue et setpropertyvalue plutôt que les fonctions vla-get et vla-set (ainsi le code est compatible avec AutoCAD MAC (voir aussi la fonction dumpallproperties). (defun c:UpdateCameraNamesTest (/ oldNewNames ss i mtext pair) (setq oldNewNames '(("CAM-3-01" . "CAM-SAS-N3-01") ("CAM-3-02" . "CAM-SAS-N3-02") ("CAM-3-03" . "CAM-UVL-N3-03") ("CAM-3-04" . "CAM-SAS-N3-04") ("CAM-3-05" . "CAM-PRP-N3-05") ("CAM-3-06" . "CAM-DJT-N3-06") ("CAM-3-07" . "CAM-UHR-N3-07") ("CAM-3-08" . "CAM-PAL-N3-08") ("CAM-3-09" . "CAM-PAL-N3-09") ;; Ajoutez d'autres correspondances ici ) ) (if (setq ss (ssget "_X" '((0 . "MTEXT")))) (repeat (setq i (sslength ss)) (setq mtext (ssname ss (setq i (1- i)))) (if (setq pair (assoc (getpropertyvalue mtext "Text") oldNewNames)) (setpropertyvalue mtext "Contents" (cdr pair)) ) ) ) (princ "Mise à jour des noms des caméras effectuée.") (princ) ) -
Recuperer un réel dans une chaine
(gile) a répondu à un(e) sujet de Hey_Its_Sanka dans Débuter en LISP
Comme je sais que certains ont du mal avec la récursivité, voilà l'équivalent avec une boucle while (defun miracle (str / lst res break dot) (setq lst (vl-string->list str)) (while (and lst (not break)) (cond ((< 47 (car lst) 58) (setq res (cons (car lst) res) lst (cdr lst) ) ) ((= 46 (car lst)) (if dot (setq break T) (if res (setq res (cons 46 res) lst (cdr lst) dot T ) (setq lst (cdr lst)) ) ) ) (T (if res (setq break T) (setq lst (cdr lst)) ) ) ) ) (distof (vl-list->string (reverse res))) ) -
Recuperer un réel dans une chaine
(gile) a répondu à un(e) sujet de Hey_Its_Sanka dans Débuter en LISP
La première solution avec les expressions régulières illustre assez bien la blague : "Certaines personnes, lorsqu'elles sont confrontées à un problème, se disent "Je sais, je vais utiliser des expressions régulières". Maintenant, elles ont deux problèmes." Je vais donc plutôt essayer d'expliquer comment fonctionne la seconde (que j'ai modifiée). Tout d'abord, parce que LISP est basé sur les listes, on traiter le problème en utilisant une liste de caractères (nombres entiers) plutôt qu'une chaîne de caractères. La fonction vl-string->list convertit une chaine de caractère en liste d'entiers (les codes ASCII des caractères). La fonction vl-list->string permettra de faire la conversion inverse du résultat. Pour traiter la liste, on utilise une fonction récursive qui prend en argument la liste de caractères et un drapeau qui indique si aucun chiffre n'a encore été trouvé (0), un ou plusieurs chiffres ont été trouvés (1), un point (séparateur décimal) a été trouvé après des chiffres (1 | 2 = 3). Qui dit fonction récursive, dit condition d'arrêt. Dans ce cas deux conditions peuvent être rencontrées : la liste est vide ou un caractère non numérique est trouvé alors que le drapeau est supérieur à 0. Pour ces deux conditions la fonction revoie nil. La fonction parcourt la liste élément par élément en constituant la liste qui sera renvoyée avec uniquement des chiffres et, éventuellement un point. Exemple avec une chaîne simple : "ht=12.5m". ;; Premier appel (premier caractère = 'h') (loop (104 116 61 49 50 46 53 109) 0) ;; Second appel (second caractère = 't') (loop (116 61 49 50 46 53 109) 0) ;; Troisième appel (troisième caractère = '=') (loop (61 49 50 46 53 109) 0) ;; Quatrième appel (quatrième caractère = '1') (loop (49 50 46 53 109) 0) ;; Cinquième appel (cinquième caractère = '2') (cons 49 (loop (50 46 53 109) 1)) ;; Sixième appel (sixième caractère = '.') (cons 49 (cons 50 (loop (46 53 109) 1))) ;; Septième appel (septième caractère = '5') (cons 49 (cons 50 (cons 46 (loop (53 109) 3)))) ;; Huitième appel (huitième caractère = 'm') (cons 49 (cons 50 (cons 46 (cons 53 (loop (109) 3))))) ;; Dépilement (cons 49 (cons 50 (cons 46 (cons 53 nil)))) (cons 49 (cons 50 (cons 46 '(53)))) (cons 49 (cons 50 '(46 53))) (cons 49 '(50 46 53)) (49 50 46 53) -
Recuperer un réel dans une chaine
(gile) a répondu à un(e) sujet de Hey_Its_Sanka dans Débuter en LISP
Salut, Avec les expressions régulières. (defun miracle (str) (atof (caar (RegexpExecute str "(-?\\d+(?:\\.\\d+)?)" nil nil)) ) ) Ou avec deux fonctions récursives une fonction récursive. (defun miracle (str / loop) (defun loop (lst flag) (cond ((null lst) nil) ((< 47 (car lst) 58) (cons (car lst) (loop (cdr lst) (logior flag 1))) ) ((and (= 46 (car lst)) (/= 0 flag) ) (if (= flag 1) (cons 46 (loop (cdr lst) 3)) ) ) ((= flag 0) (loop (cdr lst) 0) ) (T nil) ) ) (distof (vl-list->string (loop (vl-string->list str) 0))) ) -
Si tu veux commencer à dessiner en 2D sur le plan d'une vue, une fois la vue définie, tu lances la commande SCU (_UCS), puis l'option Vue. Par exemple, tu te place en vue Avant, tu définis le SCU, et tu peux dessiner la polyligne de contour et les 8 cercles comme dans la vue "Front" de ton image. Tu pourras ensuite extruder chacun des contours puis faire des soustractions et des unions pour arriver au solide désiré.
-
Epaisseur Polyligne 3D
(gile) a répondu à un(e) sujet de PhilBat dans ObjectARX/DBX, C++, .NET, RealDWG
Salut, Autant que je sache ni le type Polyline3d ni le type Polyline3dVertex n'ont de propriété "épaisseur". -
Récupérer les centres et les rayons de cercles
(gile) a répondu à un(e) sujet de Frog dans Routines LISP
Salut, Si tu utilises les coordonnées du groupe 10 de la liste DXF (telle que renvoyée par entget), celles-ci son définies dans le Système de Coordonnées Objet (SCO). Pour les convertir dans le Système de Coordonnées Général (SCG) avec la fonction trans. (setq centre (trans (cdr (assoc 10 (entget cercle))) cercle 0)) Tu peux aussi, plus simplement, utiliser la fonction getpropertyvalue qui renvoie directement le centre dans les coordonnées du SCG. (getpropertyvalue cercle "Center") -
Salut, ZombieFinder a trouvé 74 entités proxy (PnIDObjects). ces objets P&ID ont très certainement été générés par AutoCAD Plant 3d. Il faut que tu demandes à celui qui l'a fourni d'utiliser la commande EXPORTTOAUTOCAD pour générer un fichier sans objets P&ID (voir ce sujet). @GaelRayonB a été plus rapide.
-
Salut, Tu peux essayer le plugin ZombieKiller pour supprimer les objets et entités proxy (fais une sauvegarde du dessin avant).
