Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. Bonjour, Si ton cercle a bien été crée par le centre alors la variable "LASTPOINT" te retournera bien le centre du cecle. Donc en réponse de la commande "Ligne" tu peux fournir (getvar "lastpoint") et la ligne partira du centre. NB : Ne fonctonne pas pour les autres options de la commande cercle. (3P 2P TTR)
  2. Salut Tramber, Je confirme la réponse de Patrick35 Voir: Documentation du développeur Référence AutoLISP ->Externally Defined Commands -->rotate3d Function (rotate3d args ...) (Externally-defined: geom3d ARX application) Donc tu peux appeler la fonction sans passer par (command "...") à l'intérieur d'un lisp. Voir aussi ARX et ARXLOAD (dans ce cas pas très util car chargé automatiquement)
  3. Tout le monde sait que l'on peut inactiver ou activer un calque. Mais saviez vous qu'il est possible d'inactiver ou activer un objet (rendre invisible/visible une entité) Ce n'est pas une possibilité offerte dans les commandes standard, mais voilà comment on peut y arriver. Après chargement: commande E_OFF pour inactiver commande E_ON pour réactiver Hé c'est pour le fun ;) car je ne pense pas qu'il soit judicieux de travailler de cette manière. (defun c:e_off ( / js_off n ent dxf_ent ) (princ "\nChoix des entités à inactiver: ") (setq js_off (ssget) n 0) (cond (js_off (repeat (sslength js_off) (setq ent (ssname js_off n) dxf_ent (entget ent) ) (if (not (member '(60 . 0) dxf_ent)) (entmod (append dxf_ent '((60 . 1)))) (entmod (subst '(60 . 1) '(60 . 0) dxf_ent)) ) (setq n (1+ n)) ) ) (T (princ "\nSélection vide.") ) ) (princ) ) (defun c:e_on ( / js_off n js_swap n_swap ent ent_dxf js_on nb) (setq js_off (ssget "_X" '((60 . 1))) n 0) (cond (js_off (setq js_swap (ssget "_X" '((-4 . ""))) n_swap 0) (cond (js_swap (repeat (sslength js_swap) (setq ent (ssname js_swap n_swap)) (redraw ent 2) (setq n_swap (1+ n_swap)) ) ) ) (repeat (sslength js_off) (setq ent (ssname js_off n)) (setq dxf_ent (entget ent)) (entmod (subst '(60 . 0) '(60 . 1) dxf_ent)) (entupd ent) (setq n (1+ n)) ) (princ "\nChoix des entités à réactiver: ") (setq js_on (ssget) n 0) (cond (js_on (repeat (sslength js_on) (if (ssmemb (ssname js_on n) js_off) (setq js_off (ssdel (ssname js_on n) js_off)) ) (setq n (1+ n)) ) (cond (js_off (setq nb 0) (repeat (sslength js_off) (setq ent (ssname js_off nb)) (setq dxf_ent (entget ent)) (if (not (member '(60 . 0) dxf_ent)) (entmod (append dxf_ent '((60 . 1)))) (entmod (subst '(60 . 1) '(60 . 0) dxf_ent)) ) (entupd ent) (setq nb (1+ nb)) ) (cond (js_swap (setq n_swap 0) (repeat (sslength js_swap) (setq ent (ssname js_swap n_swap)) (redraw ent 1) (setq n_swap (1+ n_swap)) ) ) ) ) (T (princ "\nAucune entité à réactivée!") ) ) ) (T (princ "\nSélection vide.") ) ) ) (T (princ "\nAucune entité à réactivée!") ) ) (princ) )
  4. bonuscad

    Limites d\'objets

    Salut, Une piste; Fait une recherche sur la méthode: vla-getboundingbox dans la documentation du développeur, je pense que cela correspond à ton besoin
  5. bonuscad

    CLIP CLIP CLIP

    Salut, Toujours avec les outils Express: La commande EXTRIM (ajuster à l'emporte pièce) doit te faire cela sans trop de problème, sauf peut être les blocs. A voir !
  6. A priori le code est trop long Désolé, a moins que Patrick ai une solution. On verra la suite Lundi. Bye
  7. Menu ? -> Aide aux Développeurs Dans Guide de personnalisation ->Formes, polices et support PostScript -->Création de fichiers de définition de formes --->Descriptions des formes. Et là il n'y a plus cas! Hormis l'aide c'est assez complexe. Il y a l'outil des express MkShape.lsp comme cité avant. Moi même je me suis créer une routine pour pouvoir créer des formes (arrondies notement) Mais celle-ci comporte des bugs, necessite d'utiliser le mode menu Ecran comme sous les versions anciennes d'autoCAD et demande une compréhension déjà du language des formes. Bref d'être un utilsateur averti des formes. Mais si tu y tiens je peux te passer le code sans soutient. On se débrouille ;)
  8. Si tu as dumpshex.exe ce n'est plus très compliqué. Regroupe l'exe et les shx dans un dossier à nom court (pour le DOS Ex SHX) Tu lance une fenêtre d'éxecution Ms DOS Tu te plaçe dans ton dossier ex: C:\>CD\SHX Puis C:\SHX>DUMPSHX CADxp.SHX>CADxp.SHP Et voilà, magique tu as ton SHP que tu peux éditer avec le bloc - note ou UltraEdit ;)
  9. Il me semple qu'avec la version complète des Express en Anglais. Il y ait un fichier DUMPSHX.EXE pour regénèrer un SHP Nous sommes tenus par la langue à diverse mise à dispositions d'outils :(
  10. Il me semple qu'avec la version complète des Express en Anglais. Il y ait un fichier DUMPSHX.EXE pour regénèrer un SHP Nous sommes tenus par la langue à diverse mise à dispositions d'outils :(
  11. Là ce n'est plus le domaine des style de trait : *.LIN mais celui des formes *.SHX sous forme compilé et *.SHP pour les sources. Une possibilité te reste accessible si tu as les outils Express d'Autodesk. Redessine par dessus ta forme avec des lignes (limitation de la routine des express qui ne produit pas de vrais vecteurs arrondis) Bien sur fait cela à l'échelle 1 pour les type de ligne :exclam: et lance la routine "MKSHAPE.lsp des Express Ton problème majeure va être de deviné où et la base de la forme. :P Et compiler ton fichier obtenu avec le même non que celui réclamé.
  12. Précision, Tu as certainement des entités qui se logent dans un calque dont le type de ligne et celui qui t'interresse. Crée simplement une ligne et "CHANGE" sa propriété en lui affectant ce type de ligne et non celui du calque. Et alors, j'espère, la routine pourra te renseigner. ;)
  13. Salut, Petit rappel: :exclam: Pour charger une fonction lisp, les différente possibilités: * la plus rapide; faire glisser depuis l'explorateur le fichier dans la zone écran d'autocad. * la plus lente; taper à la ligne de commande (load "/dossier du lisp/nom du lisp.lsp") * par le menu "option" "charger application" Pour lancer la fonction: * Si la fonction est définie comme ceci : (defun c:mafonction .... taper MAFONCTION * Si la fonction est définie comme ceci : (defun mafonction .... taper (MAFONCTION) sur la ligne de commande NB: Le resultat de la fonction model_typeline est affiché sur l'écran de texte. Faire un copier-coller dans le fichier .LIN voulu (voir l'aide à propos des fichiers type de ligne)
  14. Salut, Essaye le code suivant, en espérant qu'il fasse ce que tu souhaite. ;) (defun c:model_typline ( / ent ent_dxf nam_tl def_tl prec m_adir m_abas nam_lin def_lin nbr_lin w_line lg_tiret tp_cpx cod_shx ss_ent styl_tl file_shx scal_motif rot_motif x_motif y_motif str_motif) (setvar "cmdecho" 0) (while (not (setq ent (entsel "\nChoix du TypeLigne modèle: ")))) (setq ent_dxf (entget (car ent)) nam_tl (assoc 6 ent_dxf)) (cond ((and (cdr nam_tl) (/= (cdr nam_tl) "ByLayer") (/= (cdr nam_tl) "ByBlock")) (initget 4) (setq def_tl (entget (tblobjname "Ltype" (cdr nam_tl))) prec (getint (strcat "\nPrécision décimale désirée<" (itoa (getvar "LUPREC")) ">: ")) ) (if (not prec) (setq prec (getvar "LUPREC"))) (setq m_adir (getvar "angdir") m_abas (getvar "angbase") nam_lin (strcat "*" (cdr (assoc 2 def_tl))) def_lin (strcat "," (cdr (assoc 3 def_tl))) lg_lin (cdr (assoc 40 def_tl)) nbr_line (cdr (assoc 73 def_tl)) w_line "\nA" ) (setvar "angdir" 0) (setvar "angbase" 0) (textscr) (princ (strcat "\n" nam_lin def_lin)) (princ w_line) (while (/= (caar def_tl) 49) (setq def_tl (cdr def_tl)) ) (while def_tl (cond ((eq 49 (caar def_tl)) (setq lg_tiret (cdar def_tl)) (princ (strcat "," (rtos lg_tiret 2 prec))) ) ((eq 74 (caar def_tl)) (setq tp_cpx (cdar def_tl)) ) ((eq 75 (caar def_tl)) (setq cod_shx (cdar def_tl)) (cond ((zerop cod_shx) (princ (strcat ",[\"" (cdr (assoc 9 def_tl)) "\"")) ) ((eq tp_cpx 4) (princ ",[*") ) ) ) ((eq 340 (caar def_tl)) (setq ss_ent (entget (cdr (assoc 340 def_tl))) styl_tl (cdr (assoc 2 ss_ent)) file_shx (cdr (assoc 3 ss_ent)) ) (if (eq styl_tl "") (princ (strcat (itoa cod_shx) "," file_shx)) (princ (strcat "," styl_tl)) ) ) ((eq 46 (caar def_tl)) (setq scal_motif (cdr (assoc 46 def_tl))) (princ (strcat ",S=" (rtos scal_motif 2 prec))) ) ((eq 50 (caar def_tl)) (setq rot_motif (cdr (assoc 50 def_tl))) (princ (strcat ",R=" (angtos rot_motif 0 prec))) ) ((eq 44 (caar def_tl)) (setq x_motif (cdr (assoc 44 def_tl))) (princ (strcat ",x=" (rtos x_motif 2 prec))) ) ((eq 45 (caar def_tl)) (setq y_motif (cdr (assoc 45 def_tl))) (princ (strcat ",y=" (rtos y_motif 2 prec) "]")) ) ((eq 9 (caar def_tl)) (setq str_motif (cdr (assoc 9 def_tl))) ) ) (setq def_tl (cdr def_tl)) ) (setvar "angdir" m_adir) (setvar "angbase" m_abas) ) (T (princ "\nImpossible de récuperer le type de ligne de l'objet pointé.")) ) (setvar "cmdecho" 1) (prin1) )
  15. bonuscad

    Comande \"_insert\"

    Ce que tu cherche est dans ddins2.lsp Tes express vont finir par ne plus fonctionner du tout si il faut que tu bidouille les fichiers les un après les autres :D
  16. Si Autocad n'est pas lancé dans le dossier de tes motifs ta routine ne fonctionnera pas! Tu peux utilser la fonction (findfile) pour t'assurer que le fichier est localisé (mais il faudrait dans ce cas rajouté temporairement un chemin de recherche sur le dossier de tes motifs. (defun c:clich ( / i file) (setvar "filedia" 0) (setq i 1) (while (< i 20) (progn (setq fle (findfile (strcat "Motif" (itoa i) ".dwg"))) (cond (fle (command "_open" fle) (while (wcmatch (getvar "cmdnames") "*open*") (command pause) );while (command "_zoom" ET) (command "mcliche" "") ) (T (princ (strcat fle " non trouvé"))) ) (setq i (+ i 1)) );progn ); ) NB: Pas testé la routine! j'ai pas les motifs ;-)
  17. Salut, 2 adresses à consulter, vous trouverez peut être des infos interessantes sur les images référencées. (En Anglais) http://www.mapimagery.com http://www.ermapper.com
  18. bonuscad

    Pb variable?

    Bonjour, Je dirais plutôt une situation non prévue, mais on peut considérer ça come un bug. Pour te sortir d'affaire tu peux par exemple, lorsqu'il te demande l'angle d'inclinaison, fournir en réponse la ligne suivante: (angtos (+ (getangle "\nNouvel angle?: ") (atan (/ (cadr (getvar "ucsxdir")) (car (getvar "ucsxdir")))))) cela fera la conversion d'angle du SCG vers le SCU
  19. Bonjour, Le plus simple; utiliser la couleur 255 qui est la plus proche du blanc (lègèrement grisée)
  20. (command "_insert" pause pause pause pause pause) n'est pas aussi bien que ca, car tu ne sais ce que l'utilisateur va choisir comme option pendant ces pauses. pause est interressant à employer quand on est sûr qu'aucune autre option est possible. Donc je déconseille cette méthode sous cette forme dans la pluspart des cas. D'autre part je soustiens Tramber sur le non emploi de (getXXX) dans un (command). Curieusement l'emploi de (getXXX) est supporté dans (command), ce qui n'était pas le cas avant. Toujours est-il que je recommande aussi l'emploi d' (initget bit_de_controle) pour les appels à (getXXX). Dans ce cas l'emploi de getpxxx dans command devient ingérable car l'ordre attendu n'est plus le bon. Donc en règle générale, 1-Définir ses variables avec getpxxx en effectuant un contrôle avec initget pour être sur que la variable sera affectée. 2-Faire un appel à command avec ces variables avec les options souhaitées en language international. En respectant ces règles de base vous pourrez construire des lisp qui "tiennent la route".
  21. Salut Quand je te disais que "bidouiller" les fonctions des Expres n'est pas une bonne idée! Pourquoi? Parce qu'il y a beaucoup de fonctions interdépendantes qui servent à d'autre fonctions Celle que tu cherche est utilsé dans sprhatch.lsp et est définie dans le fichier clipit.lsp (si elle n'est pas encore référencée ailleur) Sprhatch charge automatiquement le fichier clipit.lsp. La fonction qui t'interesse se trouve donc dans ce fichier et s'appelle (get_clipitres) Voilà, bonne chance et bon :casstet:
  22. bonuscad

    Plus d\'intersection = bug?

    Si tes objet ont un type ligne autre que continu, il peut ariver que intersection ne fonctionne pas suivant le facteur de zoom. Il faut a ce moment là utiliser l'intersection apparente.
  23. Peut être l'espace après la virgule du $(eval, Les copier-coller sont souvent déformés par le language php du forum Désolé, mais cela marche, essaye de trouver :casstet:
  24. Je l'ai quand même testé avant et je n'avais pas ce problème. :exclam: Le bouton affiche dans tous les cas l'affectation de la variable USERS3, mais l'execution n'a lieu que si le nom de la présentation est A4 ou A3. NB:Méfie toi du copier coller, l'instruction doit s'arrêter après le ^Z et ne plus comporter d'espace qui seraient interprété comme une validation.
  25. Passer des paramètres de commande en diesel n'est pas évident. :casstet: Le plus simple est de se servir des variables utilisateurs pour pouvoir interpréter des commandes Voilà ce que cela pourrait donner pour ton cas: ^C^C'USERS3 _ai_selall _.move 0,0 @254.375,0 ^M$M=$(if,$(or,$(eq,$(getvar,ctab),"A4"),$(eq,$(getvar,ctab),"A3")),$(eval,$(getvar,users3)))^Z Vue l'utilisation du ^C^C en début de bouton, j'ai shunté le cmdactive qui n'a plus trop d'utilité et simplifie le bouton.
×
×
  • 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é