-
Compteur de contenus
5 029 -
Inscription
-
Dernière visite
-
Jours gagnés
56
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bonuscad
-
Encadrement de nombres
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
J'ai trouvé une discussion similaire, en plus c'est moi qui l'avais lancé. :(rires forts): Sauf que ça concernait les entiers, je vais voir si je peux remanier le code... -
Bonjour, J'ai fais quelques recherches sur le site, mais je n'ai pas trouvé. Ce n'est pas impossible que cela est été déjà évoqué. Ma problématique: J'ai une liste de nombre réel (pas forcément dans un ordre croissant ou décroissant) du style: '(7090.35 6081.96 5049.83 4031.35 3030.6 2028.35 1021.77 0.0 23926.9 23109.3 22129.8 21145.7 20131.1 19128.6 18127.2 17130.9 16131.5 15110.7 14088.1 13104.4 12085.2 11084.0 10088.8 9090.96 8092.54) De cette liste je voudrais extraire le nombre immédiatement inférieur ET supérieur. Par exemple avec 2556.63 comme valeur de départ obtenir l'encadrement '(2028.35 3030.6) ou même leur position (exploitable par nth) soit '(5 4) Si vous avez un lien à me proposer ou une idée! J'ai pas trop le temps pour faire un challenge (mais je saurais m'y résoudre à défaut de proposition) Merci à ceux qui me feront gagner du temps. NB: Jamais de nombre négatif dans ma liste, zéro peut être présent; la plus part du temps mais pas toujours.
-
Bonjour, 1 Une utilisation extrême des drones: autre que militaire... Un drone filme la fureur du volcan Bardarbunga en Islande 2 Je veux la même pour Autocad pour imprimer mes MNT... Imprimante 3D solaire Pas de matériaux plastiques ou autre résines ou alliages, mais de la silice (du sable) pour constituer vos objets 3D. La vitrification par le soleil et non par un laser. J'crois bien que je vais m'installer dans le désert moi! :(rires forts):
-
Compilation de .QRY en un seul LiSP
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
NB: Tu pourrais utiliser un (foreach) sur une liste au lieu de répéter x fois la même chose. Je te donne un exemple (qui ne sera pas applicable tel quel, mais te montrera la syntaxe) (setq lst_all '("NORD" "CENTRE" "SUD OUEST" "SUD EST") ) (defun localize_commune (nam_com dwg_id / ) (ade_qryclear) (ade_qrysetaltprop nil) (ade_qrysettype "preview") (ade_qrydefine '("" "" "" "Property" ("layer" "=" "PR,PR_LIMITES,PR-LIMITES")"")) (ade_qrydefine (list "AND" "" "" "Data" (list "objdata" "POINTS-ROUTIERS.GROUPEMENT_PR" "=" nam_com)"")) (ade_qrydefine '("OR" "" "" "Property" ("layer" "=" "Reseau d_Interet Economique et Touristique,Reseau d_Interet Local,Reseau Ossature")"")) (ade_qrydefine (list "AND" "" "" "Data" (list "objdata" "VOIES-DEPARTEMENTALES.GROUPEMENT_SECTION" "=" nam_com)"")) (ade_qryexecute) ) (defun C:test_groupement ( / ade_cmddia_before_qry id_dwg ade_tmpprefval) (setq ade_cmddia_before_qry (getvar "cmddia")) (setvar "cmddia" 0) (mapcar 'ade_dwgdeactivate (ade_dslist)) (setq id_dwg (ade_dsattach "SIG:\\L93-BD_RESEAU-07\\XRef\\NewL93_RGF Reseau Routier aux limites.dwg")) (setq ade_tmpprefval (ade_prefgetval "ActivateDwgsOnAttach")) (ade_prefsetval "ActivateDwgsOnAttach" ade_tmpprefval) (foreach n lst_all (localize_commune n id_dwg) (print n) (getkword "\nGroupement suivant") ) (ade_qrygetentlist id_dwg) (ade_dsdetach id_dwg) (setvar "cmddia" ade_cmddia_before_qry) (prin1) ) A toi de construire la liste lst_all comme il convient -
Compilation de .QRY en un seul LiSP
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Bonjour, Pour avoir fais quelques requêtes en lisp, je remarque qu'elles sont montés de la même façon que toi. La seule chose qui différencie et que j'utilise la fonction (ade_dsattach) pour attacher le dessin sur lequel je veux faire une requête: ceci en début de code. (setq dwg_id (ade_dsattach "ALIAS:\\Chemin\\fichier.dwg")) ainsi que la fonction: après un appel à (ade_qryexecute) (ade_qrygetentlist id_dwg) pour avoir toutes les entités correspondant à ma requête. et (ade_dsdetach id_dwg) pour détacher le fichier nécessaire lorsque la requête a été effectuée. J'espère que ces quelques observations vont te mettre sur la voie. -
RALENTISSEMENT AVEC outil copier les propriétés
bonuscad a répondu à un(e) sujet de metvlux dans AutoCAD LT 2015
As tu appliquer les patchs qui ont été diffusé par Autodesk depuis ta nouvelle installation? Il se peut que ceux-ci corrigent des dysfonctionnements de la palette de propriété... J'ai eu assisté avec des versions précédentes à des problèmes similaires, ralentissement, certaines propriétés n'étaient simplement pas affichées. Le service Pack avait résolu le problème. -
C'est bien, ça fonctionne Une remarque sur les cond pour obtenir tes 4 coins, ceci me semblerai plus simple (setq c1 (list (min (car p1) (car p2)) (max (cadr p1) (cadr p2))) c2 (list (max (car p1) (car p2)) (max (cadr p1) (cadr p2))) c3 (list (min (car p1) (car p2)) (min (cadr p1) (cadr p2))) c4 (list (max (car p1) (car p2)) (min (cadr p1) (cadr p2))) ) pense à utiliser la fonction (initget) avec les bits de contrôle qui vont bien, juste avant l'usage de (getxxxx) Regarde l'aide pour plus d'info. Si on veut utiliser ton code dans un SCU pivoté, c'est pas vraiment ça, au niveau visuel (la fonction getcorner est ennuyeuse dans ce cas; le rectangle est symbolisé depuis le SCG)
-
Salut, Dans un premier temps regarder si la variable DRAGMODE est bien fixé à 2
-
Enlever formatage automatique en colonnes dans Mtext
bonuscad a répondu à un(e) sujet de Karmelie dans AutoCAD 2011
Bonjour, Pour les colonnes je pense à la variable MTEXTCOLUMN à mettre à 0. Variable à fixer éventuellement dans le gabarit DWT... -
Autre solution que la capture écran, qui donne une résolution faible, et de passer par le gestionnaire de traçage et d'installer un format de fichier raster en prenant le modèle: JFIF groupe JPEG indépendant (compression JPEG) En paramétrant correctement ton format de feuille en pixel (faire une conversion métrique en pixel de ton format de dalle) tu pourra scripter les sorties traceur et obtenir la conversion des fichiers. Le traçage risque d'être long (très long...) tu passes d'un format très compressé ECW à un autre format beaucoup moins compressé. C'est pas évident, mais faisable. On pourrait même envisager de faire un lisp/script pour générer le fichier jpgw en même temps.
-
Bonjour Je lance juste un avertissement concernant la purge des dictionnaire AEC Sur AutoCadMap Jusqu'à maintenant j'utilisais un lisp de (gile) pour purger ceux-ci (en voici la copie) ;; RemoveAEC (gile) ;; Supprime tous les dictionnaires AEC du dessin (defun c:RemoveAEC () (foreach p (entget (namedobjdict)) (if (and (= 3 (car p)) (wcmatch (cdr p) "AEC*") ) (dictremove (namedobjdict) (cdr p)) ) ) (princ) ) Avec celui-ci, nickel! , je me débarrasse de cette base AEC Mais (gile) avait aussi créé un lisp postérieur au précédent(dont je met aussi la copie) ;; gc:GetDictEntries ;; Retourne la liste des entrées du dictionnaire ;; sous forme de paires pointées (Nom . ENAME) ;; ;; Argument : dict le dictionnaire (ENAME ou liste DXF) (defun gc:GetDictEntries (dict / result) (and (= (type dict) 'ENAME) (setq dict (entget dict))) (while (setq dict (vl-member-if (function (lambda (x) (= (car x) 3))) (cdr dict))) (setq result (cons (cons (cdar dict) (cdadr dict)) result)) ) (reverse result) ) ;; Supprime tous les dictionnaire AEC* (defun removeAEC1 () (foreach dict (gc:GetDictEntries (namedobjdict)) (if (wcmatch (car dict) "*AEC*") (foreach entry (gc:GetDictEntries (cdr dict)) (entdel (cdr entry)) ) ;supprime dans le dictionnaire (entdel (cdr dict)) );fin if ) (princ) );fin defun ;; Purge les applications enregistrées (defun purgereg () (command "_purge" "_reg" "*" "_no") (princ) ) (defun c:removeAEC () (prompt "\nATTENTION ce programme va SUPPRIMER tous les objets AEC de ce dessin ") (initget "Oui Non") (setq rep (getkword "\nContinuer à supprimer ? [Oui/Non] <Oui>: ")) (cond ((or (not rep) (= "Oui" rep)) (removeAEC1) (purgereg) ) );fin cond );fin defun (prompt "\nprogramme chargé, saisir: removeAEC pour lancer.") Avec ce second si tout semble se passer correctement; les dictionnaire sont aussi purgés, j'ai eu la désagréable surprise de perdre TOUTES mes données d'objet de Map (OD). Ce que j'ai constaté: - Utilisation de la routine Ok! - Vérification de l’existence des OD Ok! - Enregistrements du fichier puis fermeture de celui-ci (rien d'anormal, aucun message ou autre) - Réouverture de celui et là le drame PLUS AUCUNES données d'objet. Donc méfiance avec la seconde mouture, à moins que (gile) ait le temps d'identifier le problème... sachant que la première version n'a pas cet inconvénient. Moi je comprend pas la nuance entre les deux (j'ai du mal avec les dictionnaires) et cela ne vient pas du "purge" "reg" car je le fais manuellement avec la 1ère version sans souci. Un homme averti en vaut deux :P
-
Bonjour, Je ne sais pas si je vais être d'une utilité quelconque, mais il y avait eu cette discussion sous map 2011
-
Alors pour plus de liberté de sélection, juste la dernière partie revue. (conserver les fonctions de Lee Mac et (gile)) (defun C:cumul_blkdyn ( / js param cumul n ent vla_blk lst_param val) (or (setq js (ssget "_I" '((0 . "INSERT")))) (setq js (ssget "_P"'((0 . "INSERT")))) ) (cond (js (sssetfirst nil js) (initget "Existant Nouveau _Existent New") (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New") (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget '((0 . "INSERT"))))) ) ) (T (setq js (ssget '((0 . "INSERT"))))) ) (setq cumul 0.0) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n)))) (cond ((wcmatch (cdr (assoc 2 (entget ent))) "`*U*") (setq vla_blk (vlax-ename->vla-object ent)) (setq lst_param (mapcar 'car (LM:getdynprops vla_blk))) (if (not param) (setq param (listbox "Paramètre dynamique" "Choisir un paramètre" (mapcar 'cons lst_param lst_param) 1)) ) (setq val (LM:getdynpropvalue vla_blk param)) (cond ((numberp val) (setq cumul (+ val cumul)) (princ (strcat "\n" (rtos val))) ) (T (princ "\nLe paramètre sélectionné n'a pas une valeur numérique.")) ) ) ) ) (princ (strcat "\nCumulé total: " (rtos cumul))) ) ) (prin1) )
-
Bonjour, Je ne suis pas un grand utilisateur des blocs dynamiques, en m'appuyant sur les codes de Lee Mac et de (gile), voici ce que j'ai pondu... En espérant que cela puisse te convenir ; str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;; ListBox (gile) ;; Boite de dialogue permettant un ou plusieurs choix dans une liste ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil pour aucun ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; flag : 0 = liste déroulante ;; 1 = liste choix unique ;; 2 = liste choix multipes ;; ;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2) ;; ;; Exemple d'utilisation ;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1) (defun ListBox (title msg keylab flag / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ListBox:dialog{label=\"" title "\";") file ) (if (and msg (/= msg "")) (write-line (strcat ":text{label=\"" msg "\";}") file) ) (write-line (cond ((= 0 flag) "spacer;:popup_list{key=\"lst\";") ((= 1 flag) "spacer;:list_box{key=\"lst\";") (T "spacer;:list_box{key=\"lst\";multiple_select=true;") ) file ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ListBox" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list (mapcar 'cdr keylab)) (end_list) (action_tile "accept" "(or (= (get_tile \"lst\") \"\") (if (= 2 flag) (progn (foreach n (str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice)) ) (setq choice (reverse choice)) ) (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab))) ) ) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) ;; Get Dynamic Block Properties - Lee Mac ;; Returns an association list of Dynamic Block properties & values. ;; blk - [vla] VLA Dynamic Block Reference object ;; Returns: [lst] Association list of ((<prop> . <value>) ... ) (defun LM:getdynprops ( blk ) (mapcar '(lambda ( x ) (cons (vla-get-propertyname x) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties) ) ) ;; Get Dynamic Block Property Value - Lee Mac ;; Returns the value of a Dynamic Block property (if present) ;; blk - [vla] VLA Dynamic Block Reference object ;; prp - [str] Dynamic Block property name (case-insensitive) (defun LM:getdynpropvalue ( blk prp ) (setq prp (strcase prp)) (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value))) (vlax-invoke blk 'getdynamicblockproperties) ) ) (defun C:cumul_blkdyn ( / js param cumul n ent vla_blk lst_param ) (setq js (ssget "_X" '((0 . "INSERT"))) param nil cumul 0.0) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n)))) (cond ((wcmatch (cdr (assoc 2 (entget ent))) "`*U*") (setq vla_blk (vlax-ename->vla-object ent)) (setq lst_param (mapcar 'car (LM:getdynprops vla_blk))) (if (not param) (setq param (listbox "Paramètre dynamique" "Choisir un paramètre" (mapcar 'cons lst_param lst_param) 1)) ) (setq val (LM:getdynpropvalue vla_blk param)) (cond ((numberp val) (setq cumul (+ val cumul)) (princ (strcat "\n" (rtos val))) ) (T (princ "\nLe paramètre sélectionné n'a pas une valeur numérique.")) ) ) ) ) (princ (strcat "\nCumulé total: " (rtos cumul))) ) ) (prin1) )
-
Salut Isole le calque "PT_ID" et fait une extraction sur les textes de ce calque (le point d'insertion du texte est le même que l'insertion du bloc "CROSS") Certain points n'ont pas de matricule, à toi de voir si tu veux les filtrer lors de l'extraction, c'est possible: Click-droit dans une cellule de la colonne "Valeur" et choisir "Option de filtre..."
-
Transformation de champ
bonuscad a répondu à un(e) sujet de bavmorda1 dans Personnalisation, macros, DIESEL
Bonjour, As tu essayé d'insérer le bloc en mode décomposé? Peut être que cela solutionnerai le problème. A priori cela a l'air correct, mais l'inconvénient est que cela ne fonctionnera que pour un nom de fichier bien spécifique (nombre de caractères à extraire), c'est ce que je reproche à cette syntaxe (bien qu'elle soit l'unique solution pour un champ). Donc à part de décomposer le bloc (je ne comprends pas d'ailleurs pourquoi tu passe par un bloc?), pas vraiment d'autres solutions. -
Pour être sur que la fonction est chargée on peut placer la ligne (arxload "leaderex.arx") en tout début de fichier (comme on peut le faire avec "vl-load") Je pense qu'après cela devrait fonctionner...
-
retour chariot pour inserer un texte en mode script
bonuscad a répondu à un(e) sujet de alf_ze_cat dans Personnalisation, macros, DIESEL
Bonjour, La commande _TEXT ne fait pas de texte multiligne. La commande _DTEXT simule des retours de lignes, mais elle n'est pas utilisable en script. Elle donne le même résultat que la commande _TEXT utilisé successivement: c'est à dire que chaque ligne est une entité texte distincte. Pour écrire un texte avec retour de ligne (avec du texte simple ligne), je ferais un script de ce style (dans un fichier .SCR): _.-text 304.3,0.5 1 100 1000 _.-text 500 _.-text 250 -
Boite de dialogue HACHURES
bonuscad a répondu à un(e) sujet de yusukens82 dans Pour aller plus loin en LISP
Bonjour, Le lisp désactive automatiquement la boite de dialogue: (command "HACHURES") fera la même chose que -HACHURES tapé en ligne de commande. Par les boutons en macro, tu peut contourner le problème si c'est la DERNIERE commande appelée. Donc en collant la syntaxe suivante dans un bouton, ça fonctionne... ^C^C_.SETVAR;HPLAYER;.;_.SETVAR;HPCOLOR;_BYLAYER;_.HATCH; -
Insertion de blocs à partir d'un CSV
bonuscad a répondu à un(e) sujet de zebzeb dans LISP et Visual LISP
Bravo, On a une certaine satisfaction quand on y arrive de par soi même ;) Et en plus on progresse plus vite dans l'apprentissage du langage. En dernier point: On a envie d'aider les personnes qui s'investissent... Bonne continuation. -
Bonjour, Est ce que avec ceci tu observes le même problème?... (vl-load-com) (defun c:dim_cumul ( / js n ename cumul) (princ "\nSélectionner les cotes pour avoir le cumul.") (setq js (ssget '((0 . "DIMENSION")))) (cond (js (setq cumul 0.0) (repeat (setq n (sslength js)) (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n))))) (if (vlax-property-available-p ename 'Measurement) (setq cumul (+ (vlax-get ename 'Measurement) cumul)) ) ) ) ) (princ (strcat "\nLe total cumulé des cotes sélectionnées est de " (rtos cumul))) (prin1) )
-
Bonjour, En faisant une recherche sur cadxp avec "cumul_length" tu trouveras une réponse que j'ai proposé. Il y en a plein d'autres... Tu peux utiliser d'abord QSELECT ou FILTER pour faire une sélection filtrée plus ou moins fine (étape non obligatoire), et une fois les objets gripés lancer la commande CUMUL_LENGTH pour l'appliquer à la sélection.
-
Insertion de blocs à partir d'un CSV
bonuscad a répondu à un(e) sujet de zebzeb dans LISP et Visual LISP
Bonjour, Juste à la lecture (pas de test) de ton code, deux choses me chagrine... (while (/= lig nil) lig est une variable qui n'est pas définie, donc déjà ton code n'exécutera jamais ta boucle while. (setq pt (Getpoint (strcat "\nPoint d'insertion: " (nth x DataL)))) (setq x 2) Pareil tu définis ta variable x après l'usage de celle-ci, donc à la première évaluation x est à nil (donc (nth x DataL) va échouer)ou une valeur erronée sera retourné car tes variables ne sont pas définie en local. (defun c:go (/) devrait être (defun c:go (/ dataCSV openCSV etc...) Et dernier point tu ne ferme pas le fichier CSV ouvert par (close openCSV) Peut être qu'avec ces incohérences corrigées, cela fonctionnera... NB: Pour info (nth 0 liste) renvoie le 1er élément de la liste, donc (nth 2 DataL) renvoie le 3eme élément. -
[Résolu] Mode Ortho 90 et 45° possible ?
bonuscad a répondu à un(e) sujet de Titi95 dans AutoCAD 2015
Bonjour, A ma connaissance de façon native, non! Mais tu peux passer SNAPANG à 45° et utiliser le mode ORTHO pour avoir ce complément tant désiré de manière ponctuelle... -
Pourquoi le faire dans acadiso.lin. Je te conseille (surtout en phase de test) de le faire dans un fichier indépendant. Tu copie-colle la définition dans le bloc-note et tu l'enregistre sous par exemple "T2.lin" C'est ce fichier que tu devra aller chercher lors du chargement au lieu de prendre le acadiso.lin par défaut.
