Aller au contenu

Patrick_35

Membres
  • Compteur de contenus

    6 374
  • Inscription

  • Dernière visite

  • Jours gagnés

    30

Tout ce qui a été posté par Patrick_35

  1. Salut Par exemple uniquement la sélection des lignes et polylignes sur tous les calques commencant par CAL _Filter --> Sélection du filtre --> Calque --> CAL* --> Ajouter à la liste --> Sélection du filtre --> **Début OR --> Ajouter à la liste --> Sélection du filtre --> Ligne --> Ajouter à la liste --> Sélection du filtre --> Polyligne --> Ajouter à la liste --> Sélection du filtre --> **Fin OR --> Ajouter à la liste --> Appliquer Un autre exemple pour tout sélectionner sauf les arcs de cercles _Filter --> Sélection du filtre --> **Début NOT --> Ajouter à la liste --> Sélection du filtre --> Arc --> Ajouter à la liste --> Sélection du filtre --> **Fin NOT --> Ajouter à la liste --> Appliquer Et un petit dernier pour sélectionner tous les blocs n'appartenant pas aux calques commencant par CAL (histoire de jouer ;) ) _Filter --> Sélection du filtre --> Calque --> ~CAL* --> Ajouter à la liste --> Sélection du filtre --> Bloc --> Ajouter à la liste --> Appliquer Extrait de l'aide Autocad (fonction lisp wcmatch) @+
  2. Si tu fais en ligne de commande (findfile "acad.exe"), tu devrais avoir un résultat (je ne doute pas pour AutoCAD.exe) Je pense que c'est le strings.exe qui est introuvable et qu'il faut le mettre ou déclarer dans les chemins de recherche Autocad @+
  3. Salut Comme le montre Lili, tu peux sélectionner un bloc (ajouter l'objet sélectionné <), supprimer, modifier ou ajouter des éléments dans la liste. Tu peux aussi jouer avec les AND, OR, NOT et XOR et les caractères spéciaux (comme *, ~ pour le not, etc... (voir la fonction lisp wcmatch pour toutes les options possibles)). La commande _filter permet un nombre de choix incroyable. Et si jamais tu as un filtre complexe à réaliser, tu peux le sauvegarder pour le réutiliser ultérieurement. @+
  4. Bonjour Lili C'est comme pour les boites de dialogues. Il faut qu'autocad retrouve ses petits. (findfile "acad.exe") --> non nil (findfile "accore.dll") --> non nil (findfile "acwindows.dll") --> non nil (findfile "strings.exe") --> non nil @+
  5. Salut Lili Un truc que je m'étais fait. (defun c:variables(/ cad che evr fic lin lst_evr lst_srv ori svr) (setq cad (list (findfile "acad.exe") (findfile "accore.dll") (findfile "acwindows.dll") (findfile "strings.exe") ) che (strcat (vl-filename-directory (nth 1 cad)) "\\Variables.") ori (strcat che (substr (vla-get-version (vlax-get-acad-object)) 1 5)) ) (or (findfile ori) (progn (setq fic (open (strcat che "bat") "w")) (write-line (strcat "\"" (nth 3 cad) "\" -u -n 3 \"" (nth 0 cad) "\" > \"" ori "\"") fic) (write-line (strcat "\"" (nth 3 cad) "\" -u -n 3 \"" (nth 1 cad) "\" >> \"" ori "\"") fic) (write-line (strcat "\"" (nth 3 cad) "\" -u -n 3 \"" (nth 2 cad) "\" >> \"" ori "\"") fic) (close fic) (startapp (strcat "\"" che "bat\"")) (repeat 5000000) (setq fic (open ori "r") evr (open (strcat che "evr") "w") svr (open (strcat che "svr") "w") ) (while (setq lin (read-line fic)) (cond ( (and (getenv lin) (not (vl-position lin lst_evr)) ) (setq lst_evr (cons lin lst_evr)) ) ( (and (getvar lin) (not (vl-position lin lst_svr)) ) (setq lst_svr (cons lin lst_svr)) ) ) ) (foreach lin lst_evr (write-line lin evr) ) (foreach lin lst_svr (write-line lin svr) ) (mapcar 'close (list fic evr svr)) ) ) (list (strcat che "evr") (strcat che "svr")) ) ps : le lisp doit retrouver les fichiers "acad.exe", "accore.dll", "acwindows.dll" et "strings.exe" @+
  6. Bonjour à tous Si, avec la commande _filter _filter --> Sélection du filtre --> Calque --> Sélectionner... --> Choix des calques (sélection multiple possible) --> Ajouter à la liste --> Appliquer --> Sélection des objets @+
  7. Et une autre plus courte (defun compare(a B) (while (and a b (= (length a) (length B))) (setq b (vl-remove (car a) B) a (vl-remove (car a) a) ) ) (if (eq (length a) (length B)) T nil ) ) Et une optimisation (defun compare(a B) (while (and a b (= (length a) (length B))) (setq b (vl-remove (car a) B) a (vl-remove (car a) a) ) ) (eq (length a) (length B)) ) @+
  8. Salut Ma contribution (defun compare (a b / p s) (defun s(l p / B) (setq i 0) (while l (or (eq i p) (setq b (cons (car l) B)) ) (setq l (cdr l) i (1+ i) ) ) b ) (while (setq p (vl-position (car a) B)) (setq b (s b p) a (cdr a) ) ) (if (or a B) nil T ) ) Une version améliorée (defun compare (a b / p s) (defun s(l p / a B) (setq a (nth p l) b (vl-remove a l) ) (repeat (- (length l) (length B) 1) (setq b (cons a B)) ) b ) (while (setq p (vl-position (car a) B)) (setq b (s b p) a (cdr a) ) ) (if (or a B) nil T ) ) @+
  9. je suis pour la paix des ménages. :(rires forts):
  10. Salut Pour le pantalon, prends-le avec des fermetures éclairs sur le côté, c'est plus facile à enfiler avec les chaussures, surtout quand tu dois t'arrêter rapidement quand il pleut. Mais ce n’est pas top pour ceux qui ont les commandes avancées car l'ouverture en bas de pantalon est trop large. Dans ce cas, vive les pinces à vélo. @+
  11. Salut Tu as GEF @+
  12. Salut Je pense que cela est tout à fait possible. Il faut juste programmer et ce type de demande n'est pas à la portée du premier venu. Perso, j'ai autre chose à faire et ce type de requette demande une grosse part d'investissement et je n'ai pas de temps à y consacrer. @+
  13. Salut Bruno Oui, mais si le bloc est aussi dans une présentation ? Du moment qu'il ne fini pas comme Vincent Lagaf :D ps : dommage d'avoir deux and qui se suivent ;) pps : (and (not ...)) = (or ...) @+
  14. Salut Un exemple pour lister les blocs qui sont dans les présentations (defun lstblpre(/ doc ent lst nom nombl sel) (defun nombl(bl) (if (vlax-property-available-p bl 'effectivename) (vla-get-effectivename bl) (vla-get-name bl) ) ) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (and (ssget "x" (list (cons 0 "insert") (cons 67 1))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (or (vl-position (setq nom (nombl ent)) lst) (setq lst (cons nom lst)) ) ) (vla-delete sel) ) ) lst ) Et à remplacer dans le lisp (and (eq (vla-get-islayout blo) :vlax-false) (vlax-for ent blo (and (eq (vla-get-objectname ent) "AcDbHatch") (= (vla-get-patternname ent) "SOLID") (vla-delete ent) ) ) ) Par (or (eq (vla-get-islayout blo) :vlax-true) (vl-position (vla-get-name blo) lst) (vlax-for ent blo (and (eq (vla-get-objectname ent) "AcDbHatch") (= (vla-get-patternname ent) "SOLID") (vla-delete ent) ) ) ) ps : il reste juste à intégrer dans le lisp la fonction lstblpre (liste blocs présentations) et ranger le résultat de la fonction dans la variable lst pps : non testé @+
  15. Salut Plutôt que de t'indiquer où le mettre, je vais t'expliquer la logique (vla-get-documents (vlax-get-acad-object)) permet d'avoir la liste des documents ouverts dans Autocad Un (vla-item table élément) nom permet de savoir si l'élément existe dans la table Donc un (vla-item (vla-get-documents (vlax-get-acad-object)) "Dessin2.dwg") permet de savoir si le "Dessin2.dwg" est ouvert dans Autocad. Si ce n'est pas le cas, j'ai un message d'erreur et le lisp s'arrête. Donc à moi de la gérer grâce à vl-catch-all-error et pour savoir si c'est une erreur, avec vl-catch-all-error-p Donc, (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list (vla-get-documents (vlax-get-acad-object)) "Dessin2.dwg"))) veut dire si j'ai une erreur en regardant si le "dessin2.dwg" est ouvert. @+
  16. Salut (setq tbl '("Nom BLOC" "123" "ABC" "BBB" "123" "AAA" "BBB" "123" "BBB" "123" "ABC" "789" "123")) (while tbl (setq n (length tbl) js (car tbl) tbl (vl-remove js tbl) lst (cons (cons js (- n (length tbl))) lst) ) ) (reverse lst) --> (("Nom BLOC" . 1) ("123" . 5) ("ABC" . 2) ("BBB" . 3) ("AAA" . 1) ("789" . 1)) @+
  17. Par exemple avec Dessin2.dwg (or (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list (vla-get-documents (vlax-get-acad-object)) "Dessin2.dwg"))) (vla-open (vla-get-documents (vlax-get-acad-object)) "Dessin2.dwg") ) @+
  18. Poutant il fonctionne si 1) S'il trouve le fichier H:/test.txt 2) Si on sélectionne un bloc 3) Si le fichier est trouvé dans les chemins de recherches ou dans les chemins indiqués dans le fichier H:/test.txt J'ai quand même testé avant de le publier @+
  19. Salut Ce serait sympa de donner la réponse. Bon, je t'ai quand même fait quelque chose (defun c:newopen-bl(/ bloc chemin fichier folderlist ent lecture nombl path pointer) (defun nombl(bl) (if (vlax-property-available-p bl 'effectivename) (vla-get-effectivename bl) (vla-get-name bl) ) ) (setq pointer "H:" fichier "/test.txt" ) (and (setq folderlist (findfile (strcat pointer fichier))) (setq ent (entsel "\nSelect Block Entity: ")) (setq ent (vlax-ename->vla-object (car ent))) (eq (vla-get-objectname ent) "AcDbBlockReference") (progn (setq bloc (nombl ent) chemin "" lecture (open folderlist "r") ) (while (and chemin (not (setq path (findfile (strcat chemin bloc ".dwg")))) ) (setq chemin (read-line lecture)) ) (close lecture) (and path (if (eq (getvar "sdi") 0) (vla-activate (vla-open (vla-get-documents (vlax-get-acad-object)) path)) (if (eq (getvar "dbmod") "0") (vl-cmdf "_.open" path) (vl-cmdf "_.open" "_yes" path) ; ATTENTION, FERME LE DESSIN SANS SAUVEGARDE ) ) ) ) ) (princ) ) @+
  20. Patrick_35

    Lettre de stage insolite !!

    Bonjour Cette demande me laisse perplexe. Le plus est la démarche sur le ton de l'humour et de chercher à se démarquer. Le moins est le copier/coller (merci LrDb). Chercher sur internet, trouver des idées, c'est bien mais il aurait dû au moins personnaliser sa demande. Et un autre moins qui est quand même assez rédhibitoire (à mon sens, à moins que je devienne trop vieux jeu) sont certains mots d'argot employés pour une lettre de motivation. @+
  21. Je viens de voir que ton -1 est revenu à 0 et j'ajoute +1 ;) L'idée est bonne, mais rarement utilisée. Je pense que l'indicateur le plus fiable est le nombre de messages, à moins d'être un grand bavard (non, non, pas de noms non plus....) @+
  22. Salut On a tous commencé et c'était des super codes à l'époque ;) Nos techniques évoluent et quand je regarde le mien, il y a plusieurs pistes d'optimisations. Mais il fonctionne très bien et l'améliorer n'apportera que quelques millisecondes, alors... @+
  23. Hello je suis comme phil DES NOMS...DES NOMS...DES NOMS... :D @+
  24. Salut Un de mes premiers lisp, donc sans v-lisp. Ne fonctionne que sur des lignes, mais qu'importe l'angle. ;;;================================================================= ;;; ;;; COUP.LSP V1.00 ;;; ;;; Copyright (C) Patrick_35 ;;; ;;;================================================================= (defun c:coup(/ cmd h s) ;;;--------------------------------------------------------------- ;;; ;;; Gestion des erreurs ;;; ;;;--------------------------------------------------------------- (defun *errcoup* (msg) (if (/= msg "Function cancelled") (if (= msg "quit / exit abort") (princ) (princ (strcat "\nErreur : " msg)) ) (princ) ) (setq *error* s) (setvar "pickadd" h) (setvar "cmdecho" cmd) (princ) ) ;;;--------------------------------------------------------------- ;;; ;;; Couper une ligne ;;; ;;;--------------------------------------------------------------- (defun couper_ligne(/ a b c d e f g n o p1 p2 q) ;;;--------------------------------------------------------------- ;;; ;;; Trier les points d'intersections ;;; ;;;--------------------------------------------------------------- (defun trie_liste(o / b c d f i k n l) (setq b e) (setq l 0) (while (/= (car B) nil) (setq i (car B)) (cond ((or (= o "DG") (= o "GD")) (foreach n b (if (< (car n) (car i)) (setq i n) ) ) ) ) (cond ((or (= o "HB") (= o "BH")) (foreach n b (if (< (cadr n) (cadr i)) (setq i n) ) ) ) ) (cond ((or (= o "BGH") (= o "HDB")) (foreach n b (if (< (car n) (car i)) (setq i n) ) ) (foreach n b (if (and (= (car n) (car i)) (< (cadr n) (cadr i))) (setq i n) ) ) ) ((or (= o "HGB") (= o "BDH")) (foreach n b (if (< (car n) (car i)) (setq i n) ) ) (foreach n b (if (and (= (car n) (car i)) (> (cadr n) (cadr i))) (setq i n) ) ) ) ) (setq d (append (list i) d)) (setq c nil) (foreach n b (if (/= n i) (setq c (append (list n) c)) ) ) (setq b c) (setq l (1+ l)) ) (if (or (= o "GD") (= o "BH") (= o "BGH") (= o "BGD") (= o "HGB") (= o "BDG")) (setq e (reverse d)) (setq e d) ) ) ;;;--------------------------------------------------------------- ;;; ;;; Routine de Couper ;;; ;;;--------------------------------------------------------------- (princ "\nSélectionnez la ligne à couper.") (setq e nil) (setvar "pickadd" 0) (setq a (ssget)) (if a (progn (setq n 0) (while (ssname a n) (if (= (cdr (assoc 0 (entget (ssname a n)))) "LINE") (setq b n) ) (setq n (1+ n)) ) (if b (progn (princ "\nSélectionnez les intersections.") (setvar "pickadd" 1) (setq c (ssget)) (if c (progn (setq n 0) (setq d nil) (while (ssname c n) (if (= (cdr (assoc 0 (entget (ssname c n)))) "LINE") (setq d n) ) (setq n (1+ n)) ) (if d (progn (setq n 0) (setq i 0) (setq b (entget (ssname a B))) (while (ssname c n) (setq d (entget (ssname c n))) (if (= (cdr (assoc 0 d)) "LINE") (progn (setq f (inters (list (cadr (assoc 10 B)) (caddr (assoc 10 B))) (list (cadr (assoc 11 B)) (caddr (assoc 11 B))) (list (cadr (assoc 10 d)) (caddr (assoc 10 d))) (list (cadr (assoc 11 d)) (caddr (assoc 11 d))))) (if f (progn (setq i (1+ i)) (setq e (append (list f) e)) ) ) ) ) (setq n (1+ n)) ) (if e (progn (cond ((= (cadr (assoc 10 B)) (cadr (assoc 11 B))) (if (> (caddr (assoc 10 B)) (caddr (assoc 11 B))) (setq o "HB") (setq o "BH") ) ) ((= (caddr (assoc 10 B)) (caddr (assoc 11 B))) (if (> (cadr (assoc 10 B)) (cadr (assoc 11 B))) (setq o "DG") (setq o "GD") ) ) ((> (cadr (assoc 10 B)) (cadr (assoc 11 B))) (if (> (caddr (assoc 10 B)) (caddr (assoc 11 B))) (setq o "HDB") (setq o "BGH") ) ) ((< (cadr (assoc 10 B)) (cadr (assoc 11 B))) (if (> (caddr (assoc 10 B)) (caddr (assoc 11 B))) (setq o "HGB") (setq o "BDH") ) ) ) (trie_liste o) (if (or (= o "BDH") (= o "BGH")) (progn (setq e (reverse e)) (setq k (angle (list (cadr (assoc 11 B)) (caddr (assoc 11 B))) (list (cadr (assoc 10 B)) (caddr (assoc 10 B))))) ) (setq k (angle (list (cadr (assoc 10 B)) (caddr (assoc 10 B))) (list (cadr (assoc 11 B)) (caddr (assoc 11 B))))) ) (setq g (getreal (strcat "\nValeur du décalage <" (rtos g_lign) "> : "))) (if g (setq g_lign g) ) (setq n 0) (while (nth n e) (setq p1 (polar (nth n e) k g_lign)) (setq p2 (polar (nth n e) k (- g_lign))) (command "_.break" (cdr (assoc -1 B)) "_none" p1 "_none" p2) (setq q (entget (ssname (ssget "_l") 0))) (if (/= (cdr (assoc -1 B)) (cdr (assoc -1 q))) (setq b q) (setq b (entget (cdr (assoc -1 B)))) ) (setq n (1+ n)) ) ) (princ "\nPas d'intersection.") ) ) (princ "\nAucune ligne de sélectionnée.") ) ) (princ "\nAucune Sélection.") ) ) (princ "\nAucune ligne de sélectionnée.") ) ) (princ "\nAucune Sélection.") ) (princ) ) ;;;--------------------------------------------------------------- ;;; ;;; Routine de lancement ;;; ;;;--------------------------------------------------------------- (setq s *error*) (setq *error* *errcoup*) (setq cmd (getvar "cmdecho")) (setq h (getvar "pickadd")) (setvar "cmdecho" 0) (command "_.undo" "_group") (if (not g_lign) (setq g_lign 1.0) ) (couper_ligne) (command "_.undo" "_end") (setq *error* s) (setvar "pickadd" h) (setvar "cmdecho" cmd) (princ) ) (setq nom_lisp "COUP") (if (/= app nil) (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter."))) (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter."))) (setq nom_lisp nil) (princ) @+
×
×
  • 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é