-
Compteur de contenus
1 113 -
Inscription
-
Dernière visite
-
Jours gagnés
42
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Luna
-
Garder certain objet d'une sélection
Luna a répondu à un(e) sujet de benoitlacroix dans AutoCAD 2020-2024
Perso, je ferais un CTRL+A > SELECTRAP > Référence de bloc > Tout sélectionner > Inclure dans le nouveau jeu de sélection (décocher la case "Ajouter au jeu de sélection courant") > OK > DECOMPOS... Et tu recommences jusqu'à ce que tu ais supprimé tous les blocs (sauf si tu désires en conserver quelques uns, auquel cas il faudra vérifier la sélection avant le DECOMPOS ! Mais comme tu as des blocs imbriqués, tu n'as pas d'autres choix que de faire la manip' plusieurs fois, et le nombre de manip ne dépend que du nombre de couche d'imbrication, pas du nombre de blocs ! Donc tu devras le faire juste une dizaine de fois si je comprends bien, mais cela ne devrait pas prendre plus de 2min 😉 PS: je ne l'ai pas dit mais évidemment il faut dégeler/déverrouiller tous les calques avant ^^" Bisous, Luna -
Garder certain objet d'une sélection
Luna a répondu à un(e) sujet de benoitlacroix dans AutoCAD 2020-2024
Coucou, Pourquoi "sans passer par SELECTRAP" ? Parce que c'est justement pour ce genre de chose que SELECTRAP existe...Donc je dirais la même chose que Curlygoth ^^ Bisous, Luna -
Dessiner une polyligne, mais avec un arc de cercle...
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Ma question c'est, comment gères-tu l'angle avec des paramètres dynamiques ? En clair comment "enroules"-tu la barre en fonction de l'angle et du rayon ? Bisous, Luna -
Dessiner une polyligne, mais avec un arc de cercle...
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Autrement il me semble que _zebulon avait justement réalisé un programme complet et gratuit pour le ferraillage Bref, je pense qu'il y a suffisamment d'outils existants pour faire ce que tu désires car tu n'es pas le premier à vouloir faire cela ^^" L'idée des blocs dynamiques est pas mal autrement, bien que certains points me semble difficilement faisable en utilisant un bloc dynamique (la torsion de la barre en fonction de l'angle par exemple)... Bisous, Luna -
Coucou, Serait-il possible d'avoir un .dwg du bloc ? Normalement c'est faisable.. Bisous, Luna
-
Dessiner une polyligne, mais avec un arc de cercle...
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Denis, J'ai considéré 'en' pour 'Enrobage', 'ep' pour 'épaisseur' (car le diamètre de ton acier est important dans le calcul à mes yeux !), 'a' pour 'angle', 'lg' pour 'longueur' et 'r' pour le 'rayon'. Pour l'histoire des 90° à 180° d'angle au lieu de 0° à 90°, c'est parce qu'une barre d'acier est droite à la base, donc pour obtenir un angle de 45° comme sur ton exemple, il faut tordre la barre d'acier de 135°. Donc donner les valeurs entre 90° et 180° est logique 🙂 Donc cela me semble cohérent de prendre en compte le diamètre de ta barre d'acier, car c'est lui qui va d'ailleurs déterminer ton rayon de torsion ! Et si tu considères le centre de ton acier dans les calculs, alors ton enrobage et ton rayon sont faussés justement par le manque de l'épaisseur (sur ton exemple tu montres très bien que ton acier à un diamètre, que l'enrobage est pris entre la surface du béton et l'extérieur de ton acier, et que le rayon est pris par rapport à l'intérieur de ton acier) Bisous, Luna -
Dessiner une polyligne, mais avec un arc de cercle...
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Coucou, Oki, sur le plan mathématique je résoudrais cela ainsi : A partir des données ci-dessus, je ferais ceci : En connaissant PtA tel que PtA = (Xa Ya) (setq Pt3a (list (+ Xa en ep r) (+ Ya en (/ ep 2.)))) (setq O (list (+ Xa en ep r) (+ Ya en ep r))) (setq Pt2a (polar O (+ a (/ pi 2.)) r)) (setq Pt3a (polar Pt2a a lg)) Du moins pour moi le problème peut se résoudre ainsi pour connaître Pt1a, Pt2a et Pt3a en connaissant PtA, en, ep, r, a et lg 😉 Bisous, Luna -
Dessiner une polyligne, mais avec un arc de cercle...
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Coucou, En effet tout est caché dans les bulges (code DXF 42) des polylignes. Personnellement je me suis aidé de ce cours pour mieux comprendre : https://www.afralisp.net/autolisp/tutorials/polyline-bulges-part-1.php Ensuite il me semble qu'il existe le logiciel ADFER qui permet de réaliser du ferraillage plus ou moins complexe et plutôt complet (je me souviens avoir eu une formation sur ce logiciel), si jamais cela peut répondre à tes besoin également (mais je ne connais pas les prix...donc à voir) ! Bisous, Luna -
Coucou, Cela ne pouvait-il pas simplement venir de la variable PICKFIRST ? Si elle est à 0, les options du clic-droit n'apparaissent plus..donc il faut qu'elle soit à 1 ! (désolée de n'y avoir pensé que maintenant >w<) Bisous, Luna
-
Intersection droite/cercle droite/droite
Luna a répondu à un(e) sujet de zebulon_ dans Routines LISP
Coucou, Il me semble que cela provient de la fonction (inters), qui possède un argument non-obligatoire [onseg]. Si on précise nil pour cet argument, les segments seront considérés comme étant infinis alors que si on l'omet ou différent de nil, les segments seront considérés comme finis. Donc je dirais qu'il te suffit de supprimer le nil à la fin de la fonction (inters) ? Je ne fais que supposer évidemment ^^" Bisous, Luna -
Coucou, Je n'avais jamais vu ce soucis avant, j'ai trouvé ces deux liens sur des problèmes similaires (en anglais cependant) donc cela pourra sûrement t'aider : - https://forums.autodesk.com/t5/autocad-architecture-forum/select-similar-missing-from-right-click-menu-and-cui/td-p/2639511 - https://www.freecadhelp.com/select-similar-command-missing-shortcut-menu-autocad/ Bisous, Luna
-
Routine de Préfixe - Suffixe - Nouvelle valeur pour Données D'Objets
Luna a répondu à un(e) sujet de fabcad dans Pour aller plus loin en LISP
En clair, si on veut s'assurer que les valeurs de chaque Tile soit bien récupérées à la fermeture de la boîte de dialogue via le bouton "accept", il faut définir tes variables (choix, val_ch, table_choisie, champ_choisi, ...) dans la fonction (action_tile) de ton bouton "accept" et non les définir via un (action_tile) pour chaque bouton... Donc je remplacerais (action_tile "liste_tbl" "(setq table_choisie (nth (atoi $value) liste_tbl)) (setq pos_tbl $value) (affiche)") (action_tile "liste_fields" "(setq champ_choisi (nth (atoi $value) liste_fields)) (setq pos_field $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (action_tile "valeur" "(setq val_ch $value)") (action_tile "nou" "(setq choix \"nou\")") (action_tile "pre" "(setq choix \"pre\")") (action_tile "suf" "(setq choix \"suf\")") par (action_tile "liste_tbl" "(affiche $value)") (action_tile "accept" "(accept_tile) (done_dialog)") (action_tile "cancel" "(done_dialog)") et j'ajouterais du coup la fonction (accept_tile) dans les fonctions localement déclarées comme ceci : (defun accept_tile () (setq pos_tbl (get_tile "liste_tbl") table_choisie (nth (atoi pos_tbl) liste_tbl) pos_field (get_tile "liste_fields") champ_choisi (nth (atoi pos_field) liste_fields) val_ch (get_tile "valeur") choix (cond ((= "1" (get_tile "nou")) "nou") ((= "1" (get_tile "pre")) "pre") ((= "1" (get_tile "suf")) "suf") ) ) ) Sans oublier du coup de modifier ta fonction (affiche) comme ceci (car 'pos_tbl' ne sera défini qu'à la fin de la boîte de dialogue) : (defun affiche (v / val) (if (setq liste_fields (lister_fields (nth (atoi v) liste_tbl))) (progn (foreach val (list "txtat" "liste_fields" "txtva" "valeur" "accept" "nou" "pre" "suf" "wri") (mode_tile val 0) ) (start_list "liste_fields") (mapcar '(lambda (x) (add_list x)) liste_fields) (end_list) ;(affiche_va) ) (foreach val (list "liste_fields" "txtva" "valeur" "accept" "nou" "pre" "suf" "wri") (mode_tile val 1) ) ) ) En théorie, en fonctionnant comme ceci, toutes les variables seront définie à partir du moment où la boîte de dialogue est close, sans devoir activer les (action_tile) de tous tes boutons pour les définir... Ainsi, même si tu ouvres la boîte de dialogue puis la referme aussitôt via le bouton "accept", tes variables seront tout de même définie (d'où l'importance des valeurs par défaut 😜) ! Je n'ai pas vraiment testé (car il se fait tard ^^"), peut-être ai-je mal interprété les retours de (get_tile) donc n'hésite pas à me dire si quelque chose cloche Bisous, Luna -
Coucou, Moi j'ai appris grâce au site d'AfraLISP ici : https://www.afralisp.net/autolisp/tutorials/polyline-bulges-part-1.php (Il y a 2 parties) Bisous, Luna
-
Routine de Préfixe - Suffixe - Nouvelle valeur pour Données D'Objets
Luna a répondu à un(e) sujet de fabcad dans Pour aller plus loin en LISP
Coucou, Vui c'est à cause de ceci : (action_tile "liste_tbl" "(setq table_choisie (nth (atoi $value) liste_tbl)) (setq pos_tbl $value) (affiche)") (action_tile "liste_fields" "(setq champ_choisi (nth (atoi $value) liste_fields)) (setq pos_field $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (action_tile "valeur" "(setq val_ch $value)") (action_tile "nou" "(setq choix \"nou\")") (action_tile "pre" "(setq choix \"pre\")") (action_tile "suf" "(setq choix \"suf\")") Habituellement, on préfère mettre la définition des variables sur le bouton "accept", permettant ainsi de différencier le bouton "accept" du bouton "cancel". Et on utilise également les {radio_row} ou {radio_column} pour grouper les {radio_button} ensemble. Bisous, Luna -
Paramètres utilisateurs et bloc dynamique [Résolu]
Luna a répondu à un(e) sujet de Ezaor dans AutoCAD 2019
Coucou, On est d'accord qu'un ratio c'est uniquement valeur utilisateur * coefficient ? Car si on est d'accord sur ce point, en suivant ton exemple : valeur utilisateur * coefficient = valeur réelle 177.8 * coefficient = 0.1778 Soit coefficient = 0.001 Autrement dit, tu écris en dur dans ton expression de contrainte le coefficient, pour permettre aux utilisateurs d'écrire la valeur en millimètres alors que le dessin est en mètres 😉 Cela te convient ? Bisous, Luna -
Routine de Préfixe - Suffixe - Nouvelle valeur pour Données D'Objets
Luna a répondu à un(e) sujet de fabcad dans Pour aller plus loin en LISP
Coucou, Je ne peux pas tester malheureusement car je n'ai pas la fonction (ade_odtablelist) mais il me semble qu'il suffit de faire cela : ;Fichier gestionnaire_od.lsp ;;;--------------------------------------------------------------- ;;; ;;; Lister les champs d'une table ;;; ;;;--------------------------------------------------------------- (defun lister_fields (nom_tbl / fieldnames) (foreach x (cdr (assoc "Columns" (ade_odtabledefn nom_tbl))) (if (not (member (cdr (assoc "ColName" x)) fieldnames)) (setq fieldnames (cons (cdr (assoc "ColName" x)) fieldnames)) ) ) (if fieldnames (setq fieldnames (acad_strlsort fieldnames))) );fin defun ;;;--------------------------------------------------------------- ;;; ;;; Afficher la liste des champs d'une table OD ;;; ;;;--------------------------------------------------------------- (defun affiche (/ val) (if (setq liste_fields (lister_fields (nth (atoi pos_tbl) liste_tbl))) (progn (foreach val (list "txtat" "liste_fields" "txtva" "valeur" "accept" "nou" "pre" "suf" "wri") (mode_tile val 0) ) (start_list "liste_fields") (mapcar '(lambda (x) (add_list x)) liste_fields) (end_list) ;(affiche_va) ) (foreach val (list "liste_fields" "txtva" "valeur" "accept" "nou" "pre" "suf" "wri") (mode_tile val 1) ) ) ) ;;;--------------------------------------------------------------- ;;; ;;; Afficher la liste des champs d'une table OD ;;; ;;;--------------------------------------------------------------- (defun writeDCL () (setq filename (vl-filename-mktemp "tmp.dcl") file (open filename "W") ) (write-line (strcat "gestionnaire_od : dialog {" " key = \"titre\";" " is_cancel = true;" " allow_accept = true;" " : boxed_column {" " label = \"Sélection de la table\";" " key = \"txt_tbl\";" " : row {" " : popup_list {key = \"liste_tbl\"; width = 40;}" " }" " spacer;" " }" " : boxed_column {" " label = \"Sélection du champ\";" " key = \"txt_field\";" " : row {" " : popup_list {key = \"liste_fields\"; width = 40;}" " }" " spacer;" " }" " : boxed_column {" " label = \"Valeur à propager\";" " key = txtva;" " : edit_box {key = \"valeur\";}" " spacer;" " }" " spacer;" " : row {" " :radio_button {label = \"Nouvelle valeur\"; key = nou;}" " :radio_button {label = \"Préfixe\"; key = pre;}" " :radio_button {label = \"Suffixe\"; key = suf;}" " }" " spacer;" " ok_cancel;" "}" ) file ) (setq file (close file)) ) ;;;--------------------------------------------------------------- ;;; ;;; Routine principale ;;; ;;;--------------------------------------------------------------- (defun c:gestionnaire_od (/ *error* filename file liste_tbl Fic resultat table_choisie champ_choisi val_field pos_tbl pos_field choix selection msg_entrees) (defun *error* (msg) (if file (close file)) (if filename (vl-file-delete filename)) (princ msg) ) (setvar "cmdecho" 0) (vl-load-com) (setq viewsize (getvar "VIEWSIZE")) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) ;;; Création de la liste des tables OD existantes dans le dwg (setq liste_tbl (ade_odtablelist)) ;;; choix "nou" (writeDCL) (setq Fic (load_dialog filename) val_field "------" pos_tbl "0" pos_field "0" ) (if (not (new_dialog "gestionnaire_od" Fic)) (exit)) (set_tile "titre" "gestionnaire_od V1.00") ;(set_tile choix "1") (affiche) (start_list "liste_tbl") (mapcar 'add_list liste_tbl) (end_list) (action_tile "liste_tbl" "(setq table_choisie (nth (atoi $value) liste_tbl)) (setq pos_tbl $value) (affiche)") (action_tile "liste_fields" "(setq champ_choisi (nth (atoi $value) liste_fields)) (setq pos_field $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (action_tile "valeur" "(setq val_ch $value)") (action_tile "nou" "(setq choix \"nou\")") (action_tile "pre" "(setq choix \"pre\")") (action_tile "suf" "(setq choix \"suf\")") (setq resultat (start_dialog)) (unload_dialog Fic) (setq filename (vl-file-delete filename)) (cond ((eq resultat 1) (setq msg_entrees (strcat "Nom de Table OD : " table_choisie "\n" "Nom du Champ : " champ_choisi "\n" "Valeur entrée : " val_ch "\n" "Option choisie : " choix );fin strcat ) (alert msg_entrees) (setq selection (ssget)) (setq space (if (= 1 (getvar 'cvport)) (vla-get-PaperSpace *acdoc*) (vla-get-ModelSpace *acdoc*) ) ) (setq nbr (sslength selection)) (setq i 0) (while (<= i (- nbr 1)) (setq obj_acad (ssname selection i)) (setq obj_vl (vlax-ename->vla-object obj_acad)) (cond ((eq choix "nou") (if (and (/= (ade_odgettables obj_acad) nil) (/= (member table_choisie (ade_odgettables obj_acad)) nil));fin and (progn (setq recnum 0) (ade_odsetfield obj_acad table_choisie champ_choisi recnum val_ch) ; Changement de couleur (rouge) de l'objet en cours (vla-put-Color obj_vl 1) );fin progn );fin if ); fin si choix est égal à nouvelle valeur ((eq choix "pre") (if (and (/= (ade_odgettables obj_acad) nil) (/= (member table_choisie (ade_odgettables obj_acad)) nil));fin and (progn (setq recnum 0) (setq val_existante (ade_odgetfield obj_acad table_choisie champ_choisi recnum)) (princ val_existante) (setq val_new (strcat val_ch " " val_existante)) (princ val_new) (ade_odsetfield obj_acad table_choisie champ_choisi recnum val_new) ; Changement de couleur (rouge) de l'objet en cours (vla-put-Color obj_vl acRed) );fin progn );fin if ); fin si choix est égal à préfixe ((eq choix "suf") (if (and (/= (ade_odgettables obj_acad) nil) (/= (member table_choisie (ade_odgettables obj_acad)) nil));fin and (progn (setq recnum 0) (setq val_existante (ade_odgetfield obj_acad table_choisie champ_choisi recnum)) (princ val_existante) (setq val_new (strcat val_existante " " val_ch)) (princ val_new) (ade_odsetfield obj_acad table_choisie champ_choisi recnum val_new) ; Changement de couleur (rouge) de l'objet en cours (vla-put-Color obj_vl acRed) );fin progn );fin if ); fin si choix est égal à suffixe );fin cond des choix (vlax-release-object obj_vl) (setq i (+ i 1)) ); Fin while ); fin eq resultat à 1 );fin cond (princ) );fin defun c:gestionnaire_od En gros, il te faut utiliser la fonction (vl-file-mktemp) pour créer un fichier dans le dossier %TEMP%, puis copier le contenu de ton fichier DCL dans un (write-line (strcat ...)) et en faisant attention que les guillemets " deviennent des \" et le tour est joué 😉 Toujours penser à (close) et (vl-file-delete) une fois le fichier écrit puis le programme terminé, et surtout je défini toujours une fonction (*error*) en local pour fermer le fichier temporaire s'il ne l'est pas déjà et supprimer le fichier temporaire s'il ne l'est pas déjà ! Sinon cela peut poser des problèmes car lors des phases de test, l'écriture ou l'ouverture de la boîte de dialogue posera toujours une erreur qui peut être très énervante par la suite si cette (*error*) n'est pas définie au plus tôt 😛 Bisous, Luna -
Paramètres utilisateurs et bloc dynamique [Résolu]
Luna a répondu à un(e) sujet de Ezaor dans AutoCAD 2019
Coucou, Le plus simple est de n'utiliser que des paramètres de contrainte dimensionnelle et d'utilisateur. Ici, il suffit de définir Ep comme seul paramètre utilisateur et ensuite tu aurais un paramètre de contrainte dimensionnelle pour le diamètre externe. Ces deux paramètres doivent être affiché pour une saisie utilisateur, et les autres diamètres sont calculés à partir des ces deux paramètres visibles. Donc par exemple le diamètre interne est égal à DiamExt - 2*Ep Et pour le diamètre de forage, je ne sais pas exactement comment tu le calcules. L'avantage des paramètres de contrainte dimensionnelle comparé au paramètres d'action, c'est que les formules et variables sont autorisées 😉 Bisous, Luna -
Faire des renvois de folio via un champ et un bloc
Luna a répondu à un(e) sujet de Val37 dans AutoCAD 2018
Coucou, La méthode la plus simple serait de créer tes champs sur chaque présentation puis de les copier dans ton espace objet (ou la présentation qui doit les regrouper). Il existe une autre méthode qui consiste à utiliser le principe des commandes transparentes mais...j'ai l'impression que cela fonctionne correctement pour PAPIER>OBJET mais cela ne fonctionne pas bien pour PAPIER>PAPIER ou OBJET>PAPIER ! Mais si jamais cela peut aider les gens, le principe d'une commande transparente c'est de pouvoir utiliser certaines commandes lors de l'exécution d'autres commandes. Toutes les commandes ne peuvent pas être utilisées de façon transparente mais pour les variables systèmes c'est faisable. Pour lancer une commande de manière transparente il suffit de rajouter un apostrophe ' devant le nom de la commande. Ici il s'agit de la variable système CTAB qui défini le nom de la présentation courante. Donc lorsque tu dois sélectionner ton objet, tu écris 'CTAB puis le nom de l'onglet sur lequel se situe ton cartouche. Cependant comme je l'ai dit cela ne semble pas fonctionner si l'objet se trouve dans l'espace papier...(les objets refusent de s'afficher car cela n'est théoriquement pas faisable, rendant la sélection impossible, et les commandes 'REGEN et 'REGENTOUT ne résolvent pas non plus le problème pour l'affichage des objets) Une autre solution consisterai à créer un programme pour créer ce champ dynamique mais il faudrait un peu plus de détails et/ou à minima un .dwg d'exemple pour savoir quoi chercher et comment 🙂 Désolée de ne pas pouvoir apporter de solution fonctionnelle >w< Bisous, Luna -
C'est étonnant en effet, car pour le calcul de distance j'ai fait en sorte de ne pas considérer l'élévation Z... Si jamais, tu peux fournir un .dwg avec quelques cas fonctionnels et d'autres non fonctionnels, et je regarderais s'il y a une explication aux problèmes rencontrés (lorsque j'aurais un peu de temps).. Bisous, Luna
-
Mise à jour d'attribut avec champs
Luna a répondu à un(e) sujet de benoitlacroix dans AutoCAD 2020-2024
Je pense avoir compris le soucis : En ayant modifié la définition de ton bloc cartouche pour remplacer la valeur de certains attributs par un champ dynamiques, seuls les nouveaux blocs insérés pourront posséder cette mise à jour, car pour les anciens, les blocs DOIVENT conserver leur valeurs d'attributs ! Or ici ton champ dynamique n'est qu'une valeur par défaut pour les attributs. Donc la valeur enregistrée de ces attributs dans tes cartouches existants ne va pas laisser la place à une valeur par défaut... Donc le problème ici c'est finalement de réinitialiser tes blocs cartouches pour remettre les valeurs par défaut, mais partiellement uniquement car il faut conserver les attributs qui ne sont pas des champs dynamiques par défaut... Je vois actuellement 2 solutions : - Tu considères que ton champ dynamique n'est pas un attribut mais un texte, ainsi avec un ATTSYNC tu supprimeras tes anciens attributs qui seront remplacer par un texte dynamique (je n'ai pas testé, peut-être que cela ne fonctionne pas...) - Tu passes par de la programmation pour redéfinir certains attributs sur leur valeur par défaut, sans réinitialiser l'intégralité de tes attributs Bisous, Luna -
Coucou, J'ai modifié mon code ci-dessus pour renvoyer un jeu de sélection contenant les blocs trop éloignés des polylignes spécifiées. As-tu essayé d'augmenter la distance maximale pour voir si cela corrige le problème pour ces blocs ? Bisous, Luna
-
Fichier DWG très lent crée par mensura
Luna a répondu à un(e) sujet de yann69690 dans AutoCAD 2020-2024
@yann69690, Regarde ici : https://forums.autodesk.com/t5/autocad-tous-produits-francais/quiz-que-fait-la-commande-autocad-addvars2scr/td-p/11113677 😉 Bisous, Luna -
Mise à jour d'attribut avec champs
Luna a répondu à un(e) sujet de benoitlacroix dans AutoCAD 2020-2024
Coucou, As-tu bien lancer un ATTSYNC ? Sinon as-tu essayé de passer par les ExpressTools (> Replace block with another block) ? Bisous, Luna -
Fichier DWG très lent crée par mensura
Luna a répondu à un(e) sujet de yann69690 dans AutoCAD 2020-2024
Coucou, Perso je suis aussi avec XREFOVERRIDE = 0, car je travaille régulièrement sur des plans issus de Mensura pour les terrassements et la heatmap de déblais/remblais se fait malheureusement via des couleurs forcées... Donc si je veux m'éviter d'avoir une heatmap toute blanche je suis obligée de travailler avec XREFOVERRIDE = 0. Mais sinon sur le principe, vui il est préférable d'avoir XREFOVERRIDE = 1 (dans le cas où les prestataires qui fournissent des .dwg savent correctement travailler avec les calques pour limiter les couleurs forcées... >n<) Bisous, Luna -
@lecrabe, En effet, j'ai fait cela un peu vite donc ci-dessous une version améliorée pour définir une distance maximale (valeur par défaut = 1.0 unité) sans prendre en compte le Z dans ce calcul de distance et j'ai également ajouter un retour texte dans la ligne de commande pour donner le nombre de blocs déplacés avec succès 😉 (defun c:MB2CP (/ 2Dp b m jsel i name lsel n ent bpt lpt d lst e esel) (defun 2Dp (p) (cond ( (not (listp p))) ( (= 2 (length p)) p) ( (= 3 (length p)) (reverse (cdr (reverse p)))) ) ) (while (not (and (setq name (entsel "\nSelect a block :")) (setq name (car name)) (= "INSERT" (cdr (assoc 0 (entget name)))) (setq name (vlax-ename->vla-object name)) (setq b (vlax-get name 'EffectiveName)) ) ) (princ "\nInvalid selection...") ) (if (null (setq e 0 m (getdist "\nMaximum distance allowed <1.0> : "))) (setq m 1.0) ) (princ "\nPlease, select blocks...") (if (setq esel (ssadd) jsel (ssget (list (cons 0 "INSERT") (cons 2 (strcat "`*U*," b))))) (progn (princ "\nPlease, select polylines...") (setq lsel (ssget '((0 . "LWPOLYLINE")))) (repeat (setq i (sslength jsel)) (setq name (ssname jsel (setq i (1- i))) bpt (cdr (assoc 10 (entget name))) lst nil ) (if (= b (vlax-get (vlax-ename->vla-object name) 'EffectiveName)) (progn (repeat (setq n (sslength lsel)) (setq ent (ssname lsel (setq n (1- n))) lpt (vlax-curve-getClosestPointTo ent bpt T) d (distance bpt lpt) lst (cons (cons d lpt) lst) ) ) (setq lst (vl-sort lst '(lambda (p1 p2) (< (car p1) (car p2)))) lpt (cdar lst) ) (if (<= (distance (2Dp lpt) (2Dp bpt)) m) (and (entmod (subst (cons 10 lpt) (assoc 10 (entget name)) (entget name))) (setq e (1+ e)) ) (ssadd name esel) ) ) ) ) (command "_ATTSYNC" "_Name" b) (princ (strcat "\nNumber of block moved successfully : " (itoa e) " / " (itoa (sslength jsel)) ) ) (sssetfirst nil esel) ) ) (princ) ) Dis-moi si tu as d'autres remarques :3 Bisous, Luna
