-
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
-
Un p"tit truc pour t'aider à régler en visuel ton échelle de type de ligne, tu pourras ainsi essayer plusieurs valeurs avant de valider ton échelle. En effet la modification n'est visible qu'après un regen de l'écran. (defun dlterr (ch) (cond ((eq ch "Function cancelled") nil) ((eq ch "quit / exit abort") nil) ((eq ch "console break") nil) (T (princ ch)) ) (setq *error* olderr) (princ) ) (defun c:dechltp ( / ent cle nwelt olderr) (setvar "cmdecho" 0) (setq olderr *error* *error* dlterr) (setq cle "No") (prompt "\n Sélection d'une entité test : ") (cond ((setq ent (nentsel)) (while (= cle "No") (princ "\n Entrer l'échelle du type de ligne ?<") (prin1 (getvar "LTSCALE")) (princ "> : ") (initget 6) (setq nwelt (getreal)) (if (= nwelt ()) (setq nwelt (getvar "LTSCALE"))) (setvar "LTSCALE" nwelt) (entupd (car ent)) (initget "Oui Non _Yes No") (setq cle (getkword "\n OK pour cette résolution[Oui/Non] ?< O > : ")) (if (eq cle ()) (setq cle "Yes")) ) (command "_.regenall") ) (T (princ "\nSélection vide")) ) (setq *error* olderr) (setvar "cmdecho" 1) (prin1) )
-
Un autre ecrit rapidement. (à completer pour écrire le résultat dans un fichier) ((lambda ( / layer list_layers js n lst_ents typ_ent cmpt) (setq layer (tblnext "layer" t) cmpt 0) (while layer (if (zerop (boole 1 16 (cdr (assoc 70 layer)))) (setq list_layers (cons (cdr (assoc 2 layer)) list_layers)) ) (setq layer (tblnext "layer")) ) (cond (list_layers (textscr) (foreach e list_layers (setq js (ssget "_X" (list (cons 8 e)))) (setq n -1 lst_ents '()) (cond (js (repeat (sslength js) (setq typ_ent (cdr (assoc 0 (entget (ssname js (setq n (1+ n))))))) (if (not (member typ_ent lst_ents)) (setq lst_ents (cons typ_ent lst_ents)) ) ) (if lst_ents (progn (print (strcat "Le calque " e " contient: ")) (setq cmpt (1+ cmpt)) (foreach x lst_ents (if (>= cmpt 32) (progn (princ "\n<-- Tapez une touche pour la suite -->") (grread) (setq cmpt 0) ) (setq cmpt (1+ cmpt)) ) (princ "\n\t\t") (princ (itoa (sslength (ssget "_X" (list (cons 0 x) (cons 8 e)))))) (princ " ") (princ x) ) ) ) ) ) ) ) ) (prin1) )) [Edité le 15/4/2006 par bonuscad]
-
Pour créer une bibliothèque de clichés, il faut utiliser un module extene à Autocad "SLIDELIB.EXE" en mode console DOS. Le plus simple fait une recherche de ce fichier pour le localiser. Déplace tout tes clichés dans ce même dossier En console DOS dans ce dossier, fais un: dir *.sld > slides.txt puis slidelib mescliché < slide.txt un fichier mescliche.slb devrait êtrer créé dans ce dossier. PS: J'aime pas trop lire en majuscule, et il semble que ça signifie que tu cris ou elève la voix. ;)
-
tblsearch et style de texte et de ligne ?
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Denis, Je n'ai rien à dire de plus sur la syntaxe que (gile), sauf un détail qui ne porte pas à conséquence. Il est préférable d'utiliser (null) au lieu de (not). Null est plutôt destiné aux listes et Not aux atomes. (tblsearch) lui renvoi une liste donc (null) est plus approprié. (mais vu que (tblsearch) renvoi nil (atome) quand il trouve rien , not fonctionne) Par contre je te conseille vivement de rajouter tons dossier "s:/config/phalène/" dans les chemins de recherches d'autocad et ainsi tu pourras faire: (command "-typeligne" "ch" TypLign "phalène.lin" "") Comme ça le jours ou tu changes ton aborecense, tu n'auras pas besoin de passer tout tes lisps en revu pour les corriger pour qu'ils fonctionnent. UN CONSEIL D'AMI n'utilise pas les caractères accentués, sa t'éviteras de te tirer les cheveux par la suite (à moins que tu n'en ais plus déjà) ;) Dernier chose si tu as des amis Quebecois, internationalise tes commandes, si eux sont bilingues, autocad ne l'est pas! -
(setq sel (ssget)) (command "_copy" sel "" (setq pA (getpoint)) pause) (setq pB (getvar "lastpoint")) C'était pas loin ! ;)
-
Effacer lignes suivant leur longueur
bonuscad a répondu à un(e) sujet de bonuscad dans Routines LISP
C'est pas les accords (musicaux) de Yalta, mais ravi de t'avoir rendu heureux. ;) -
Je pense plutôt sous cette forme: (setq n '("c:\\toto.lsp")) (vl-catch-all-apply 'load n) ou alors peut être plus interessant, sous celle-ci: (foreach n '(("c:\\titi.lsp") ("c:\\toto.lsp") ("c:\tatat.lsp") ("c:\\tutu.lsp")) (vl-catch-all-apply 'load n) )
-
Lister les onglets présentation
bonuscad a répondu à un(e) sujet de Dubloc dans Pour aller plus loin en LISP
Wahouu , Tramber il esit sont post et en fait un autre avant que je clique sur réponse. Tramber Lucky Luke :P -
Lister les onglets présentation
bonuscad a répondu à un(e) sujet de Dubloc dans Pour aller plus loin en LISP
Pour une fois que le lisp basique est tout aussi efficace en plus simple, je ne vais pas me gêner ;) (cons "Model" (layoutlist)) -
Ceux-ci ne sont pas des blocs anonymes ! Les blocs anonymes ont un nom commencant par * et suivi d'une lettre tel que U ou D (cotations) et d'autres que je ne me souviens plus et un chiffre incrémenter par AutoCad. Les anciennes hachures utilisaient ces noms par U. Je penses qu'autodesk a verrouillé le nom de ces blocs pour éviter que l'on "foute le bazard" dans les cotations par exemples. L'utilisateur peut en créer (par programmation), mais la modification dans les tables devient impossible ou pas du tout aisée.
-
Effacer lignes suivant leur longueur
bonuscad a répondu à un(e) sujet de bonuscad dans Routines LISP
Dans mon cas, j'ai importé un DXF d'un logiciel tiers. Celui ci m'a produit plein de petite marques de repérage verticale sous forme de polyligne optimisée (toutes de même longueur, et il y en avait beaucoup) dont je n'avais aucune utilité. Au lieu de passer beucoup de temps à les efffacer manuellement (Filtre ne propose pas ce genre de chose), j'ai pu faire ça en quelque secondes (pas le programme ;) ) En fait ceci est utile pour des dessins générés en automatique et importé par la suite dans Autocad. Mais il peut y avoir d'autres raisons, que je n'ai pas en tête -
Effacer lignes suivant leur longueur
bonuscad a répondu à un(e) sujet de bonuscad dans Routines LISP
J'ai modifié le post original Pour les espaces à supprimer essayez de le faire comme il faut, là je ne peux pas vous aider :( C'est l'inconvénient de l'interprétation des signes < et > par le forum. Tatonnez si ça ne fonctionne pas du 1er coup. ;) -
Effacer lignes suivant leur longueur
bonuscad a répondu à un(e) sujet de bonuscad dans Routines LISP
La ligne originale: (if (<= dis_ent dis_ref) ; si la distance de l'entité est inférieur ou égal à la distance de référence Tu peux changer le test de condition en plusieurs possibilité (= dis_ent dis_ref) ; a priori ce qui t'interesse ou (< dis_ent dis_ref) etc... On peut même envisager aussi l'ajout d'une option comme ceci: (initget 1 "> >= < <= =") (setq key (getkword "\nChoix du test à appliquer [>/>=/< / < =/=]: ")) (if ((eval (read key)) dis_ent dis_ref) ATTENTION aux espace que j'ai du rajouter pour un affichage correct de " < " -
Essayé avec un bloc anonyme Bien que result -> vrai (vla-put-name result nouvnom) ne fonctionne pas! :casstet: (entmod) ou (vla-put-....) même combat :P
-
Ouff, ca y est il a compris le (cond :P d'où l'importance de l'ordre des conditions dans certain cas comme le disais mon post en chinois :exclam:
-
Mauvaise nouvelle l'ami ! J'ai essayé de faire quelque chose, mais je me suis heurté à une impossibilité: (entmod) refuse de modifier la table des blocs. Donc pas de solution relativement simple. La seule voie qui resterais peut être possible (mais beaucoup plus lourde à mettre en place), serait de passer par (entmake), avec lui on peut créer des blocs anonyme d'ailleurs, ce que ne peut faire la commande standard "bloc" Pour schématiser, comme si tu explosais ton bloc pour le reconstruire avec un "nom". D'ailleurs a tu essayé cette méthode manuelle pour redéfinir ton bloc avec nouveau nom? Pour info: Les blocs anonymes seront automatiquement purgés, s'ils ne sont pas référencés (insérés) dans le dessin lors de la prochaine ouverture de celui-ci.
-
Je viens juste de me créer une petite routine pour supprimer des lignes ou polylignes optimisées à 2 sommets d'une longueur donnée. Pour mon besoin, elle a bien fonctionnée, mais c'est possible qu'elle ait encore besoin d'ajustement. Voilà si quelqu'un à besoin de ce genre de truc (defun c:del_line_by_dist ( / dis_ref js nb_ent n key ent dxf_ent lst dxf_10 dxf_11 dis_ent) (initget 69) (setq dis_ref (getdist "\nSaisir la distance de référence des lignes à supprimer: ")) (initget "Tout Selection _All Select") (if (eq (getkword "\nAppliquer à [Tout/Selection] < Tout > : ") "Select") (setq js (ssget '((0 . "LINE,LWPOLYLINE")))) (setq js (ssget "_X" '((0 . "LINE,LWPOLYLINE")))) ) (cond (js (setq nb_ent 0 n -1) (initget "< <= = > = > ") (setq key (getkword "\nChoix du test à appliquer '<' '<=' '=' '> =' '> '? défaut '<=': ")) (if (not key) (setq key "<=")) (repeat (sslength js) (setq ent (ssname js (setq n (1+ n))) dxf_ent (entget ent) ) (cond ((eq (cdr (assoc 0 dxf_ent)) "LINE") (setq dxf_10 (cdr (assoc 10 dxf_ent)) dxf_11 (cdr (assoc 11 dxf_ent)) ) ) ((and (eq (cdr (assoc 0 dxf_ent)) "LWPOLYLINE") (eq (cdr (assoc 90 dxf_ent)) 2) ) (setq lst (mapcar '(lambda (x) (trans x ent 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent))) dxf_10 (car lst) dxf_11 (cadr lst) ) ) (T (setq dxf_10 nil dxf_11 nil)) ) (if (and dxf_10 dxf_11) (progn (setq dis_ent (distance (list (car dxf_10) (cadr dxf_10)) (list (car dxf_11) (cadr dxf_11)))) (if ((eval (read key)) dis_ent dis_ref) (progn (entdel ent) (setq nb_ent (1+ nb_ent)) ) ) ) ) ) ) (T (princ "\nAucune ligne trouvée!")) ) (print nb_ent) (princ " Ligne(s) ont été effacées!.") (prin1) ) Pour que le code fonctionne ENLEVER l'espace après tous les symboles > [Edité le 13/4/2006 par bonuscad]
-
Et ce SUJET, ne pourrait pas t'aider? Oops excuse j'avais pas vu que tu y faisait référence. Pourrais tu faire un (entget (car (entsel))) sur un bloc qui te pose problème, et coller en retour. Peut être j'aurais besoin aussi d'un éventuel (entget (entnext (cdar (entget (car (entsel)))))) [Edité le 12/4/2006 par bonuscad]
-
(if (not c:appli) (load \"appli\")) pour DVB
bonuscad a répondu à un(e) sujet de LUDWIG dans Visual LISP
A une époque ou je voulais utilisé un DVB, j'avais utilisé la syntaxe suivante dans un bouton: ^C^C(command "_-vbarun" "raccord.dvb!raccord_vba.raccord") A l'époque ça fonctionnait bien, maintenant je n'en sais rien. Le VBA ça ne me plait pas et je m'y interesse guère.! -
Tu m'as déjà bien inspiré, ce n'est pas encore un reflexe, mais ça va venir. Je suis un peu plus long qu'avant pour assimiler, c'est lâge :P Faut dire qu'y en a une floppée de ces fonctions (vl-...) Je trouve que certaines fonctions apportent peu (quelques lignes de lisp basiques en moins) Mais d'autres simplifient énormément la vie, du moins évitent d'écrire des sous-fonctions évoluées. Mais (gile) les réécris pour LT-Extender ;) D'autres exemples de votre part vont encore me faire évoluer. Tu l'as beaucoup utiliser pour faire de l'échange avec excel, mais là c'est pas le domaine qui m'interresse le plus, du moins je l'évite car je n'aimes pas trop être lié aux évolutions et au parc des Soft de MicroSoft (patch DLL et compagnie, y a déjà assez avec ceux d'Autodesk) Merci sergeluc, ravi de t'avoir aider pour pouvoir continuer ton dévellopement.
-
Ici ca ne sert à rien, à part numéroter les format au centre. Il faut bien te dire que ce code à été sorti de son contexte original pour pouvoir commenter la partie obscure (de la force :P ) Cette fonction (grread) est assez difficile à cerner quand elle est employée en boucle. Moi je l'adore, le seul et GROS inconvénient; l'accrochage aux objets ne peut se faire (en tout cas pas de manière simple) Mais quand on arrive à comprendre ses possibilités on peut faire de belles choses.
-
Il me semblait avoir évoquer le fonctionnement. :mad: un exemple alors, colle ce qui suit en ligne de commande et observe les résultats. (foreach arg '(7 6 5 4 3 2 1 0 -1 -2) (cond ((> arg 5) (print arg) (princ " -> l'argument est > à 5.")) ((> arg 4) (print arg) (princ " -> l'argument est > à 4.")) ((> arg 3) (print arg) (princ " -> l'argument est > à 3.")) ((> arg 2) (print arg) (princ " -> l'argument est > à 2.")) ((> arg 1) (print arg) (princ " -> l'argument est > à 1.")) ((>= arg 0) (print arg) (princ " -> l'argument est > ou = à 0.")) (T (print arg) (princ " -> l'argument est négatif!")) ) (princ) ) Et pour parfaire l'exemple (foreach arg '(7 6 5 4 3 2 1 0 -1 -2) (cond ((>= arg 0) (print arg) (princ " -> l'argument est > ou = à 0.")) ((> arg 1) (print arg) (princ " -> l'argument est > à 1.")) ((> arg 2) (print arg) (princ " -> l'argument est > à 2.")) ((> arg 3) (print arg) (princ " -> l'argument est > à 3.")) ((> arg 4) (print arg) (princ " -> l'argument est > à 4.")) ((> arg 5) (print arg) (princ " -> l'argument est > à 5.")) (T (print arg) (princ " -> l'argument est négatif!")) ) (princ) ) Alors !? que ce passe t-il? [Edité le 11/4/2006 par bonuscad]
-
Bred, Il y avait ce SUJET qui rejoint un peu celui-ci
-
Ben tu peux l'essayer! (dans un dessin vierge) Normalement ça mord pas :P Trève de plaisanterie, ça sert à agencer un nombre (que tu fixes) de format A4-A3 en dynamique. Là le format est en mm, mais on pourrait sophistiquer pour inclure d'autre unités. Voilà, c'est tout, mais ça montre surtout la fonction (grread) en boucle qui permet de faire des trucs sympa avec un interactif visuel.
-
Je répond à la place de (gile) Avec (setq, tu peux affecter plusieurs variable d'affilé sans répéter (setq var valeur) à chaque fois. (setq var1 valeur var2 autrevaleur var3 encore-une-autre .......) est valide. Donc pt2 prend la valeur de pt1 .Ils deviennent identique et permettent dans ce cas précis de rentrer dans la boucle (while puis qu'ils vérifient sa condition d'égalité.
