krunch
Membres-
Compteur de contenus
239 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par krunch
-
question de structure (CopyObjects)
krunch a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
Oui, mais c'est pas que " je veux".. En fait c'est une conséquence de la structure que je voudrais adopter, qui présente un gros avantage : la rapidité d'exécution. Mais c'est une conséquence plutôt gênante (données associées aux entités)... Ma double question était donc : - est ce que selon vous c'est acceptable ou pas ? - est ce qu'il y a un moyen d'y remédier ? -
Bonjour Pour une commande Lisp je suis en train d'adopter une structure particulière, et je voudrais savoir si elle est acceptable ou pas... La particularité c'est qu'elle restituerait une copie des entités sélectionnées tout en supprimerait la sélection initiale. Selon vous faut-il abandonner cette solution ? Questions subsidiaires : - Le problème c'est sans doute les données associées éventuelles : XDatas, Réacteurs objets... y en a t-il d'autres ? - Est ce que la fonction CopyObjects se charge de copier ces données associées ? - A quoi sert l'argument IdPairs ?? - En dehors de ce problème y a t'il un inconvénient à ce que le handle des entités soit modifié ? Merci d'avance [Edité le 19/1/2011 par krunch]
-
question sur (sssetfirst..)
krunch a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
Pour info ça se complique au moment de restituer la variable GRIPS, car elle agit aussi sur le jeu de sélection courant... C'est à dire que (setvar "GRIPS" 1) remet les poignées même si il est placé après le (sssetfirst), alors il faut la restituer dans un réacteur :vlr-pickfirstModified etc.. etc.. -
question sur (sssetfirst..)
krunch a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
Mais oui ! Je l'avais oublié celle là.. Simple et efficace.. bravo et merci beaucoup ! -
question sur (sssetfirst..)
krunch a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
Hello En fait il s'agit de le restituer à la fois à l'écran et comme jeu de sélection courant (actif) pour la commande suivante.. comme quand tu fais une sélection à la souris, sauf qu'il a été fait en Lisp. -
Bonjour Je veux restituer à l'écran un jeu de sélection classique (fabriqué avec ssadd) mais pas forcément avec des poignées. En fait je me base sur la variable GRIPOBJLIMIT car la restitution des poignées ralentit énormément le processus avec une grande quantité d'objets. Problème : sssetfirst ne restitue qu'avec poignées, puisqu'ils ont eu la très mauvaise idée de désactiver le 1er argument de cette fonction... Alors comment restituer un jeu de sélection courant sans poignées ? Il ne suffit pas de highligter les objets, il faut aussi rendre le jeu de sélection actif. Et si possible j'aimerais éviter de le "doubler" avec un jeu de sélection vla juste pour ça... (quoique ça ne parait pas + possible avec un jeu de sélection vla ?) Pensez vous que ce soit possible d'une façon ou d'une autre ? Merci d'avance
-
Mais oui, ou mieux : tu fais un DWF (Fichier/Exporter..) que tu ré-importe (il faut sans doute remettre à l'échelle). Contrairement aux images le DWF est "snapable", et j'ai vérifié il n'est pas accroché par la commande Etirer.. Pour importer un DWF il faut aller dans Insertion, ça marche comme une XRef mais ça s'appelle un "Calque sous-jacent" [Edité le 17/1/2011 par krunch]
-
En fait je comprends pas très bien ce que tu veux faire... Mais si tu veux filtrer la sélection courante lorsqu'elle est modifiée tu peux brancher un réacteur comme ça : (vlr-miscellaneous-reactor "NOM" '((:vlr-pickfirstModified . Filtre))) Puis tu écris une fonction avec 2 arguments, qui récupère et traite la sélection courante : (defun Filtre (u v / sel) (setq sel (cadr(ssgetfirst))) .... traitement ... ) A la sortie il faut effacer le réacteur : (mapcar 'vlr-remove (vl-remove-if-not '(lambda(u)(= (vlr-data u) "NOM")) (cdr(car(vlr-reactors :vlr-miscellaneous-reactor)))))
-
En revanche il est possible de filtrer (enlever) les objets des calques verrouillés d'un jeu de sélection, en Lisp, et éventuellement dans un réacteur.. Sinon pour faire simple j'utiliserais le filtre de sélection en filtrant les Blocs/XRefs qui ont certaine propriété (calque par exemple).
-
comment passer des arguments à une macro VBA ?
krunch a posté un sujet dans Pour aller plus loin en LISP
Bonjour à tous Je termine une commande qui permet de paramétrer des transformations, et qui applique ces transformations "en temps réel" pour faire un preview. Il comporte donc une boucle de traitement (d'un jeu de sélection) avec un transformby... Le problème c'est qu'au delà d'une dizaine d'objets la commande n'est plus du tout fluide.. alors j'essaie de passer cette boucle de traitement en VBA pour voir si la différence est notable. J'ai essayé avec vl-vbarun... mais apparemment cette fonction ne permet pas de passer d'argument ? J'arrive à récupérer le jeu de sélection en VBA (depuis son nom), mais comment faire pour la matrice ?? [Edité le 17/1/2011 par krunch] -
Bonjour - Il n'y a pas d'espion, et Esc ou Ctrl-c met le focus sur Vlide (avec 'saisie de la boucle d'arrêt clavier' pour Ctrl-c) mais c'est tout (même comme un malade) - Pour ce qui est de acad2008doc.lsp' c'était pour essayer, je l'ai remis Etant donné que j'ai réinstallé je me demande si ce serait pas plutôt un truc à la Windows, comme une option dans une clé de registre. C'est quand même curieux que ça reste comme ça.. J'ai peut-être enfin inventé un truc :) : un bug :( ? Merci pour vos réponses et tant pis
-
Bonjour à tous Je reviens sur ce problème pénible car je ne l'ai pas résolu. J'ai du m'adapter : prendre l'habitude de fermer Vlide avant de lancer un Lisp, remplacer les points d'arrêts par des (print "ok")... Je rappelle ce qui se passe : dès que Vlide est ouvert AutoCad est bloqué (voir +haut), d'autre part dans Vlide les points d'arrêts ne marchent plus (ils n'arrêtent pas l'exécution) Personne n'a une idée ? Il n'y a pas de Lisp lancé au démarrage (j'ai viré 'acad2008doc.lsp' pour être sûr), d'autre part j'ai désinstallé-réinstallé AutoCAD... Le système est un Vista Merci d'avance
-
controle des touches acet-sys-keystate
krunch a répondu à un(e) sujet de Jipicad dans Pour aller plus loin en LISP
Bon, c'est simple : si je lance la fonction qui suit ("go" depuis Autocad) j'obtiens un défilement de 0... et si j'appuie sur la barre d'espace il ne se passe rien ! (defun c:Go () (while T (print (acet-sys-keystate 32)) ) ) Peut être que ça vient de Vista (http://forums.augi.com/showthread.php?t=107887&highlight=jeum ) peut être pas, je ne sais toujours pas... -
décomposer les bloc imbriqués
krunch a répondu à un(e) sujet de hammenth dans Pour aller plus loin en LISP
Bonjour et merci pour ce code-explications Dans la série des blocs il faut ajouter les Cotations et Tableaux qui sont aussi des blocs... En partant de ce code je suis arrivé à ça (le but est de différencier les types de blocs) : (vlax-for b (vla-get-blocks *doc) (setq n (vla-get-name b)) (cond ((= n "*Model_Space")) ; Model_Space ((= (vla-get-IsLayout b) :vlax-true)) ; Présentation ((or (vl-string-search "*D" n) ; Dimension / Bloc de Dim (member n '("_ArchTick" "_ClosedBlank" "_Closed" "_Dot" "_ArchTick" "_Oblique" "_Open" "_Origin" "_Origin2" "_Open90" "_Open30" "_DotSmall" "_DotBlank" "_Small" "_BoxBlank" "_BoxFilled" "_DatumBlank" "_DatumFilled" "_Integral" "_None" ) ) ) ) ((vl-string-search "*T" n)) ; Table ((or (wcmatch n "*|*") ; XRef / Bloc de XRef (= (vla-get-IsXref b) :vlax-true))) (T) ; Bloc normal ) ) Ce test est loin d'être parfait, notamment pour les Cotations... D'autre part savez vous si il y a d'autres objets "container" codés de cette façon ? -
Salut Il y a une peut-être une variable là dessus mais à partir de 2009 seulement (pas essayé) : STATUSBAR : Contrôle l'affichage des barres d'état de dessin et de l'application.
-
faire un BackSpace sur la ligne de commande
krunch a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
Merci super !! Ca marche avec (chr 8) mais il faut utiliser prompt et non pas princ (qui renvoie une chaine bizarre) -
faire un BackSpace sur la ligne de commande
krunch a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
Ce serait pour faire une ligne d'invite qui se modifie sans être ré-écrite sur la ligne suivante (il me semble avoir déjà vu ça dans une commande, avec un pourcentage qui défile). Pour ça il faudrait pouvoir effacer tout/partie de la ligne déjà écrite (avec princ ou autre).. C'est faisable selon vous ?? [Edité le 22/9/2009 par krunch] -
faire un BackSpace sur la ligne de commande
krunch a posté un sujet dans Pour aller plus loin en LISP
Bonjour à tous Y a t-il un moyen pour effacer les caractères de la ligne de commande ? Je ne trouve pas de caractère de contrôle pour Backspace, (chr 8) ne marche pas.. Ce serait pour modifier la ligne sans la réecrire. Merci d'avance -
controle des touches acet-sys-keystate
krunch a répondu à un(e) sujet de Jipicad dans Pour aller plus loin en LISP
Merci pour ta réponse, mais le problème de base c'est juste que si j'appuie sur Espace la fonction acet-sys-keystate ne le détecte pas : la boucle renvoie une suite de 0 parce que cette fonction n'est pas actualisée par la boucle > Est ce que c'est pareil chez vous ?? Sinon.. - La variable loop devrait effectivement être en local, mais de toute façon elle ne sert à rien pour le moment puisqu'elle ne peut pas être passée à nil - La valeur renvoyée est plus compliquée, le bit0 est basculé succéssivement : séquence touches : KeyDown KeyUp KeyDown KeyUp KeyDown ... valeur renvoyée.... : 0............... -127... 1 ............... -128 ... 0.............. ... [Edité le 15/9/2009 par krunch] -
controle des touches acet-sys-keystate
krunch a répondu à un(e) sujet de Jipicad dans Pour aller plus loin en LISP
Bonjour Je reviens sur cette fonction acet-sys-keystate qui m'intéresse beaucoup mais que je n'arrive pas à faire marcher (je suis aussi sous Vista hélas) En fait j'ai l'impression que dans la boucle ci-dessous il manque quelquechose pour réacualiser le KeyState... Alors voilà ce que j'obtiens : 1- lancer la boucle, elle est censée renvoyer l'état de la touche Espace mais elle ne renvoie qu'une suite de 0 ou 1 2- bien annuler avec Escape avant de cliquer n'importe où car avec Vista on se retrouve à devoir quitter AutoCad de force... 3- si on relance après avoir appuyé un nombre impair de fois sur Espace pendant la boucle précédente on obtient bien un changement (0 au lieu de 1 ou l'inverse) 4- si on relance avec la touche Espace justement (répétition dernière commande) on obtient une suite de -127 ou -128 Quelqu'un sait comment ça marche ? (defun c:do () (setq loop t) (while loop (print (acet-sys-keystate 32)) ) ) -
Traitement multiple avec les métodes vla-
krunch a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
Oui bien sûr.. C'était pour éventuellement optimiser, car l'aide laisse à penser que c'est possible.. Merci bseb -
Bonjour à tous et bonne rentrée Y a t'il un moyen pour traiter plusieurs entités avec les méthodes de transformation ActiveX (vla-Move, Rotate, Rotate3d, TransformBy...) ? J'ai pensé que c'était possible d'après l'aide, puisque l'argument object 'est décrit comme The object or objects this method applies to .. J'ai donc essayé avec un variant (comme avec vla-MoveToTop) mais ça ne marche pas, en fait le seul argument que ces méthodes ont l'air d'accepter est un objet unique. Qq'un sait si c'est possible ?
-
Appeler un focntion toutes les n secondes
krunch a répondu à un(e) sujet de lenoil dans Pour aller plus loin en LISP
Il y a bien des exemples avec TDUSRTIMER. Mais le problème c'est qu'il faut la mettre dans une boucle, donc tout dépend de ce que tu veux faire pendant le temps d'attente... -
Bonjour à tous Je dois extraire la totalité des entités graphiques contenues dans une sélection, y compris les entités imbriquées. J'ai fait la récursive ci-dessous, qui a l'air de bien marcher. Elle part juste du 1er objet sélectionné, et elle renvoie tout ce qu'elle trouve (également les VERTEX et SEQUEND mais ce n'est pas grave). Elle cherche dans les RefBlocs, les Xrefs, les Tableaux et les Cotations. Ma question porte sur ces objets containers, car le but est de la généraliser à tous les contextes. Existe t'il d'autres objets containers que ceux de la liste '("INSERT" etc..) ? Y a t'il un test plus efficace que celui là ? Comment ça se passe si des nouveaux objets apparaissent ? (defun c:do (/ result) (GetNested (ssname (ssget) 0)) (print result) (princ) ) (defun GetNested (xent / xnom ient) (if (member (cdr(assoc 0 (entget xent))) '("INSERT" "ACAD_TABLE" "DIMENSION" "ARC_DIMENSION" "LARGE_RADIAL_DIMENSION")) (progn (setq xnom (cdr(assoc 2 (entget xent)))) (setq ient (tblobjname "BLOCK" xnom)) (while (setq ient (entnext ient)) (GetNested ient) ) ) (setq result (cons (cdr(assoc 0 (entget xent))) result)) ) )
-
Ajouter une entité existante dans un bloc
krunch a répondu à un(e) sujet de krunch dans Pour aller plus loin en LISP
Merci, super.. D'après le lien* qui est dans ta 1ère discussion il faut donc les copier puis les supprimer.. * ax:AddObjectsToBlock dans http://www.jtbworld.com/lisp/axblock.htm
