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, Avec une version pleine 2012 ou ultérieure, tu dois pouvoir utiliser le plugin Increment.
  2. Il semble que Autodesk ait modifié le fichier qui gère le chargement automatique pour les versions 2012. Tu vas dans : C:\Users\\AppData\Roaming\Autodesk\ApplicationPlugins\Gile_Increment.bundle et tu ouvres le fichier PackageContents.xml dans un éditeur de texte (le bloc-not, notepad++, ...) Dans le noeud , tu remplaces : Platform="AutoCAD" par : Platform="AutoCAD*" ou : Platform="AutoCAD|Map"
  3. C'est plutôt "_non" avant chaque spécification de point dans une expression command : (command "_.line" "_non" pt1 "_non" pt2 "") (command "_.zoom" "_extents") On peut aussi désactiver tous les accrochages en début de routine et restaurer la valeur initiale de OSMODE à la fin de la routine : ;; enregistrement de la valeur initiale de OSMODE (setq osmode (getvar "OSMODE") ;; désactivation des accrochages aux objets (setvar "OSMODE" 0) ;; corps de la routine ;; restauration des accrochages (setvar "OSMODE" osmode)
  4. Salut, Probablement un problème d'accrochage aux objets, le plus simple est de forcer l'accrochage sur AUCun ou _NONe dans les expressions (command ...") : (command "_circle" "_non" (list (+ (car pt1) (* count DistC)) (cadr pt1) 0) 1)
  5. Salut, Si tu veux faire une sélection par fenêtre (ou par capture) il faut spécifier la méthode de sélection du ssget : "_W" pour Window (ou "_C" pour Crossing). Voir l'aide ou, en français la section 16.3 de Introduction à AutoLISP. Sinon, il est toujours préférable de vérifier si le jeu de sélection n'est pas nil (aucun objet sélectionné) avant de l'utiliser. (defun c:test (/ ss) (if (setq ss (ssget "_W" '(0. 0. 0.) '(3000. 3000. 3000.))) (command "_.erase" ss "") ) (princ) ) De plus, une sélection dans AutoCAD dépend de l'affichage (les objets hors écran ne sont pas sélectionnés) il est donc préférable de faire un zoom étendu ou correspondant à la fenêtre avant de faire la sélection. (defun c:test (/ ss) (command "_.zoom" '(0. 0. 0.) '(3000. 3000. 3000.)) (if (setq ss (ssget "_W" '(0. 0. 0.) '(3000. 3000. 3000.))) (command "_.erase" ss "") ) (command "_.zoom" "_previous") (princ) )
  6. (gile)

    Lisps de gile

    Ouvre le fichier %appdata%\Autodesk\ApplicationPlugins\RadicalPurge.bundle\PackageContents.xml avec un éditeur de texte et vérifie que vers la fin du fichier tu aies ça : <Components Description="2013 to 2018 parts"> <RuntimeRequirements SupportPath="./Contents" OS="Win32|Win64" Platform="AutoCAD*" SeriesMin="R19.0" SeriesMax="R22.0" /> Sinon remplace SeriesMax="R21.0" par SeriesMax="R22.0".
  7. (gile)

    Lisps de gile

    Salut, Désinstalle proprement RadiacalPurge via le panneau de configuration et télécharge et installe la dernière version. RadicalPurge sera utilisable sur toutes les versions pleines d'AutoCAD 2012 à 2018 installées sur le poste.
  8. Salut, Si tu veux voir la spline au fur et à mesure que tu spécifies des points il faut faire : (command "_.spline" pdep) (while (< 0 (getvar "cmdactive")) (command pause) ) mais l'utilisateur devra faire lui même les 3 validations pour sortir de la commande SPLINE.
  9. Salut, Je ne suis pas sûr de comprendre ce que tu cherches à faire, mais essaye ça : (defun c:TEST (/ pdep pfin pmil pt) ;; point de départ de l'arc (centre pie) (setq pdep (getpoint "\nSpécifiez le premier point: ")) ;; défini les point l'arc (setq pmil (getpoint pdep "\nSpécifiez le deuxième point: ")) ; milieu de l'arc (setq pfin (getpoint pdep "\nSpécifiez le troisièmepoint: ")) ; fin de l'arc ;; trace l'arc (command "_.arc" pdep pmil pfin "") ;; dessine l'arc ;; trace la spline (command "_.spline" pdep) (while (setq pt (getpoint pdep "\nPoint suivant: ")) (command pt) ) (command "" "" "") (princ) )
  10. Salut, Pour commencer, ne laisse à l'intérieur de la boucle while que ce qui doit être répété : inutile de modifier ATTREQ deux fois à chaque itération. Sinon, tu peux essayer de modifier l'état de visibilité dans un premier temps puis modifier la valeur de l'attribut qui est visible (ne pas perdre de vue que quand on modifie une propriété dynamique d'un bloc, AutoCAD crée une nouvelle définition de bloc anonyme).
  11. Salut, Pour utiliser connaître les propriétés utilisables avec les fonctions getpropertyvalue et setpropertyvalue, tu utilises la fonction dumpallproperties sur un objet de même type : (dumpallproperties (car (entsel)))et tu auras, dans la fenêtre de texte (F2), les propriétés accessibles pour ce type d'entitié. ensuite il faut faire quelques essais. Dans le cas présent, ça devrait être : (setpropertyvalue bloc "AcDbDynBlockPropertyCouleur" "1")
  12. Salut, Je pense que le fait de baser la formation sur l'élaboration d'une boite de dialogue n'était peut-être pas une bonne idée. Avec le DCL on passe (on perd) beaucoup de temps sur des détails accessoires. Le fait que ton programme ne soit pas terminé à la fin de la formation n'est pas un problème si ton formateur t'a donné les clés pour le finir tout seul. À mon avis une formation doit insister sur les fondamentaux et surtout donner des moyens pour poursuivre l'auto-apprentissage.
  13. En fait, ça, c'est vraiment très formateur.
  14. Tu pourrais aussi utiliser des cases à cocher plutôt que des boutons radio "Oui" / "Non". Et pour simplifier la chose, stocker dans les ldata "1" ou "0" plutôt "Oui" ou "Non" de manière à les utiliser directement dans la boite de dialogue. DCL :boxed_column { label = "Paramètres du texte"; :toggle{label = "Inclure les coordonées"; key = "XYZ";} :toggle{label = "Saisie d'un texte avant"; key = "TxtAv";} :toggle{label = "Saisie d'un texte après"; key = "TxtAp";} } LSP (set_tile "XYZ" Xyz) (set_tile "TxtAv" SaisiTxtAv) (set_tile "TxtAp" SaisiTxtAp) (action_tile "XYZ" "(setq Xyz $value)") (action_tile "TxtAv" "(setq SaisiTxtAv $value)") (action_tile "TxtAp" "(setq SaisiTxtAp $value)") (setq status (start_dialog)) (unload_dialog dcl_id) (if (= 1 status) (progn (vlax-ldata-put "DenisH" "FlXYZ" Xyz) (vlax-ldata-put "DenisH" "FlXYZSaisiTxtAv" SaisiTxtAv) (vlax-ldata-put "DenisH" "FlXYZSaisiTxtAp" SaisiTxtAp) ) )
  15. Première chose : on écrit "value = 1;" (avec un point-virgule) dans le DCL pour assigner une valeur par défaut. Dans le set_tile d'un bouton radio ou d'une case à cocher (toggle), on écrit : (set_tile "laClé" "1"). Mais comme je te le disais il est plus pratique d'utiliser la clé du conteneur dont la valeur est toujours la clé du bouton radio activé. Par contre, je me suis trompé, ce n'est pas un contrôle boxed_row, mais un contrôle boxed_radio_row (ou radio_row) qu'il faut utiliser. DCL :boxed_column { label = "Paramètres du texte"; :boxed_radio_row { label = "Inclure les coordonées"; key = "XYZ"; :radio_button {label = "Oui"; key="XYZOui";} :radio_button {label = "Non"; key="XYZNon";} } :boxed_radio_row { label = "Saisie d'un texte avant"; key = "TxtAv"; :radio_button {label = "Oui"; key="TxtAvOui";} :radio_button {label = "Non"; key="TxtAvNon";} } :boxed_radio_row { label = "Saisie d'un texte après"; key = "TxtAp"; :radio_button {label = "Oui"; key="TxtApOui";} :radio_button {label = "Non"; key="TxtApNon";} } } LSP (il est peut-être préférable de ne pas modifier les ldata dans les action des boutons radio pour laisser la possibilité à l'utilisateur d'annuler). (set_tile "XYZ" (strcat "XYZ" Xyz)) (set_tile "TxtAv" (strcat "TxtAv" SaisiTxtAv)) (set_tile "TxtAp" (strcat "TxtAp" SaisiTxtAp)) ;; actions : on ne modifie que les variables pour l'instant (action_tile "XYZ" "(setq Xyz (substr $value 4))") (action_tile "TxtAv" "(setq SaisiTxtAv (substr $value 6))") (action_tile "TxtAp" "(setq SaisiTxtAp (substr $value 6))") (setq status (start_dialog)) (unload_dialog dcl_id) ;; si l'utilisateur a fait OK on modifie les ldata (if (= 1 status) (progn (vlax-ldata-put "DenisH" "FlXYZ" Xyz) (vlax-ldata-put "DenisH" "FlXYZSaisiTxtAv" SaisiTxtAv) (vlax-ldata-put "DenisH" "FlXYZSaisiTxtAp" SaisiTxtAp) ) )
  16. Tu peux même simplifier/optimiser la chose en choisissant des clés pour les boutons radio équivalentes aux valeurs de la variable Xyz ("Oui" ou "Non"). DCL :boxed_row { label = "Inclure les coordonées"; key="XYZ"; :radio_button {label = "Oui"; key="Oui";} :radio_button {label = "Non"; key="Non";} } LSP (set_tile Xyz "1") ... (action_tile "XYZ" "(setq Xyz $value)")
  17. Salut, Si les contrôles radio_button sont dans un conteneur (boxed_row ou boxed_column) la bascule se fera automatiquement. DCL :boxed_row { label = "Inclure les coordonées"; key="XYZ"; :radio_button {label = "Oui"; key="XYZOui";} :radio_button {label = "Non"; key="XYZNon";} } LSP (if (= Xyz "Oui") (set_tile "XYZOui" "1") (set_tile "XYZOui" "0") ; ou (set_tile "XYZNon" "1") ) Ensuite, tu peux directement récupérer le bouton radio coché via la clé du conteneur (get_tile "XYZ") retournera "XYZOui" ou "XYZNon".
  18. (defun c:MAGDI95 (/ blk lst) (while (and (setq blk (car (entsel "\nSélectionnez une étiquette ou valider par Entrée: "))) (= (getpropertyvalue blk "LocalizedName") "Référence de bloc") (= (getpropertyvalue (getpropertyvalue blk "BlockTableRecord") "Name" ) "ETIQUETTE TRONCON" ) ) (setq lst (vl-list* (getpropertyvalue blk "TRONCON") (getpropertyvalue blk "OUVRAGE") lst ) ) ) (if (and lst (setq pt (getpoint "\nPoint d'insertion du texte: ")) ) (command "_.text" pt "" "" (apply 'strcat (reverse lst))) ) (princ) )
  19. Si tu peux mettre ton bloc en téléchargement, on devrait gagner du temps.
  20. Salut, Un petit truc vite fait. Il faut remplacer le nom du bloc étiquette et des attributs dans le code (defun c:MAGDI95 (/ blk lst) (while (and (setq blk (car (entsel "\nSélectionnez une étiquette ou valider par Entrée: "))) (= (getpropertyvalue blk "LocalizedName") "Référence de bloc") (= (getpropertyvalue blk "BlockTableRecord/Name") "etiquette") ; <- remplacer par le nom du bloc ) (setq lst (vl-list* (getpropertyvalue blk "B") ; <- remplacer par l'étiquette de l'attribut "B" (getpropertyvalue blk "A") ; <- remplacer par l'étiquette de l'attribut "A" lst ) ) ) (if (and lst (setq pt (getpoint "\nPoint d'insertion du texte: ")) ) (command "_.text" pt "" "" (apply 'strcat (reverse lst)) "") ) (princ) )
  21. Je me permet d'insister parce que j'ai déjà eu à me pencher sur des problèmes de garde corps. Que ce soit un balcon ou une terrasse ne change en rien le fait tous deux puissent avoir à la fois des angles entrants et sortants. Le fait que la "ligne de balcon" tourne à droite ou à gauche n'est pas un critère fiable pour déterminer l'intérieur et l'extérieur. http://gile.pagesperso-orange.fr/Images/balcon.png Ceci peut être résolu par une convention basée sur le sens de la polyligne figurant la "ligne de balcon" (par exemple : dans le sens de la polyligne, l'extérieur est toujours à droite. http://gile.pagesperso-orange.fr/Images/balcon_2.png
  22. Salut, Pour savoir si deux segments, ou plus précisément trois points, tourne vers la droite (sens horaire ou clockwise en anglais) ou vers la gauche, il existe de nombreuses routine nommées clockwise, clockwisep ou clockwise-p. Je te donne celle extraite de gc_MathGeom sur cette page : ;; gc:Clockwise ;; Evalue si les points p1 p2 et p3 tournent dans le sens horaire ;; ;; Arguments ;; p1, p2, p3 trois points 2d figurant un triangle dans le plan XY (defun gc:Clockwise (p1 p2 p3) (< (- (* (- (car p2) (car p1)) (- (cadr p3) (cadr p2))) (* (- (cadr p2) (cadr p1)) (- (car p3) (car p2))) ) 1e12 ) ) Néanmoins, l'intérieur ou l'extérieur d'un angle n'indique pas forcément l'intérieur ou l'extérieur d'un balcon qui peut aussi avoir des angles "entrants".
  23. C'est une erreur de ma part : Remplace : ;; nom d'entité du bloc inséré (setq bloc entlast) par : ;; nom d'entité du bloc inséré (setq bloc (entlast))
  24. Si, tu peux en faire des fichiers bloc avec WBLOC parce que ce sont les définitions de bloc qui ont été modifiées.
  25. Salut, Pour que la méthode donnée par didier fonctionne, il faut que les attributs ne soit pas prédéfinis (propriété "Prédéfini" de la définition d'attribut = "Non"). Tu peux modifier ça dans l'éditeur de blocs. Il faut aussi que la variable ATTREQ soit à 1 et que ATTDIA soit à 0. Quand on modifie des variables système dans un programme, il est de restaurer leur valeurs initiales ensuite. (defun c:BLOC_INS (/ Nom_AT1 Nom_AT2 Nom_AT3 pins attreq attdia) ;; paramétrage des attributs (setq Nom_AT1 (getstring "\nEntrer le Nom app :")) (setq Nom_AT2 (getstring "\nEntrer le Type d'app :")) (setq Nom_AT3 (getstring "\nEntrer le numero de l'APP :")) (setq pins (getpoint "\nInsertion ?\n")) ;; enregistrement des valeurs initiales des variables système (setq attreq (getvar "ATTREQ") attdia (getvar "ATTDIA") ) ;; modification des valeurs courantes des variables système (setvar "ATTREQ" 1) (setvar "ATTDIA" 0) ;; insère le bloc (command "_insert" "Param_APP" pins 1 1 0 Nom_AT1 Nom_AT2 Nom_AT3) ;; restauration des valeurs initiales des variables système (setvar "ATTREQ" attreq) (setvar "ATTDIA" attdia) (princ) ) Sinon, pour que le LISP fonctionne indifféremment avec des attributs prédéfinis ou non, on peut faire quelque chose de proche de ton premier jet. Là encore, il est prudent de forcer temporairement la valeur de ATTREQ à 0 cette fois. Pour assigner les valeurs d'attribut, on peut utiliser la fonction setpropertyvalue (depuis AutoCAD 2012). (defun c:BLOC_INS (/ Nom_AT1 Nom_AT2 Nom_AT3 pins attreq) ;; paramétrage des attributs (setq Nom_AT1 (getstring "\nEntrer le Nom app :")) (setq Nom_AT2 (getstring "\nEntrer le Type d'app :")) (setq Nom_AT3 (getstring "\nEntrer le numero de l'APP :")) (setq pins (getpoint "\nInsertion ?\n")) ;; enregistrement des valeurs initiales de la variable système (setq attreq (getvar "ATTREQ")) ;; modification des valeurs courantes de la variable système (setvar "ATTREQ" 0) ;; insère le bloc (command "_insert" "Param_APP" pins 1 1 0) ;; restauration des valeurs initiales de la variable système (setvar "ATTREQ" attreq) ;; nom d'entité du bloc inséré (setq bloc entlast) ;; assignation des valeurs d'attribut (setpropertyvalue bloc "NOM_APP" Nom_At1) (setpropertyvalue bloc "TYPE_LGT" Nom_At2) (setpropertyvalue bloc "N_LGT" Nom_At3) (princ) ) Tu peux noter la déclaration locale des variables. C'est une bonne habitude à prendre.
×
×
  • 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é