-
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
-
Je penses aux reacteur, mais je ne sais pas si c'est vraiment possible car je ne suis pas vraiment à l'aise avec ceux-ci mais Patrick_35 donnera peut être sont avis. Attacher des réacteurs à des entitésqui interdiraient tout usage de commande d'édition ou de suppression. Voilà pour l'idée, pour la mise en oeuvre je suppose que cela doit être un peu "Hard". Je ne sais pas non plus si ceux-ci peuvent être persistants lors de transfert sur un autre poste. Mais si ca peut fonctionner, à mon avis cela peut être source de problèmes ultérieurs inattendus et non désirés. Trop de sécurité peut tuer la sécurité ;)
-
defun c:routine ou defun routine ?
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
C'est vrai que c'est une façon curieuse, et généralement inutile. MAIS Autodesk a bien créé des fonctions 3D supplémentaires comme _Align _Rotate3D etc.. et aussi des fonction sur les rendus qui sont définis de cette sorte. De ce fait on les utilise en ligne de commande de manière normal (avec parfois des boites de dialogues) ou à travers des appels en lisp sous la forme (c:align pt10 pt11 pt20 pt21.....) qui est la procédure d'appel recommandé, soit pour shunter les boites de dialogue ou des appels recursif par command qui engendre des erreurs de profondeur. Je pense que c'est une forme assez évolué, qui n'est généralement pas necessaire de reproduire pour nous simple lispeur ;) Ne compliquont pas les choses :casstet: -
Merci de la précision pour banditito car pour moi je connaissais le terme. Je voulais simplement lui expliquer comment faire cette échelle graphique. Et en fin de compte le terme lui importe peu vu la non réponse :exclam:
-
Je viens d'essayer avec une saisie clavier sous la forme "@500,0" que je rappelle avec la flèche haut et dans ce cas cela fonctionne, mais avec une distance seule, ça ne fonctionne pas :mad: (entnext [nom_ent]) Si employé sans argument renvoie la première entité dans la base de données Avec un argument (qui est un nom d'entité) renvoie le nom de la première entité non supprimmé figurant après [nom_ent]. (entnext) renvoie aussi bien les entités principales que les sous-entités NB:modifié légèrement la routine précédente (test avec equal) qui dans un SCU ne fonctionnait pas bien + option X ou Y
-
Une routine glanée sur le Net, j'ai juste rajouté ce qui pouvait concerné covadis. Il faudrait savoir si une application, et laquelle, a pu rajouter des infos au dictionnaire pour la modifier et la rendre efficace pour ton cas. ;| Routine to dramtically reduce file sizes where the drawing has had many AEC (Land & Architectural entities. Will clean out all dictionary data relating to those entities, so any visibility defaults, among other things, will be lost, but the file size may be reduced up to 80% of original size. Also removes ALL named layer filters. One file was 25.5 MB, is now 5.12 MB....... by Jeff Mishler, Dec. 2003 with code for layer filter deletion by R .Robert Bell usage: type fx at the command line, it may take a few minutes to complete, be patient. |; (defun fixup () (vl-Load-Com) (foreach dict (entget (namedobjdict)) (if (and (= (type (cdr dict)) 'STR) (wcmatch (cdr dict) "AEC*") (wcmatch (cdr dict) "COVADIS*");ligne non présente dans l'original ) (dictremove (namedobjdict) (cdr dict)) ) ) ; LayFiltDel downloaded from AcadX.com, ; author: R. Robert Bell (vl-Catch-All-Apply '(lambda () (vla-Remove (vla-GetExtensionDictionary (vla-Get-Layers (vla-Get-ActiveDocument (vlax-Get-Acad-Object) ) ) ) "ACAD_LAYERFILTERS" ) ) ) (command "_.audit" "_yes") (command "_.purge" "_all" "" "_no") (princ) ) (defun c:fx () (fixup))
-
Une autre voie possible, si j'ai bien compris ce que tu veux réaliser! :exclam: (defun c:Mcopy_XorY ( / mess filter_pt js borne pt_base e_next) (initget "X Y") (if (eq (getkword "\nSens de copie [X/Y]: ") "Y") (setq mess "Y" filter_pt ".xz") (setq mess "X" filter_pt ".yz") ) (princ (strcat "\nObjets à copier répétitivement dans le sens des " mess)) (setq js (ssget)) (cond (js (setvar "CMDECHO" 0) (setq borne (entlast)) (initget 1) (setq pt_base (getpoint "\nSpécifiez le point de base ou déplacement: ")) (while pt_base (command "_.copy" js "" pt_base filter_pt "@" pause) (if (equal pt_base (getvar "LASTPOINT") 1E-08) (setq pt_base nil) (progn (if (eq mess "X") (setq pt_base (list (car (getvar "LASTPOINT")) (cadr pt_base) (caddr pt_base))) (setq pt_base (list (car pt_base) (cadr (getvar "LASTPOINT")) (caddr pt_base))) ) (setq js (ssadd)) (while (setq e_next (entnext borne)) (setq js (ssadd e_next js) borne e_next) ) ) ) ) (command "_.u") (setvar "CMDECHO" 1) ) ) (prin1) ) [Edité le 9/6/2006 par bonuscad]
-
Je confirme le problème avec une 2000. Ce n'est pas les 1er problèmes que je rencontre avec les fonctions Vlax surtout avec une 2000. J'ai donc commencé a regarder ton lisp et sa coince bien a : (setq path (vla-get-Path (vla-item (vla-get-blocks acdoc) x))) Le (vla-get-Path avec une 2000 ne réagi que si le chemin de l'Xref est valide Tout à fait le contraire de ce que la routine veut faire ;) J'ai cherché un peu un autre moyen de trouver le chemin, mais pas encore trouvé :( Vais-je trouver mon chemin? :)
-
Passage de symbole d\'AutoCAD vers Lisp
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Quand tu fais ceci en ligne de commande, cela veut dire que tu appeles une fonction définie comme suit: (defun phtexte ( arg1 arg2 / var1 var2......) ........) Etant donné que tu as défini ta fonction comme suit (pour qu'elle soit identique à une commande, c'est à dire que son appel peut se faire sans paranthèse en ligne de commande: PHTEXTE) (defun c:phtexte (arg1 arg2 / var1 var2 .....) ......) Tu dois dans ce cas (comme tu soumet des arguments faire l'appel comme suit: (c:phtexte "Bonjour" "2.5"), tu peut faire aussi ce genre d'appel sans argument, si la fonction n'en possède pas. En résumé une fonction défini avec C: peut s'appeler directement avec le nom de la commande ou entre paranthèse (C:mafonction) -
Selectionner objets, les exploser et déplacer les élements dans différenrs calques
bonuscad a répondu à un(e) sujet de rumba dans Débuter en LISP
Un début contenant le principal, à paufiner pour adapter exactement à tes besoins, je te laisse chercher un peu... ((lambda ( / ent dxf_ent js n borne) (while (null (setq ent (entsel "\nChoisir une cotation modèle: ")))) (cond ((eq (cdr (assoc 0 (setq dxf_ent (entget (car ent))))) "DIMENSION") (setq js (ssget "_X" (list (assoc 0 dxf_ent) (assoc 8 dxf_ent))) n -1) (cond (js (command "_.point" (getvar "lastpoint")) (setq borne (entlast)) (repeat (sslength js) (command "_.explode" (ssname js (setq n (1+ n)))) ) (setq ent (entnext borne)) (while (and ent (/= ent borne)) (setq dxf_ent (entget ent)) (cond ((eq (cdr (assoc 0 dxf_ent)) "LINE") (command "pedit" ent "_yes" "") ) ((eq (cdr (assoc 0 dxf_ent)) "MTEXT") (command "_.chprop" ent "" "_layer" "0" "") ) ) (setq ent (entnext (cdar dxf_ent))) ) (entdel borne) ) ) ) (T (princ "\nN'est pas une cotation") ) ) (prin1) )) -
Perte des icônes des boutons personnalisés
bonuscad a répondu à un(e) sujet de brunomu dans AutoCAD 2004
MNU est le fichier menu source gabarit, si c'est le seul à exister le mnu, mnc, mnr seront créés. MNS est le fichier menu source, sil la date de ce fichier est supérieure à mnc, il sera recompilé MNC est le fichier menu compilé MNR est le fichier menu resource créé lors de la compilation, ce qu'il contient m'es obscur. MNL est un fichier facultatif de procédure lisp a executer automatiquement lors du chargement du menu associé, personnelement je le préfère à AutoCAD.lsp et les autres acad200X...lsp. (la config reste homogène au menu associé.) le MNC et MNR sont essentiel pour faire fonctionner un menu, il peuvent être distribué sans les source si l'on veut protéger ses créations. Mais bien sur si il y a un problème a ce fichier impossible de le reconstituer a moins de repartir d'un MNC et MNR fourni d'origine. Lorsqu'on crée des icones les noms sont génériquement créé et incrémenté par autocad.. difficile de s'y retrouver, personnellement je les renommes de suite les BMP et les référence dans le MNU (manuellement) pour ne pas les perdre et les reconnaitres sans soucis. -
Tracer un ARC avec pt de départ, rayon et un objet pour la tangente
bonuscad a répondu à un(e) sujet de bonuscad dans Routines LISP
Merci Gilles, Au cours de mes tests, j'ai remarqué un comportement aléatoire de (vla-IntersectWith...) avec les cercles, comme ceux que tu décris. Du coup, j'ai encore modifié la routine pour éviter l'erreur et sortir proprement. Je me suis servir d'un test de Bill Kramer et appliquer comme suit: ((lambda ( / i_pts) (setq i_pts (vlax-variant-value (vla-intersectwith (vlax-ename->vla-object (car (entsel))) (vlax-ename->vla-object (car (entsel))) 1 ) ) ) (if (> (vlax-safearray-get-u-bound i_pts 1) 0) ; test de Bill Kramer (vlax-safearray->list i_pts) (princ "\nNe peut trouver d'intersection") ) )) Le plus étrange, est que le comportement arrive a être différent suivant l'endroit ou on sélectionne les cercles :o Soit c'est une erreur, ou 1 seule intersection, soit les 2 !?!, J'ai abandonné à comprendre le pourquoi du comment, la routine fonctionne bien pour des besoins simples et c'est l'essentiel. -
Problème impression
bonuscad a répondu à un(e) sujet de kikay2 dans Périphériques de sortie, impression
Bien que ton fihier ne fasse que 1.5Mo ce qui est tout à fait raisonnable, il posséde néanmoins beaucoup de hachures complexes (si tu décomposais celles-ci, tu verrais que la taille de ton fichier exploserait si tu l'enregistre "sous") Lorsque tu envois un fichier tel à l'impression, il doit prendre une taille assez conséquente dans la mémoire tampon de traçage à cause des hachures. Si tes hachures sont dans un calque à part, essayes d'inactiver celui-ci à l'impression pour voir si le reste (la géométrie de base) s'imprime correctement. Si oui, tu as effectivement un problème de taille mémoire pour le traçage, soit tu équipes ton traceur en conséquence, soit tu fais des hachures moins sophistiquées ou à une échelle plus grande (motifs moins serrés) Bon tests ;) -
Toutes les lignes en polylignes
bonuscad a répondu à un(e) sujet de atchoume dans Pour aller plus loin en LISP
Salut, Je crois que si je devait traiter des dessin volumineux, je m'attacherais dans le code à faire des filtres efficaces, quitte à faire des boucles plus que de raison. En effet je pense que si tes dessins sont bien structurés, il sera par exemple plus efficace de filter tes lignes en tenant compte du calque, éventuellement du type de ligne et/ou de la couleur et j'en passe. Ceci afin de manipuler des jeux de collections d'entités de taille raisonnable à soumettre à la commande pedit. En plus tu éviteras des surprises de changement de propriété des lignes de départ lorsqu'elle sont jointes à d'autres (de nature différente) et conservera ainsi une hiérachie claire de tes objets. Une sélection globale ne peut que mettre ta machine à genoux. Voilà pour la philosophie que j'adopterais, pour le code. Je te laisse essayer de le mettre en oeuvre. Bon courage ;) -
Maintenant que Esbe à reformulé la question, plutôt ceci: ((lambda ( / ) (setq js (ssget "_X" '((0 . "TEXT") (62 . 12))) n -1) (cond (js (while (null (tblsearch "BLOCK" (setq name_blk (getstring T "\nNom du bloc à inserer?: "))))) (repeat (sslength js) (setq p_ins (trans (cdr (assoc 10 (entget (setq ent (ssname js (setq n (1+ n))))))) ent 1)) (command "_.-insert" name_blk p_ins 1.0 1.0 0.0) ) (initget "Oui Non") (if (eq (getkword "\nEffacer les texte [Oui/Non] < Non > : ") "Oui") (command "_.erase" js "") ) ) ) )) Ceci pour un bloc sans attributs inséré à l'échelle 1 et rotation 0.0 Modifier la ligne (command "_.-insert" name_blk p_ins 1.0 1.0 0.0) pour tes besoins
-
OS COURT !! fichier ne veut pas se fermer
bonuscad a répondu à un(e) sujet de djn06 dans AutoCAD 2006
Essayes de taper à la ligne de commande: (getvar "cmdnames") Cela devrait te retouner la commande active. Une fois identifié, ça sera peut être plus facile de voir vers quoi s'orienter -
Une proposition simple à mettre en oeuvre, te conviendra t-elle? Pourquoi ne pas tracer tout simplement une mire à damier (un rectangle noir, un rectangle clair, un rect...., ....) dans l'espace Objet à l'échelle réelle. La longueur d'un rectangle pourrait représenter une dizaine, ou centaine d'unité que tu utilises; centimètre, mètre etc... Cela aurait l'avantage de suivre n'importe quelle échelle de sortie sur papier et servirait de référence pour l'utilsateur. Il faut quand même renseigner par ecrit aux extrémités ce que représente la longueur réelle totale de ta mire ;)
-
Je vais essayer de te conseiller. Si tu as toujours tes SLD, essayes de recréer à partir de ceux-ci ta bibliotheque SLB avec l'utilitaire SLIDELIB.EXE, peut être que ça reconstruira la structure interne de la bibliothèque compatible à la nouvelle version. Je dis ça sans savoir, mais je regarderais d'abord dans cette direction. J'espère que ça fonctionnera NB: Placer le SLD dans un dossier de recherche devrait suffire. Au fait: Est tu sur que ta bibliothèque SLB n'est pas référencée par un chemin dans tes menus, car ceci expliquerai cela, dans ce cas vire simplement le chemin si la bibliothèque est accessible par un dossier de recherche.
-
Bibliothèque de clichés...
bonuscad a répondu à un(e) sujet de DenisHen dans Pour aller plus loin en LISP
Ca je reconnais que c'est pas un plus! AutoDesk sur ce point à régressé. :mad: A l'époque de la doc papier, celle-ci était en Français, et je reconnais que c'était beaucoup plus simple pour débuter. Malheuresement tous les languages de programmation ont une syntaxe anglaise. Moi non plus l'anglais n'est pas mon fort, mais il faut savoir qu'ils font appel généralement à une mnémonique. ANGle TO String ce qui donne angtos -> valeur d'angle vers chaine de caractère. ou encore Integer TO Alphanumeric ce qui donne (itoa) -> nombre entier en caractère alpha numérique Voilà avec un peu réflexion et d'habitude on arrive a deviner le sens. Pour car et cdr: * car (Contents of Address register) : le premier élément de la liste * cdr (Contents of Decrement register) : le reste de la liste Mais ça tu aurais pus le trouver ICI [Edité le 1/6/2006 par bonuscad] -
Bibliothèque de clichés...
bonuscad a répondu à un(e) sujet de DenisHen dans Pour aller plus loin en LISP
Je soutiens Gilles dans son propos. Ici c'est un forum et pas un centre de formation en ligne, on y apporte chacun notre pierre et nos connaissances sans aucune prétention. J'ai appris le Lisp et continu à l'apprendre tous les jours. A mes débuts, je n'ai pas eu la chance (comme toi) de trouver une aide quelconque grace à Internet. Je me suis acheter un bouquin, utilisé celui d'autocad sur le lisp, et les exemples basiques fourni par AutoDesk, c'est tout! Quand je ne comprenais pas une fonction, je passais des heures et des heures à la décortiquer, jusqu'a que ça fasse "Tilt" dans ma pauvre petite tête. A mon avis c'est la meilleure forme d'apprentissage. Comme dit le proverbe "C'est en forgeant qu'on devient forgeron" Si tu es pressé d'apprendre, payes toi une formation. Ici personne n'est obligé à quoi que ce soit pour satisfaire à une question. Je répond quand la question est pour moi digne d'interêt, pas quand on cherche à me presser le "citron" par flemmardise, j'ai déjà mes "boss" pour ça est sa me suffit! Mes interventions ne sont pas un du, mais une entraide. -
Je me permet de répondre à sa place ;) ((lambda ( / ) (setq a 0) (repeat 4 (princ (eval (read (strcat "liste" (itoa a))))) (setq a (+ a 1)) ) )) Ceci pour afficher le contenu de la variable (princ), tu peux faire une autre action. La clé pour lire tes variables est l'utilisation de (eval)
-
Vu que tu as déjà fait un lisp pourquoi ne pas l'exploiter? Je crois que ton erreur a été d'utiliser (command "_.3dsout") Tu devrais plutôt faire l'appel par (c:3dsout arg arg ......) Voici l'extrait de l'aide sur la syntaxe De cette manière je pense que tu éviteras l'affichache de la boite de dialogue pour les options (puisque tu va les fournir directement à la fonction)
-
Probleme sur viewsIO.lsp
bonuscad a répondu à un(e) sujet de fabcad dans Pour aller plus loin en LISP
Je pense que comme ceci ça ira.... ;;; viewsIO.lsp ;;; ;;; Export and import views ;;; ;;; c:ExportViews ;;; c:ImportViews ;;; c:-ExportViews ;;; c:-ImportViews ;;; ;;; By Jimmy Bergmark ;;; Copyright (C) 1997-2006 JTB World, All Rights Reserved ;;; Website: www.jtbworld.com ;;; E-mail: info@jtbworld.com ;;; ;;; 2000-06-27 ;;; ;;; Tested on AutoCAD 2000 ;;; To do: support for views with saved ucs (defun c:ExportViews (/ fn) (if (setq fn (getfiled "Export views to" (strcat (vl-filename-base (getvar "dwgname")) ".txt") "txt" 1 ) ) (ExportViews fn) ) (princ) ) (defun c:ImportViews (/ fn) (if (setq fn (getfiled "Import views to" (strcat (vl-filename-base (getvar "dwgname")) ".txt") "txt" 8 ) ) (ImportViews fn) ) (princ) ) (defun c:-ExportViews (/ fn x) (setq fn (strcat (vl-filename-base (getvar "dwgname")) ".txt")) (if (setq fn (findfile (if (= "" (setq nn (getstring T (strcat "Enter filename <" fn ">: " ) ) ) ) fn nn ) ) ) (progn (initget "Yes No") (setq x (getkword "\nFile exists. Overwrite? [Yes/No] : ")) (if (= x "Yes") (ExportViews fn)) ) (princ "\nFile not found.") ) (princ) ) (defun c:-ImportViews (/ fn) (setq fn (strcat (vl-filename-base (getvar "dwgname")) ".txt")) (if (setq fn (findfile (if (= "" (setq nn (getstring T (strcat "Enter filename <" fn ">: " ) ) ) ) fn nn ) ) ) (ImportViews fn) (princ "\nFile not found.") ) (princ) ) (defun ExportViews (fn / e tl f ed) (while (setq e (tblnext "VIEW" (null e))) (setq tl (cons (cdr (assoc 2 e)) tl)) ) (setq f (open fn "w")) (if f (progn (princ "Following views exported:\n") (foreach view tl [surligneur] (setq ed (entget (tblobjname "view" view))) (foreach n '(-1 102 360 102 330 5) (setq ed (vl-remove-if-not '(lambda (x) (/= (car x) n)) ed)) ) (prin1 ed f) [/surligneur] (princ "\n" f) (prin1 view) (terpri) ) (close f) ) ) ) (defun ImportViews (fn / tl f) (setq f (open fn "r")) (if f (progn (princ "Following views imported:\n") (while (setq tl (read-line f)) (setq tl (read tl)) (entmake tl) (print (cdr (assoc 2 tl))) ) (close f) ) ) ) (princ) [Edité le 31/5/2006 par bonuscad] -
Bibliothèque de clichés...
bonuscad a répondu à un(e) sujet de DenisHen dans Pour aller plus loin en LISP
De rien mais, Je vois pas le rapport avec le sujet : Bibliothèque de clichés... :exclam: Que veut tu faire? -
Bibliothèque de clichés...
bonuscad a répondu à un(e) sujet de DenisHen dans Pour aller plus loin en LISP
Dans ce SUJET , il y a un lisp simple (pour l'apprentissage) pour créer un script. En plus il est tout prêt pour ce que tu veux faire -
Pour récupérer un ou plusieurs nom de calque par pointage, tu pourrais utiliser un truc de ce genre: Faire un copier coller de ce qui suit en ligne de commande pour essayer. ((lambda ( / ent name_layer list_name_layer) (while (setq ent (entsel "\nChoisir une entité: ")) (princ (setq name_layer (cdr (assoc 8 (entget (car ent)))))) (if (not (member name_layer list_name_layer)) (setq list_name_layer (cons name_layer list_name_layer)) ) ) )) Tu auras ainsi les nom des calques dans une liste. Après tu peux faire ce que tu veux de cette liste. Pour l'envoyer dans le presse-papier, je ne sais pas faire!
