-
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
-
Regarde ta variable DIMADEC et fait attention aussi à DIMZIN.
-
Hé oui, (grread) est très puissant au niveau de l'interaction avec l'utilisateur, mais ce problème d'accroche-objet est bien là. J'avais rencontré le même problème que toi, j'avais réussi a simulé ce mode (dans certaines limites). Mais alors le code devient nettement plus lourd pour faire pas grand chose :( Si tu veux te remettre le post en mémoire c'est LA
-
Si j'ai bien compris? (command) -> équivalent à "Echap" dans une commande ou (exit) -> Abandon de l'éxecution en cours dans un lisp
-
Ecrit rapidement, sans trop de test, j'ai fait simplement un essai sur une boite et cela a fonctionné. Cependant ce n'est pas très élégant et certainement peu fiable en règle générale. (defun espa (chn / ) (while (eq (substr chn 1 1) " ") (setq chn (substr chn 2)) ) (while (/= (substr chn 1 1) " ") (if (eq (substr chn 1 1) "") (setq chn '" ") (setq chn (substr chn 2)) ) ) ) (defun ACISDecode (Chaine / i AscVal Result) (setq Result "" i (strlen Chaine)) (while (> i 0) ; On scanne la chaine en commencant par son dernier caractère (setq AscVal (ascii (substr Chaine i 1)) ; On converti le caractère en code ASCII Result (strcat (cond ((= AscVal 32) " ") ; Si la valeur est 32, on affiche un espace ((= AscVal 86) "I") ; Si la valeur est 86, on affiche un I ((chr (boole 6 AscVal 95))) ; Sinon on fait un Xor entre la valeur ; et le nombre magique 95, puis on reconverti l'entier ; obtenu en caractère ) Result ) i (1- i) ; On boucle sur les autres caractères de la chaine ) ) Result ) (defun c:fillet_3d ( / LstEnt Elt) (setq LstEnt (entget (car (entsel "\nSélectionnez un corps 3D:"))) lst_pt nil) (foreach Elt LstEnt (cond ((= (car elt) 1) (if (eq (read (acisdecode (cdr elt))) (read (strcase "straight-curve"))) (progn (setq data_sol (acisdecode (cdr elt)) pt nil) (while (read data_sol) (if (or (eq (type (read data_sol)) 'REAL) (eq (type (read data_sol)) 'INT)) (if (< (length pt) 3) (setq pt (append pt (list (read data_sol)))) ) ) (setq data_sol (espa data_sol)) ) (setq lst_pt (cons pt lst_pt)) ) ) ) ) ) (cond (lst_pt (initget 5) (setvar "filletrad" (getdist "\nRayon du raccord: ")) (foreach n lst_pt (command "_.fillet" n "" "")) ) ) (princ) )
-
Si vous tenez absolument à pouvoir exploiter les codes DXF des solides, regardez par exemple ICI Qui a trouvé ce fameux nombre magique 95 de décalage booléen, je n'en sais rien, mais ça peux rendre service ;)
-
J'ai réussi a me connecter à une heure tardive. La qualité est au rendez-vous, contraste des images excellentes, alors que des personnes avaient soit disant trouvé les images "palichonnes" et que celle de google étaient meilleures. Je ne suis pas de cette avis. Cependant, le gros défaut que j'ai trouvé est le délai d'affichage des clichés, j'admet que google utilise un algorithme d'affichage mieux "foutu" qui donne une impression de fluidité lors des déplacements. Avec Géoportail, ce n'est pas le cas, les déplacement sont laborieux dans les temps de réactions d'affichage avec même parfois des temps "gelés" qui sont vraiment long. L'affichage se fait en mode ligne par ligne (balayage) Cela est peut être du à ma bande passante, je n'ai que 2Mo en débit, ou aux nombres de connexions en cours. En résumé, j'ai eu les mêmes impressions que si j'utilisais ERMAPPER au format ECW dans AutoCad avec la BD-Ortho pour ceux qui connaissent.
-
Comme tu parlais d'un bouton, pour moi tu parlais d'une macro. Dans une version pleine, on peut aussi associé du lisp dans une macro. Dans ton cas, il ne faudra pas commancer ta macro par "^C^C" qui est une syntaxe d'annulation de toute commande en cours. J'ai amélioré la syntaxe pour que l'action associé au bouton puisse se faire dans les 2 modes de fonctionnement: sélection -> action ET action -> sélection. J'ai rajouté aussi la sélection de la couleur que tu veux faire. Donc copie les lignes qui suivent dans la définition macro d'un bouton et essayes L'avantage de cette défintion et que tu pourras associer tous les actions standards d'édition d'autocad à ta sélection: déplacer, effacer, copier etc... Ceci dans l'odre de ton choix: soit la commande puis l'appui sur ton bouton, ou l'appui sur ton bouton puis la commande que tu veux appliquer. Par contre cela ne fonctionnera pas pour un appel de sélection depuis un autre lisp (appel réentrant impossible) ((lambda ( / js) (if (zerop (getvar "pickfirst")) (setvar "pickfirst" 1)) (setq js (ssget "_X" (list (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) (cons 62 (acad_colordlg 3 T)) ) ) ) (if (zerop (getvar "cmdactive")) (sssetfirst nil js) js ) )) NB: Après un essai la syntaxe est maintenant un peu longue pour une macro (on est limité). Dans ce cas il vaut mieux enregister les lignes dans un fichier lisp, exemple "select_by_color.lsp" dans un dossier de recherche, puis dans le bouton faire simplement : (load "select_by_color") Toujours sans caractères d'annulation
-
Désolé, pas de piste concernant les variables, tout à fait normal. Je vois pas la cause de ton problème, un mode de repérage polaire! j'ai bien essayé avec celui-ci, mais le comportement reste normal. J'vois pas :(
-
Effectivement, je n'ai rien observé sur l'état des variables qui justifie ce mode de fonctionnement. Esbe ! Fais tu tes cotations avec un raccourci clavier (PGP) ou une macro définiti par tes soins. Je n'arrive à ta manière quand passant par les commandes clavier "COT" puis "H" (horizontale), et la effectivement on propose de valider la valeur de la cote. Mais par le menu ou les icones standards la réalisation ce fait sans proposition de modifiaction du texte.
-
Oui, suivant la méthode, 3 points ou lignes, on a le complémentaire à 360° ou 180°. Mais je ne pense pas que le problème de MaknoII soit celui-ci. (Rajouter 200gr à la calculette me semble incongru). Ce que j'ai compris, c'est qu'il n'arrive qu'à coter systématiquement l'angle le plus fermé (< 90°). Ceci en sélection de ligne, je suppose? Mais attendons la suite, car je suis curieux de voir :P
-
Difficile de répondre comme ça, car les variables sont nombreuses et des interactions existe entre-elles. Donc pour pouvoir comparer, ça rejoindrait ma réponse sur ce SUJET Dans les code DXF retournés on pourrait retrouver l'état des variables dans ton style utilisé et identifier plus facilement les différences par rapport au codes retournés sur un autre poste avec un style différent.
-
Pour t'aider à identifier la cause, pourrais-tu faire un copier-coller de ce que te renverra la fonction suivante (faire un copier-coller directement de ce qui suit en ligne de commande) ((lambda () (setq ent_dim (entget (car (entsel "\nChoisir la cotation angulaire:")))) (foreach n '(-1 330 340) (setq ent_dim (vl-remove (assoc n ent_dim) ent_dim))) (setq def_tbl (tblsearch "DIMSTYLE" (cdr (assoc 3 ent_dim)))) (foreach n '(-1 330 340) (setq def_tbl (vl-remove (assoc n def_tbl) def_tbl))) (print ent_dim) (print def_tbl) (prin1) )) Parce que j'ai essayer de reproduire ton cas sans succés, et je voudrais bien comprendre. [Edité le 22/6/2006 par bonuscad]
-
Sans trop savoir dans quel configuration tu dois executer cette action. Les polygones sont vides ou couper entièrement par d'autre entités? Essayes déjà ce bout de code voir si cela peut te rendre service, si c'est l'environnement est plus complexe, une solution simple sera difficile à mettre en place. ((lambda ( / ent dxf_ent lst) (setvar "HPBOUND" 1) (setq ent (bpoly (getpoint "\nPoint interne: "))) (cond (ent (setq dxf_ent (entget ent) lst (mapcar '(lambda (x) (trans x ent 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent))) ) (entdel ent) (if (zerop (getvar "pickfirst")) (setvar "pickfirst" 1)) (setq ent (nentselp (car lst))) (sssetfirst nil (ssadd (car ent))) ) ) (prin1) ))
-
Jette un oeil d'abords a ce SUJET. Ainsi tu pourras affiner ta question si tu ne trouve pas ta réponse.
-
Je ne sais pas si les ExpressTools sous 2006 offrent toujours cette possibilité, mais il y a la commande "FullScreen" (Plein Ecran)
-
Un truc qui pourrait être interressant de faire, suivant si tu désire exploiter les données par la suite, est d'affecter des variables du nom de l' IPE à une liste. Par exemple avec l'extrait de fichier que tu as donné: (defun c:lirefic ( / MonFic x Profil typ_prof) (defun espa (chn / ) (while (eq (substr chn 1 1) " ") (setq chn (substr chn 2)) ) (while (/= (substr chn 1 1) " ") (if (eq (substr chn 1 1) "") (setq chn '" ") (setq chn (substr chn 2)) ) ) ) (setq MonFic "C:/Documents and Settings/Manuel/Application Data/Autodesk/AutoCAD 2004/R16.0/fra/Support/Fichier_Profils.txt") (setq x (open MonFic "r")) (while (setq Profil (read-line x)) (cond ((eq (type (read profil)) 'SYM) (setq typ_prof (list (read profil))) (while (read (setq profil (espa profil))) (setq typ_prof (append typ_prof (list (read profil)))) ) (print (car typ_prof)) (princ (cdr typ_prof)) (set (car typ_prof) (cdr typ_prof)) ) ) ) (close x) (princ) ) Ainsi tu devrais obtenir ceci IPE80 (80 46 3.8 5.2 5) IPE100 (100 55 4.1 5.7 7) IPE120 (120 64 4.4 6.3 7) IPE140 (140 73 4.7 6.9 7) IPE160 (160 82 5.0 7.4 9) un (car IPE80) retournera 80, un (cadr IPE80) -> 46 , (caddr IPE80) -> 3.8 etc...
-
Essayes de voir ce Sujet
-
Tout à fait, c'est une tolérance de comparaison que l'on fixe comme on veut ex: 1E-08 pour une tolérance de 8 chiffres après la virgule. le "h" à la fin est pour être sur que la fonction retourne la valeur de h et non pas par exemple l'assignation de pt_snd à LastPoint qui pourrait être la dernière évaluation suivant la saisie effectuée. donc (setq hauteur (my_getdist)) affectera bien à "hauteur" la valeur de la variable h (dernière évaluée) bien qu'elle soit remise à nil (variable locale) à la fin de la fonction (my_getdist).
-
As tu le même nombre d'objets qu'avec l'option "Tout" ?
-
Repart de l'original et refait un déplacer, mais au lieu de prendre l'option "Tout" au choix des objets tapes ceci entre paranthèses (ssget "x") Vérifie bien les messages en ligne de commande, tu auras peut être l'explication d'un/des objet(s) avec des particularités.
-
Peut être en utilisant une fonction (getdist) redéfinie ! Exemple (possible qu'il faille encore l'affiner après quelques tests, je pense à equal avec un fuzz) (defun my_getdist ( / pt h pt_snd) (if (equal (setq pt (getpoint)) (polar (getvar "lastpoint") (angle (getvar "lastpoint") pt) (distance (getvar "lastpoint") pt))) (setq h (distance (getvar "lastpoint") pt)) (progn (setq h (distance pt (setq pt_snd (getpoint pt "\nSpécifiez le deuxième point: ")))) (setvar "lastpoint" pt_snd) ) ) h ) Voilà au lieu d'utiliser (getdist), tu utilises (my_getdist) ;)
-
une bien curieuse liste de BLOCS !!!!!!!!!!!
bonuscad a répondu à un(e) sujet de rebcao dans AutoCAD LT 2004
Un peu au hasard, N'y a t-il pas eu un attachement de plusieurs xref en bloc? Si ces xrefs possédaient les mêmes blocs, il est possible que la boite de dialogue tronque la partie source du bloc de l'xref, ce qui expliquerait la redondance des noms de bloc. -
Tu peux essayer, mais j'ai des doutes car les applications ARX sont rarement compatible d'une version à l'autre. Je pense (par déduction) que le fichier ARX à récuperer serait "acrender.arx" Si celui existe déjà, je te conseille de ne pas d'écraser l'existant. Ensuite un (arxload "acrender") pour charger en mémoire les fonctions. A essayer avec énormément de précautions, car il est difficile de connaitre les conséquences (si cela fonctionne), modification du registre, conflit avec modules existant en mémoire, car les fonctions arx sont loin d'être transparentes. Si ça te tente ! :exclam:
-
Ils existaient auparavant. Pourrais-tu regarder dans l'aide en ligne de 2007? dans: AutoLISP Reference -> Externally Defined Commands (si cette section est tourjours disponible) Quelles sont les commandes encore accessibles? Dans les versions précédentes on avait par exemple (c:3dsout sset omode div smooth weld file)
-
Petite question pour BonusCAD
bonuscad a répondu à un(e) sujet de DenisHen dans Pour aller plus loin en LISP
Woouf, :o Tu veux sauter à une grosse étape. Dans cette routine, j'ai essayé (non pas sans mal) de créer ma propre matrice de transformation pour mettre le cadre dans le SCO (Système de Coordonnées de l'Objet) Pour ceci je m'étais servir d'un cours enoncé ICI, mais je crois que le lien est maintenant cassé. Tu peux faire une recherche avec le nom de l'auteur et "matrice de transformation" avec google, je pense avoir encore une copie du diaporama, au cas où que tu veuille te le procurer. Je pense que l'on pourrait faire la même chose avec (trans), mais à l'époque je n'y étais pas arrivé, alors je mettais entrainé avec cette solution. Mais dans la simplicité tu peux te servir de la liste de la variable lst_box de la routine pour déduire le centre de ton cercle et le rayon (milieu des 2 points de diagonale de la liste et distance de ce point obtenu à un point quelconque de la liste pour le rayon). Ca c'est moins "difficult" ;) Tu pourrais même faire une ellipse applatie, plus jolie.... qu'un cercle :P ' (apostrophe) est équivalent à la fonction (quote) ; voir l'aide [Edité le 20/6/2006 par bonuscad]
