Aller au contenu

krunch

Membres
  • Compteur de contenus

    239
  • Inscription

  • Dernière visite

Tout ce qui a été posté par krunch

  1. Je reviens sur ma remarque sur les tableaux : en fait nentselp ne détecte pas le texte normal à l'intérieur des tableaux :( Je n'ai jamais su s'il fallait déclarer les fonctions locales. Il faut le faire pour toutes ou juste pour *error* ?
  2. Bon j'ai fini par arriver à quelque chose mais ça a été intense.. Pour le moment je vois juste 2 défauts : - avec les cercles la superposition n'est pas parfaite comme disait (gile) : le highlight est un peu brouillon - avec les MText des tableaux quand ils sont recadrés (remis à la ligne) par une cellule : le MText sort sur 1 ligne Il faut aussi bloquer les XRefs (mon post précédent) sinon "Erreur Automation Objet absent de la base de données" 2 trucs remarqués au passage : - pour comparer des objets ename on peut utiliser eq mais pour des objets vla il faut utiliser equal - (redraw ename 3) marche mieux que (vla-highlight vla 1) notamment avec les attributs (defun c:go (/ acdoc out grr cod obj rol dum mat) (defun *ERROR* (msg) (if rol (High rol nil)) (print msg) ) (defun High (rol on) (if on (redraw rol 3) (if dum (progn (vla-delete dum) (setq dum nil) ) (redraw rol 4) ) ) ) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))) (while (not out) (setq grr (grread t 15 2) cod (car grr)) (cond ; Enter/Espace/Clic-droit ((or (= cod 25) (member grr '((2 13)(2 32)))) (*ERROR* "sortie") (setq out T) ) ; Rollover ((= cod 5) (if (setq obj (nentselp (cadr grr))) (setq mat (caddr obj) obj (car obj))) (or (eq obj rol) (progn (if rol (High rol nil)) (if obj (if mat (progn (setq dum (vla-CopyObjects acdoc (vlax-make-variant(vlax-safearray-fill(vlax-make-safearray vlax-vbobject '(0 . 0)) (list (vlax-ename->vla-object obj)))) (vla-get-ModelSpace acdoc)) dum (car (vlax-safearray->list (vlax-variant-value dum)))) (vla-TransformBy dum (vlax-tmatrix mat)) (setq obj (vlax-vla-object->ename dum)) ) ) ) (setq rol obj) (if rol (High rol T)) ) ) ) ) ) (princ) )
  3. Ok merci pour la confirmation C'est bien sûr une question de limite du Lisp, mais un ignorant du C# ne sait même pas quelle bibliothèque est utilisée... Le C# a l'air d'ouvrir beaucoup de possibilités en étant plus près de la source, mais affreusement compliqué par ailleurs .. (et puis vous faîtes en 30 lignes ce qu'on fait en 1 avec le Lisp) Je vais donc essayer ça. A priori la copie de l'entité est placée dessus, et même highlitée elle cache l'originale... Merci encore
  4. Oui j'ai vu le lien de James Allen vers le dll. Mais comme auparavant il avait l'air de dire que c'était "possible mais compliqué" en Lisp je cherchais une confirmation .. La solution de substitution de (gile) me semble en effet réalisable (avec CopyObjects je suppose), bien qu'un peu compliquée. En fait j'ai déjà intégré des .dll de (gile) postés sur ce forum .. Mais de façon générale je suis un peu réticent à cette solution : n'étant pas du tout compétent (ne sachant pas ce qu'il y a dedans ..), et apparemment il y a parfois des problèmes de compatibilité (?). Peut être à tort, je ne sais pas, mais s'il y a un moyen de rester en Lisp j'ai tendance à préférer. Merci pour vos réponses.
  5. Bonjour à tous Voilà la question est dans le titre, et c'est pour utiliser avec nentselp. J'ai essayé vla-highlight au lieu de redraw 3, entupd et redraw sur la référence .. ça ne marche pas. J'ai trouvé ce post sur le même sujet mais la réponse laisse perplexe .. apparemment il y aurait un moyen ?
  6. Ok merci Bruno. Mais en fait pour ma dernière question il s'agit de d'attacher un entname (ou éventuellement un ID) dans un objet champ. Et à priori (?), en admettant que je retrouve le entname du fichier source depuis le handle, ça m'étonnerait que le champ fonctionne avec une entité d'un autre fichier ..
  7. J'aurais tout de même une autre question : peut on référencer de façon stable une entité de XRef ? Juste la référencer, pas la modifier. C'est pour un outil qui gère les Champs d'objets, et avec les XRefs c'est le même problème : les objets sont 'refabriqués' à chaque ouverture, ce qui fait que la référence est perdue. Si quelqu'un a une idée là dessus ..
  8. Ah, merci Bonuscad, il faut donc bloquer cette opération pour les XRef. J'avais fait un exemple tout bête (face à l'incompréhension générale), un code qui passe une entité en rouge : (defun c:go (/ in) (setq in (entget (car (nentselp)))) (entmod (subst (cons 62 1) (assoc 62 in) in)) ) Je l'applique sur une entité de XRef (par exemple un cercle). A la base il doit avoir une couleur (par exemple vert) afin qu'il comporte un code 62. Je tape Go, je sélectionne le cercle, je Regen : le cercle passe en rouge. J'enregistre, je ferme, je ré-ouvre : le cercle est vert .. En fait je ne veux pas spécialement l'appliquer aux XRefs, c'était juste pour confirmer qu'il y a un hiatus avec ces objets en particulier.
  9. Oui avec _refedit en effet, j'avais oublié ça. A la base je parlais d'une commande Lisp qui permet d'accéder aux sous-objets (avec nentselp) et de les modifier à la volée, dans ce cas les modifs ne sont pas enregistrées. Donc il suffit d'interdire les modifs des objets imbriqués dans une XRef d'après le dernier argument de nentselp (chaîne d'imbrication). Merci et désolé si pas clair .. @philphil : je parlais des 2, mais la modif de bloc à la volée peut être pratique, alors que celle d'un bloc de XRef paraît inutile.
  10. Bonjour Juste une question de choix : on peut modifier les objets d'un bloc XRef mais les modification ne seront pas enregistrées dans le dessin (ok?). Donc, pour une commande qui rend la chose possible, il paraît logique d'empêcher les modifs uniquement pour les blocs XRef .. Vous êtes d'accord avec ça ?
  11. En effet ça marche au poil pour les Text et MText (mais pas pour les AttDef :() Merci bien
  12. Non :( Je précise que c'est idem en désactivant le (setvar "NOMUTT" 0) final (l'appel de commande s'exécute après la suite), donc NOMUTT ne marche pas avec cette commande. C'était pour éviter un Regen qui peut être lourd si possible, mais pourquoi pas .. Merci
  13. Bonjour à tous Voyez vous un moyen de supprimer le message de commande dans le cas suivant ? C'est pour traiter plusieurs champs dans une boucle (l'un après l'autre, pas à la fin), et bizarrement NOMUTT est sans effet .. (setvar "CMDECHO" 0) (setvar "NOMUTT" 1) ; marche pas (command "._UPDATEFIELD" obj "") (setvar "NOMUTT" 0) (setvar "CMDECHO" 1) 1 champ(s) trouvé(s). 1 champ(s) mis à jour.
  14. Ok j'avais oublié que c'était si limitatif .. Sinon j'utilise depuis un moment et sans problème les setvar, getvar dans des réacteurs, ainsi que dans un réacteur pickfirstModified : entget (aucun pb même avec les VPort) et des fonctions ss.. (sauf ssget) Merci pour ta réponse
  15. Bonjour J'obtiens des bugs avec entget dans des cas très spécifiques : - appelé depuis un réacteurs - appliqué à une entité ViewPort Des bugs qui empêchent d'utiliser entget ! Mon système : Win7(64)/A2010 Bug1 : - charger le code suivant dans un dessin avec au moins 2 présentations - changer de présentation (le réacteur est déclenché par une modif de CVPORT) >> si le zoom est différent il n'est pas mis à jour, AutoCad s'emmêle les pinceaux dans les zooms .. - passer en Objet et repasser dans une présentation >> même chose mais en altérant la ViewPort qui est agrandie ou réduite (defun callback1 (u v) ; un moyen d'obtenir une ViewPort (entget (vlax-vla-object->ename (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-acad-object))))) ) (vlr-editor-reactor nil '((:vlr-sysVarChanged . callback1))) Bug2 : - charger le code suivant - modifier une ViewPort >> CRASH! (defun callback2 (u v) (print (cadr v)) (entget (cadr v)) ) (vlr-acdb-reactor nil '((:vlr-objectModified . callback2)))
  16. Ok compris : la fonction arrête de rogner la chaine (depuis la droite/ la gauche / les 2) dès qu'elle tombe sur un caractère absent de char-set, à la base je croyais que char-set était un "pattern". Merci pour ta réponse j'avais raté un truc.
  17. D'après l'aide le 1er argument char-set est "A string listing the characters to be removed". Il lui arrive de supprimer tous les caractères de char-set (même dans le désordre) qu'il trouve à droite ou à gauche de l'autre string, comme ici : $ (vl-string-trim "zfd" "hgfffdz") "hg" Mais pas toujours .. je sèche aussi
  18. Ok, en effet DIMZIN ne doit pas être à 8 pour être conforme à l'aide (mais je ne vois pas ça spécifié dans la doc de base du 2010) Merci Pour les (vl-string-trim) voilà les résultats corrects, obtenus avec d'autres mots : $ (vl-string-left-trim "AcDb" "AcDbPolyline") "Polyline" $ (vl-string-right-trim "AcDb" "AcDbPolyline") "AcDbPolyline" $ (vl-string-trim "AcDb" "AcDbPolyline") "Polyline" $ (vl-string-trim "AcDb" "XcDbPolyline") "XcDbPolyline" $ (vl-string-trim "XcDb" "XcDbPolyline") "Polyline"
  19. Je ne sais pas si c'est nouveau, connu ou pas .. - Un résultat non-conforme à l'aide avec (rtos) : J'obtiens "17.5" et non pas "17.50" .. - Avec les (vl-string-trim) j'ai des résultats carrément imprévisibles... _$ (vl-string-left-trim "AcDb" "AcDbArc") "rc" $ (vl-string-right-trim "AcDb" "AcDbArc") "AcDbAr" _$ (vl-string-trim "AcDb" "AcDbArc") "r" (vl-string-trim "AcDb" "XcDbArc") "XcDbAr" (vl-string-trim "XcDb" "XcDbArc") "Ar"
  20. D'accord merci :) Je viens de re-télécharger et ça marche impeccable. Pourtant hier j'avais bien vidé la mémoire cache du navigateur (2 fois), remplacé le bon fichier .. j'ai même redémarré l'ordi. Et effectivement hier le bouton Débloquer (dans les propriétés) des fichiers téléchargés n'était pas disponible .. Je n'ai pas tout compris. Merci encore
  21. C'est curieux car je l'ai aussi testé dans un autre 2010 (32 bits) et j'avais aussi cette erreur. Le déroulement est bien ce que tu décris mais j'ai une erreur uniquement si je suis en espace Papier (pas dans une vue je précise). Oui il faut régénérer, mais on peut aussi vouloir appliquer gc-vplayerremoveall à plusieurs calques à la suite et préférer régénérer à la fin (c'est le cas de l'interface en exemple), plutôt que déclencher autant de Regen qu'il y a de calques. --------------------------------- Je réessaierai sur d'autres postes, sinon voilà l'erreur (pas toujours affichée) que j'ai avec la dernière version : Autodesk.AutoCAD.Runtime.Exception: eNotApplicable à Autodesk.AutoCAD.Runtime.Interop.ThrowExceptionForErrorStatus(Int32 errorStatus) à AcMgUserInteraction.{ctor}(AcMgUserInteraction* , AcApDocument* pDoc, Boolean prompting) à Autodesk.AutoCAD.EditorInput.Editor.WriteMessage(String message, Object[] parameter) à LispVpLayer.LispErrorMsg.Message(String msg) à LispVpLayer.VpLayer.VpLayerRemoveAll(ResultBuffer resbuf) à Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction) à Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction) à Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi, Boolean bLispFunction) à Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.InvokeLisp(); erreur: Demande ADS erronée
  22. Alors ça doit venir de la 2010 (j'ai un Erreur: eNotApplicable) C'est comme pour l'autre fonction .. En fait j'essaye de les piloter par une interface OpenDCL, et quand je valide ça traite les calques à la suite, d'où l'ennui avec le Regen .. Voilà à quoi ça ressemble : http://img15.hostingpics.net/thumbs/mini_955170overrides.gif
  23. C'est fait, mais j'ai bien un fichier différent (légèrement + petit) .. Le code est encore trop en vrac, mais je peux reproduire l'erreur de la VP#0 ... Il faut passer en Présentation, et la VP0 est la vue active (la vue "Présentation"), je la récupère comme ça : (vlax-vla-object->ename (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-acad-object)))) Ca marche très bien avec gc-vplayeroverride : le code suivant applique une override "Rouge" au calque "0". Soit à la VP#0 si tu es en espace Papier, soit à la VP#1 si tu as double-cliqué dedans (c'est ce que je cherche à obtenir, d'où ce code vla) .. (gc-vplayeroverride (vlax-vla-object->ename (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-acad-object)))) "0" 1) Pour effacer l'override j'ai une erreur avec le même code, mais uniquement si je suis en espace Papier .. (gc-vplayerremoveall (vlax-vla-object->ename (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-acad-object)))) "0") Quant au Regen j'ai intégré la fonction dans une boucle de calques et j'ai bien un Régénération du modèle déclenché pour chaque calque
  24. J'ai fait plusieurs essais mais je ne vois pas de différence avec la version précédente (toujours erreur VPort#0 et Regen) C'est bien toujours cette adresse : à partir de cette adresse : http://dl.dropbox.com/u/14851751/LispVpLayer.zip) ??
  25. Bonjour (gile) Je me permets de revenir à la charge parce qu'un autre problème empêche d'utiliser gc-vplayerremoveall (du moins dans une boucle) : le regen intégré... Avec le problème des VPort0 ça la rend difficilement utilisable, et tel quel on ne peut pas toujours supprimer les overrides affectées avec gc-vplayeroverride
×
×
  • 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é