-
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
-
[Résolu] Dessiner des lignes avec "recouvrement"
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Sumimasen >n< Promis je serais sage la prochaine fois (c'est juste que cette fois j'ai pas pu résister à l'envie de plancher sur ton soucis)... :3 Le programme semble simple mais de part la récursivité, il est assez complexe à comprendre. Même moi j'ai beaucoup de difficultés sur ce genre de fonctions (et c'est donc pour chat que je me force à l'utiliser lorsque c'est possible pour mieux me familiariser avec)... L'argument 'd est justement ce qui m'a posé le plus de problème malheureusement ! En gros j'avais besoin d'un moyen de faire comprendre au programme sur quel niveau il devait dessiner la polyligne or à cause de la récursivité c'était délicat d'avoir ce principe de "switch" car si la barre est suffisamment longue (donc pas d'utilisation de la récursivité), la barre est à 1/2 de la hauteur, mais si la barre n'est pas assez longue alors elle doit varier entre 1/3 et 2/3 de la hauteur. C'est pour cela que d = nil lors de l'utilisation telle quelle (pour signifier que l'on a pas eut de récursivité auparavant) puis en passant dans la récursivité, elle vaut 1/3 ou 2/3 et permet de multiplier la hauteur. Pour le reste il faut juste imaginer que le segment [PtA PtB] est un rail et le programme se balade pour dessiner une première ligne, puis fait marche-arrière (pour le recouvrement), re-dessine une autre ligne, etc... Bon courage pour le digérer en tout cas ! Bisous, Luna -
[Résolu] Dessiner des lignes avec "recouvrement"
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Hiya ! Je peux te proposer un truc dans le genre : (defun polymake (plist) (entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length plist)) ) (mapcar '(lambda (p) (cons 10 p)) plist) ) ) ) (defun foo (PtA PtB Ep Blg rcv d / f l a b e) (defun f (d) (cond ( (= d (/ 1 3.0)) (/ 2 3.0)) ( (= d 0.5) d) ((/ 1 3.0)) ) ) (setq l (distance PtA PtB) a (angle PtA PtB) b (+ a (* pi 0.5)) ) (if (<= l Blg) (progn (setq e (* Ep (cond (d (f d)) (0.5)))) (polymake (list (polar PtA b e) (polar PtB b e) ) ) ) (progn (setq e (* Ep (f d))) (polymake (list (polar PtA b e) (polar (setq PtA (polar PtA a Blg)) b e) ) ) (foo (polar PtA (+ a pi) rcv) PtB Ep Blg rcv (f d) ) ) ) ) Si tu essayes avec cette ligne, obtiens-tu ce que tu souhaites ? (foo (setq PtA (getpoint "\nPtA :")) (getpoint PtA "\nPtB :") (getdist PtA "\nPtC :") 600 40 nil) Attention si tu modifies le nom de la fonction, elle est récursive donc il faut le modifier également dans sa définition ! J'ai préféré utiliser Ep pour l'Epaisseur à la place de PtC car rien ne permet de vérifier que PtC est bien perpendiculaire à [PtA PtB] 🙂 Ensuite Blg correspond à la longueur max de tes aciers (donc pour toi c'est 600 mais j'ai préféré l'intégré en variable), rcv correspond à la longueur de recouvrement (donc pour toi c'est 40 mais encore une fois, c'est mieux sous forme de variable) et enfin d tu ne t'en occupe pas, c'est toujours nil (c'est ce qui me permet de faire varier les niveaux via la récursivité). Bisous, Luna -
[Résolu] Dessiner des lignes avec "recouvrement"
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
En effet ^.^ Alors du coup j'ai quelques questions : • Comment détermines-tu le nombre de barres ? • Comment détermines-tu la longueur des barres ? Est-elle identique pour chacune d'entre-elles ou bien sont-elles différentes ? • Comment détermines-tu l'écart entre les barres et tes points PtA et PtC ? • Comment détermines-tu la longueur de recouvrement ? Bisous, Luna -
polerase ou delimiter-recadrer un plan cadastre
Luna a répondu à un(e) sujet de yann69690 dans AutoCAD 2020-2024
Coucou, Là comme chat sans réfléchir, je pense à la commande XDELIM qui permet de restreindre l'affichage d'une XREF ou d'une référence de bloc mais pour le cas où la zone à restreindre n'est pas une référence externe ou bloc, je ne sais pas trop...Peut-être simplement en utilisant la commande AJUSTER (_TRIM) et l'option Trajet (_Fence) ? Bisous, Luna -
[Résolu] Dessiner des lignes avec "recouvrement"
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Coucou, La vrai question qu'il faut se poser, c'est quelles sont les données d'entrées ! Donc sur ton exemple, qu'est-ce qui est une donnée d'entrée et qu'est-ce qui est un résultat ? Car pour moi la donnée d'entrée c'est la longueur totale et le reste c'est le résultat, mais d'après le post de JPhil, il semblerait que se ne soit pas le cas... Bisous, Luna -
[Résolu] Somme par calque mais sans le calque
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Je peux proposer ceci pour le nom du calque : (defun read-str ( str / wcc ) (setq wcc '("#" "@" "." "*" "%" "?" "~" "[" "]" "-" "`" ",")) (setq str (mapcar 'chr (vl-string->list str))) (apply 'strcat (mapcar '(lambda (s) (if (member s wcc) (strcat "`" s) s ) ) str ) ) ) Ainsi il suffirait de remplacer (cons 8 layer) par (cons 8 (read-str layer)) A tester si avec ton programme et/ou mon bout de programme Tout le plaisir est pour moi :3 Bisous, Luna -
[Résolu] Somme par calque mais sans le calque
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Oki doki !! Alors vui, j'ai oublié de préciser mais (foo) possède le nom du calque en argument donc pour l'exemple tu pourrais avoir : (foo (cdr (assoc 8 (entget (car (entsel)))))) Ensuite j'ai compris d'où provient le problème 😉 C'est le nom de ton calque qui ne plaît pas au (ssget) 🙂 J'ai essayé avec un autre calque et il n'y a plus de problème J'ai modifié (foo) sur mon post précédent en corrigeant les erreurs détectées en le testant sur ton .dwg ^^ Pour ce qui est du nom du calque, je vais essayer de voir ce qu'on peut faire mais le soucis vient de là (Wildcard Characters) : https://knowledge.autodesk.com/support/autocad-map-3d/learn-explore/caas/CloudHelp/cloudhelp/2019/ENU/MAP3D-Use/files/GUID-BED8F649-3D1A-4641-A48F-562A2EBB927C-htm.html Bisous, Luna -
[Résolu] Somme par calque mais sans le calque
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Coucou, Serait-il possible d'avoir un .dwg d'exemple pour voir pour quelle raison cela ne fonctionne pas ? Si je comprends bien, c'est le (cons 8 Calq) qui pose un souci dans le filtre (ssget) ? Autrement, je pense que l'écriture du programme pourrait être grandement simplifiée en évitant de créer un ligne pour chaque valeur possible...J'avais créé 2 fonctions pour créer une liste d'association à plusieurs niveaux (il me manque encore la dernière pour pouvoir l'interpréter malheureusement...). Pour ton cas, la seconde fonction ne te servira à rien car elle ne permet pas encore de gérer les données étendues ou XDatas... Cependant tu peux essayer de voir avec la 1ère : ; +-----------------------------------------------------------------------------------------------------------------------------------------------+ ; ; | | ; ; | HISTORICAL TRACKING FILE OF THE FUNCTION | ; ; | --{ make-a-list-properties }-- | ; ; | | ; ; +-----------------------------------------------------------------------------------------------------------------------------------------------+ ; ; []-----------------------[] make-a-list-properties []-----------------------[] ; ;--- Date of creation > 06/01/2022 ; ;--- Last modification date > 04/02/2022 ; ;--- Author > Luna ; ;--- Version > 2.0.0 ; ;--- Class > "BaLst" ; ;--- Goal and utility of the main function ; ; When used in a loop function and by defining the 'lst' variable with the result of this function, it creates an association list with different ; ; levels. The main idea is to set value (like a counter, the object's length, etc.) and creates a new list of keys if not existant or applies a ; ; function (like '+, '-, 'strcat) between the old and the new value with the same list of keys. For that, it will considered for each key a new ; ; level of association list. In fine, each similar objects by the value of their properties name, will be match together. ; ; ; ;--- Declaration of the arguments ; ; The function (make-a-list-properties) have 5 argument(s) : ; ; --• lst > corresponds to the existing list you want to build withing a loop. The common use will be, for example, see below ; ; (setq lst (make-a-list-properties lst ...)) ; ; (type lst) = 'LST | Ex. : a variable name to build the list within a loop ; ; --• k-lst > corresponds to the list of property value that will be used to determine the number of level of association list. ; ; Each property value will be used as the key for each association list. ; ; (type k-lst) = 'LST | Ex. : '("Layer1" "LWPOLYLINE"), '("BlockName2" "63,115,69" "23.42"), '("Layer0"), ... ; ; --• value > corresponds to the new value for the list of keys. If the 'lst' already contain a value for that list of keys, it ; ; will be add to the old one (depending of 'fun' value), otherwise it will be add to the list with the list of keys ; ; (type value) = '... | Ex. : 1 (to count the entity units), (getpropertyvalue name "LENGTH"), "63,115,69", ... ; ; --• fun > corresponds to the function that will be used to connect the old value with the new one. The most common value of ; ; 'fun' is '+, to add the new value with the old one ; ; (type fun) = 'SYM | Ex. : '+, '-, 'strcat, ... ; ; --• flag > corresponds to the position of 'value' in relation to (cdr search), the actual value in the association list ; ; (type flag) = 'SYM | Ex. : T means 'value' is before (cdr search), nil means 'value' is after (cdr search) ; ; ; ;--- List of dependent's functions ; ; --• "XxXxx" ---> ... | v#.#.# - ##/##/#### (Luna) ; ; ; ;--- List of local functions ; ; --• "XxXxx" ---> ... | v#.#.# - ##/##/#### (Luna) ; ; ; ;--- List of programs using this function ; ; --• "BaLst" ---> loop-a-list-properties | v2.0.0 - 28/02/2022 (Luna) ; ; ; ;--- Return ; ; The function (make-a-list-properties) returns the new value of the list, with the new value substitute to the old one if existing, or add it to ; ; the list. ; ; Ex. : (make-a-list-properties lst (list Layer ObjectName) 1 '+ nil) returns after the loop from a selection set ; ; ( ("Layer1" ("LWPOLYLINE" . 13) ("CIRCLE" . 4) ("INSERT" . 1)) ; ; ("Layer3" ("CIRCLE" . 1) ("LINE" . 14) ("LWPOLYLINE" . 42)) ; ; ("Layer2" ("INSERT" . 69)) ; ; ("Layer9" ("LINE" . 3) ("ARC" . 11)) ; ; ) ; ; ; ;--- Historic list of the version with their modification status ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; | v2.0.0 | Adding an argument to define the position of 'value' (cdr search) in the list between each other | ; ; | | (i.e (list value (cdr search)) or (list (cdr search) value)) to adapt the program to different function (like (cons) and (-)) | ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; | v1.0.0 | Creation of the function | ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; ; (defun make-a-list-properties (lst k-lst value fun flag / key search) (if (null (cdr k-lst)) (if (setq search (assoc (setq key (car k-lst)) lst)) (subst (cons key (apply fun (if flag (list value (cdr search)) (list (cdr search) value)))) search lst) (append lst (list (cons key value))) ) (if (setq search (assoc (setq key (car k-lst)) lst)) (subst (cons key (make-a-list-properties (cdr search) (cdr k-lst) value fun flag)) search lst) (append lst (list (cons key (make-a-list-properties (cdr search) (cdr k-lst) value fun flag)))) ) ) ) Pour ton utilisation, je peux te suggérer un programme de ce genre (à compléter et tester !) : (defun foo (layer / jsel i name HaHo NvHo NbHo Lght lst text) (if (setq jsel (ssget "_X" (list '(0 . "LWPOLYLINE") (cons 8 layer) '(410 . "Model")))) (progn (repeat (setq i (sslength jsel)) (and (setq name (ssname jsel (setq i (1- i)))) (setq HaHo (vlax-ldata-get name "MetreHaHo")) (setq NvHo (vlax-ldata-get name "MetreNivHo" "1")) (setq NbHo (vlax-ldata-get name "MetreNbHo")) (setq Lgth (getpropertyvalue name "LENGTH")) (setq lst (make-a-list-properties lst (list HaHo) (* Lgth (cond ((distof NbHo)) (1))) '+ nil)) ) ) (setq text "\\lLinéaire total des chaînages horizontaux :\\l\\P\\Q15(Hors recouvrement)\\Q0\\P") ; (foreach x (vl-sort lst '(lambda (e1 e2) (< (car e1) (car e2)))) ; (setq text ; (strcat ; text ; "- " ; (car x) ; "=" ; (rtos (/ (cdr x) 100) 2) ; " m\n" ; ) ; ) ; ) (vl-sort lst '(lambda (e1 e2) (< (car e1) (car e2)))) ) ) ) Bisous, Luna -
[Résolu] Petit soucis avec un entmode pour un type de ligne.
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Coucou, Premier point, tu peux simplifier ta condition (while) comme suit : (while (setq ArmatObj (car (entsel "\nSélectionner une armature :"))) Ensuite, certain codes DXF sont facultatifs dans la liste DXF, le code 6 en fait parti ! En réalité il n'est présent que si l'objet possède un type de ligne forcé (donc différent de "DuCalque"). Donc il faut faire plutôt quelque chose comme ceci pour être paré à toute éventualité : (if (assoc 6 elst) (setq elst (subst (cons 6 (strcat "Chain" MetreHaHo)) (assoc 6 elst) elst)) (setq elst (append elst (list (cons 6 (strcat "Chain" MetreHaHo))))) ) Bisous, Luna -
Décalé à gauche et droite en 1 seul clic
Luna a répondu à un(e) sujet de willy95 dans Débuter en LISP
Coucou, (defun c:TAB ( / Dis DemiDis Ent IniCmd) (setq Dis (getdist (strcat "\nLargeur totale du Tableau <" (rtos (getvar "OFFSETDIST")) ">: ")) Ent (car (entsel "\nChoix de l'Axe : ")) ; Attention au retour de (entsel) ! Pour obtenir le nom d'entité, il s'agit du (car) du résultat ;) IniCmd (getvar "CMDECHO") ) (setq DemiDis (/ Dis 2.0)) ; Attention, il faut diviser par un réel pour obtenir un réel ! (/ 5 2) = 2 et (/ 5 2.) = 2.5 (command "_OFFSET" DemiDis ; Distance Ent ; Sélection de l'objet à décaler Pause ; Coté à décaler "" ; Sort de la commande Décaler ) (command "_OFFSET" DemiDis ; Distance Ent ; Sélection de l'objet à décaler Pause ; Coté à décaler "" ; Sort de la commande Décaler ) (setvar "CMDECHO" IniCmd) (princ) ) Ceci convient-il ? Je peux également te proposer une piste pour n'avoir qu'à sélectionner l'objet, sans cliquer à gauche ou à droite ^^" Bisous, Luna -
Coucou, Essaye en passant par un champ imbriqué 😉 Dans ton texte (ou attribut), tu fais "Insérer un champ" puis tu choisis un champ "Formule" (dans la catégorie "Objets"). Dans l'espace de formule tu fais un clic droit > "Insérer un champ" et cette fois-ci tu ajoutes la valeur de CTAB : - Champ "VariableSystème" > "ctab" si tes présentations sont uniquement nommées avec des nombres - Champ "ExpressionDiesel" > la ligne ci-dessous mais uniquement fonctionnelle si le nombre à la fin du nom de la présentation ne comporte qu'un seul chiffre $(substr,$(getvar,ctab),$(strlen,$(getvar,ctab)),1) Puis dans ton champ "Formule", tu peux ajouter ou soustraire 1 au numéro de la présentation car le résultat sera interprété comme un nombre si le résultat de CTAB renvoie bien une chaîne de nombre, sinon chat posera un souci. Je ne sais pas si cela correspond à ta demande...? Bisous, Luna
-
J'ai modifié mon message ci-dessus pour ajouter des pistes de recherche, si jamais...^^"
-
Integrer une action dans la structure dcl dans un fichier lisp
Luna a répondu à un(e) sujet de fabcad dans Pour aller plus loin en LISP
Coucou, Je pense qu'il serait plus sage de gérer l'action via la fonction (action_tile), donc en dehors de l'écriture du fichier DCL évitant ainsi ces écritures un peu barbares et sources d'erreurs ^^" Perso je l'intègre toujours au bouton "accept" pour définir les variables, comme ci-dessous : ;Fichier: COULEUR1.LSP ; ;;;--------------------------------------------------------------- ;;; ;;; Creation de la boite de dialogue et retour du fichier cree. ;;; ;;;--------------------------------------------------------------- (defun writeDCL () (setq filename (vl-filename-mktemp "tmp.dcl") file (open filename "W") ) (write-line (strcat "Couleur : dialog {" " label = \"Modifier la couleur\";" " : text {" " label = \"Nouvelle couleur pour la derniere entite\";" " }" " : radio_row {" " key = \"Boutons\";" " : radio_button {" " label = \"Rouge\";" " key = \"_RED\";" " }" " : radio_button {" " label = \"Bleu\";" " key = \"_BLUE\";" " }" " : radio_button {" " label = \"Jaune\";" " key = \"_YELLOW\";" " }" " }" " ok_cancel;" "}" );fin strcat file ); fin write-line (setq file (close file)) ); fin defun writeDCL (defun C:Colorbox (/ *error* col filename file Fic Cou) (vl-load-com) (defun *error* (msg) (if file (close file)) (if filename (vl-file-delete filename)) (princ msg) ) (defun col (/ r) (foreach c '("_RED" "_BLUE" "_YELLOW") (if (= "1" (get_tile c)) (setq r c)) ) r ) (writeDCL) (setq Fic (load_dialog filename)) (if (not (new_dialog "Couleur" Fic)) (exit)) (action_tile "accept" "(setq Cou (col)) (done_dialog)") (action_tile "cancel" "(done_dialog)") (start_dialog) (unload_dialog Fic) Cou ); fin defun writeDCL Bisous, Luna -
Coucou, Ne suffit-il pas de double-cliquer dans la cellule =SOMME(...) Pour faire apparaître les cellules concernées par la formule en couleur ? Sinon tu peux essayer d'aller dans "Formules" > "Vérification des formules" > "Afficher les formules". Cela permet d'avoir le même effet que si tu double-cliques dans ta cellule de formule mais sans cliquer. Ta formule est affichée (donc pas le résultat) et tu as les plages/cellules utilisées par ta formule. Tu peux également faire "Repérer les antécédents" si jamais cela peut t'aider... Bisous, Luna
-
aide pour modifier lisp porte avec percement mur
Luna a répondu à un(e) sujet de actopview dans Débuter en LISP
Coucou, J'avais commencé à écrire un programme mais je manque un peu de temps en ce moment, donc la semaine pro, c'est bon pour toi (si tout ce passe bien ^^") ? Bisous, Luna -
Coucou, Les raccourcis clavier ne sont pas enregistrés sur le fichier .cuix mais sur le fichier acad.pgp ! Il te faudra définir tes alias en bas de document (ne pas modifier les raccourcis existant dans le document, cela peut poser soucis lors des changements de versions car ils ne sont pas conservés) dans la partie réservée au alias de commande utilisateurs. Pour recharger le fichier .pgp si une session AutoCAD est en cours, il suffit de lancer la commande REINIT 😜 Bisous, Luna
- 3 réponses
-
- 1
-
-
- raccouci clavier
- racourci
-
(et 1 en plus)
Étiqueté avec :
-
[Résolu] Comment être discret en ligne de commande ?
Luna a répondu à un(e) sujet de DenisHen dans Débuter en LISP
C'est partiellement fonctionnel en réalité... Il y a certains cas où CMDECHO ne modifie pas le retour dans l'historique de commande ou pas totalement (et bien évidemment c'est toujours dans les cas où j'aimerais ne pas avoir de retours que CMDECHO n'a aucun impact....!! >n<) Cela peut également être couplé avec la variable NOMUTT, mais là aussi, de temps en temps cela n'est pas parfaitement silencieux... Et vouih bien évidemment la modification de ces variables systèmes obligent l'utilisation d'une fonction de gestion des erreurs (bien que cela soit théoriquement nécessaire pour toutes les variables au final) ! Bisous, Luna -
macro "dévérouiller tous les calques"
Luna a répondu à un(e) sujet de magalie dans Personnalisation, macros, DIESEL
Je ne maîtrise pas le langage script, mais si je lis l'aide AutoDesk à ce sujet, chaque espace correspond à un ENTER donc, si tu remplaces le point-virgule (qui correspond à un ENTER en langage DIESEL) par un espace, cela devrait fonctionner je suppose... En clair il te faut DEUX espaces à après le *, et non 1 car le premier valide la chaîne "*" et le second met fin à la commande Bisous, Luna -
Remplacer des points par des cercles ....possible ?
Luna a répondu à un(e) sujet de esbe dans Routines LISP
A priori nan c'était pas le bon vu que je me suis contenté de supprimer les [surligneur] du code et c'est tout..... T_T Mais bon c'est pas grave.. Bisous, Luna -
Remplacer des points par des cercles ....possible ?
Luna a répondu à un(e) sujet de esbe dans Routines LISP
Coucou, On est bien d'accord que ton code est celui-ci (à la lettre près !) ? (defun c:p2c (/ ss n ent) (princ "\nSélectionnez les points à transformer ou [b]: ") (if (or (setq ss (ssget (list '(0 . "POINT") (cons 410 (getvar "CTAB"))))) (setq ss (ssget "_X" (list '(0 . "POINT") (cons 410 (getvar "CTAB"))))) ) (repeat (setq n (sslength ss)) (setq ent (ssname ss (setq n (1- n)))) (entmake (list '(0 . "CIRCLE") (assoc 10 (entget ent)) (cons 40 2.0) ; rayon du cercle ) ) (entdel ent) ) (princ "\nAucun point sélectionné.") ) (princ) ) La seule partie que tu peux modifier c'est le 2.0 (et uniquement ce nombre !) sur la ligne (cons 40 2.0) ; rayon du cercle correspondant à la longueur du rayon de ton cercle (en nombre d'unités). Bisous, Luna -
CADMIN : SVP Action contre les SPAMs
Luna a répondu à un(e) sujet de lecrabe dans CADxp, vos souhaits
Coucou, Il me semble qu'avant CADxp 2.0, les "invités" n'avait pas l'autorisation de poster des messages. Seules les personnes ayant un compte pouvait le faire...Du moins il me semble, mais cela rejoint la proposition de @La Lozère ^^ Je pense également qu'un système de "mots bannis" pourrait corriger partiellement le soucis en supprimant (ou empêchant) automatiquement tout message contenant certains mots qui n'ont absolument rien à faire ici (ce qui est le cas de 100% des messages que je vois et signale). Après évidemment je ne sais pas à quel point cela est compliqué à réaliser ou non, donc forcément c'est plus facile à dire qu'à faire >w< Mais en effet, il serait peut-être temps de combattre les armées de robots avec d'autres robots car si chat continue notre compagnie de valeureux guerriers va finir par s'épuiser et déserter le champ de bataille... D'ailleurs s'il y a besoin de renfort, je peux participer vu que je passe beaucoup de temps sur ces forums et qu'actuellement je ne peux que signaler les spams.. Bisous, Luna -
aide pour modifier lisp porte avec percement mur
Luna a répondu à un(e) sujet de actopview dans Débuter en LISP
Coucou, Le programme doit-il fonctionner encore avec des lignes ou bien désires-tu insérer un bloc à la place ? Peux-tu donner un .dwg d'exemple avec les éléments initiaux puis un exemple de résultat souhaité ? Bisous, Luna -
macro "dévérouiller tous les calques"
Luna a répondu à un(e) sujet de magalie dans Personnalisation, macros, DIESEL
Coucou, Essaye ceci : ^C^C_-LAYER _Unlock * ; Bisous, Luna -
Coucou, Je pense que tu as fait une faute de frappe sur ton utilisation du (ssget) dans ta commande...Ci-dessous ton code original : (defun c:CB (/ ss) (if (or (setq ss (ssget "_I")) (setq ss (ssget)) ) (command "_.copy" ssget'((0 . "INSERT")) pause) ) (princ) ) Et ci-dessous la version corrigée : (defun c:CB (/ ss) (if (setq ss (ssget '((0 . "INSERT")))) (command "_.copy" ss "" (trans (cdr (assoc 10 (entget (ssname ss 0)))) 0 1) pause) ) (princ) ) J'ai corrigé plusieurs choses : L'utilisation du (ssget "_I") n'est théoriquement pas nécessaire car la fonction (ssget), si PICKFIRST = 1 (je connais aucun dessinateur qui fonctionne avec PICKFIRST = 0, d'où cette théorie), permet déjà de prendre en compte la sélection actuelle si existante, sinon demande de sélectionner des objets. Mais si tu ne considères pas que PICKFIRST = 1 quoi qu'il advienne, ta méthode est en effet plus "valide" 😉 Suppression de l'erreur ssget'((0 . "INSERT")) dans ta fonction (command) et remplacement par ta variable 'ss correspondant à ton jeu de sélection. Ajout des "" vides après l'utilisation du jeu de sélection 'ss pour valider la sélection et ainsi passer à la question suivante de la commande "_.COPY". Spécification du point de base du premier bloc contenu dans le jeu de sélection pour répondre automatiquement à la question "Premier point" via le code DXF 10. J'ai ajouté la fonction (trans) pour prendre en compte les SCU et ainsi transposer les coordonnées SCG du point en coordonnées du SCU courant (ou SCG si courant). En revanche, le programme ci-dessus ne vérifie aucunement que tu as un seul bloc contenu dans ton jeu de sélection et le point de base utilisé correspond donc uniquement au premier objet contenu dans le jeu de sélection (donc si plusieurs blocs dans 'ss, le point de base ne sera peut-être pas celui souhaité). Bisous, Luna
-
Oki, bon je pense avoir compris le besoin. Etant donné qu'il n'y a pas de calcul ou logique mathématique derrière le tableau d'équivalence, l'utilisation des champs dynamiques ne me semble malheureusement pas faisable... En passant par de la programmation c'est possible de créer les textes mais ils ne pourront pas être liés à ta polyligne... Je peux essayer de voir pour développer 2 programmes : le premier pour créer les textes et le second pour les mettre à jour de temps à autre. Pour cela je vais avoir besoin de quelques infos : 1°) Les textes souhaités correspondent parfaitement aux textes que tu as mis dans ton .dwg d'exemple d'un point de vue propriétés (style de texte, annotativité, calque, hauteur de texte, masque d'arrière-plan, ...), ou bien cela peut varier ? 2°) Pour créer les textes, désires-tu sélectionner les polylignes une par une afin de spécifier un emplacement de texte précis ou bien tu préfères que le programme prenne le milieu des polylignes mais que cela puisse traiter plusieurs polyligne à la fois ? 3°) Pour la mise à jour des textes, les polylignes peuvent-elles être déplacées, copiées, modifiées graphiquement, etc... ? En clair, faut-il uniquement prévoir de modifier la valeur du texte si la largeur est différente ou bien il faut aussi prévoir le fait que le texte doit être déplacé graphiquement si la polyligne a bougé ? 4°) Je vais dans un premier temps m'occuper que des polylignes, vérifier que le programme réponde à ton besoin puis je verrais comment intégrer les multilignes ensuite (car le procédé auquel je pense est différent entre ces deux types d'objets), oki ? Si j'ai d'autres questions en cours de route, je reviendrais vers toi. A savoir tout de même que je n'ai pas beaucoup de temps en ce moment et que ce n'est pas un programme rapide puisqu'il faut prévoir la liaison entre objets, donc je ne pourrais pas forcément pondre quelque chose de concluant rapidement ^^" Bisous, Luna
