Aller au contenu

Matt666

Membres
  • Compteur de contenus

    736
  • Inscription

  • Dernière visite

  • Jours gagnés

    2

Tout ce qui a été posté par Matt666

  1. Tente ça peut être... Je suis totalement novice en VBA, donc bon... (command "vbastmt" "ActiveDocument.Save" "vbastmt" "ActiveDocument.Close") A bientot ! Matt.
  2. Bon j'ai presque fini, mais là je bute... J'ai une erreur, et je ne vois pas du tout ce que c'est !!! Si qqn voit, ou sait se servir de la gestion des erreurs de Visual Lisp... ;;; Routine principale (defun c:kill ( / CMDECHO CN CN2 CN3 ENT ENT2 LST LST2 SEL SSET) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (command "_undo" "d") (if (setq sel (ssget '((0 . "LINE")))) (progn (setq cn 0) (setq tot (sslength sel)) (while (< cn tot) (setq ent (ssname sel cn) cn (1+ cn) lst nil lst (cons (cdr (assoc 10 (entget ent))) (list (cdr (assoc 11 (entget ent)))) ) sset sel cn2 0 cn3 0 ) (ssdel ent sset) (while (< cn2 (sslength sset)) (setq ent2 (ssname sset cn2) cn2 (1+ cn2) ) (if (linearp (setq lst2 (append lst (cons (cdr (assoc 10 (entget ent2))) (list (cdr (assoc 11 (entget ent2)))) )) )) (progn (setq cn3 (1+ cn3)) (if (or (betweenp (car lst) (cadr lst) (caddr lst2)) (betweenp (car lst) (cadr lst) (cadddr lst2)) (member (caddr lst2) lst) (member (cadddr lst2) lst) ) (progn ;;; départ de la ligne (entmod (subst (cons 10 (car (extrm lst2))) (assoc 10 (entget ent)) (entget ent) )) ;;; fin de la ligne (entmod (subst (cons 11 (cadr (extrm lst2))) (assoc 11 (entget ent)) (entget ent) )) (setq cn3 (1+ cn3) cn (1- cn) ;;;Repasse la ligne après modif ) (entdel ent2) ;;; Efface la deuxième ligne ) ;;;Si une ligne est dans une autre ligne, ou si elles sont exactement superposées (if (or (and (betweenp (car lst2) (cadr lst2) (caddr lst2)) (betweenp (car lst2) (cadr lst2) (cadddr lst2)) ) (and (member (caddr lst2) lst) (member (cadddr lst2) lst) ) ) (progn (entdel ent2) (setq cn3 (1+ cn3)) ) ) ) ) ) ) (if (eq cn3 0) (ssdel ent sel)) ) (princ "\nDessin nettoyé.") (redraw) ) ) (command "_undo" "f") (setvar "cmdecho" cmdecho) (princ) ) ;;; VEC1 Retourne le vecteur normé (1 unité) de p1 à p2 (nil si p1 = p2) ;;;Lisp de GILE (defun vec1 (p1 p2) (if (not (equal p1 p2 1e-009)) (mapcar '(lambda (x1 x2) (/ (- x2 x1) (distance p1 p2)) ) p1 p2 ) ) ) ;;; Evalue si pt est entre p1 et p2 (ou égal à) ;;;Lisp de GILE (defun betweenp (p1 p2 pt) (or (equal p1 pt 1e-9) (equal p2 pt 1e-9) (equal (vec1 p1 pt) (vec1 pt p2) 1e-9) ) ) ;;; Ne conserve que les points aux extrémités d'une liste de points ;;; NOTA : ne fonctionne qu'avec des points alignés. ;;;Lisp de GILE (defun extrm (plst) (if (= 2 (length plst)) plst (cond ((betweenp (car plst) (cadr plst) (caddr plst)) (extrm (cons (car plst) (cons (cadr plst) (cdddr plst)))) ) ((betweenp (car plst) (caddr plst) (cadr plst)) (extrm (cons (car plst) (cons (caddr plst) (cdddr plst)))) ) ((betweenp (cadr plst) (caddr plst) (car plst)) (extrm (cdr plst)) ) ) ) ) ;;; LINEARP Retourne T si tous les points de la liste sont alignés ;;; Lisp de GILE (defun linearp (lst) (cond ((= 2 (length lst)) T) ((or (equal (vec1 (car lst) (cadr lst)) (vec1 (car lst) (caddr lst)) 1e-009 ) (equal (vec1 (car lst) (cadr lst)) (vec1 (caddr lst) (car lst)) 1e-009 ) ) (linearp (cdr lst)) ) ) ) Merci ! [Edité le 27/9/2007 par Matt666]
  3. C'est vrai que c'est bizarre... J'ai essayé sur AutoCAD, et ça ne fonctionne pas du tout... j'ai cherché un peu sur le net, il j'ai trouvé ça : (defun OpenDrawing (strBlockName); blkname should include the file type (if (findfile strBlockName) (command "vbastmt" (strcat "AcadApplication.Documents.Open \"" strBlockName "\"")) (princ "\nFile not found: ") ) (princ) ) ex : (openDrawing "c:/test.dwg") Sinon avec un script (setq filename "direct.dwg") (command "_script" "open.scr") De le fichier script open.scr : _open !filename Il faut une entrée à la fin... _open < espace > !filename < espace > Si qqn est au courant de ce pb, ce serait bien urbain ( :P ) de nous en faire part ! [Edité le 27/9/2007 par Matt666]
  4. Attends... Tu veux faire fonctionner le bout de code que tu as donné au début, nan ? C'est pas ça que tu veux ? En fait je me dis que dans ton cas, la variable SDI, on s'en fout !! :) Si tu veux ouvrir ton dessin avec ta commande, il faut d'abord mettre à zéro la variable FILEDIA, qui annule les boîtes de dialogue... Je vois ce que je vois, c'est tout ! Si tu as une bonne raison d'utiliser la varialbe SDI, dis moi ! Chez moi ça fonctionne, j'ai un fichier "test.dwg" à la racine du C, je lance la routine et le plan s'ouvre sans problèmes... En outre, Faut savoir que la var SDI est en lecture seule... Impossible de la modifier ! J'attends de tes news pour éclaircir un peu ton problème... A bientot ! Matt.
  5. Oui oui je sais bien... C'est pour AutoCAD, ou clones... Je travaillais avant sous LT, et je trouvais ça vachement pratique !! Voilà...
  6. Salut ! Petite suggestion de dév, Perso je suis trop mauvais avec les grread et grdraw pour pouvoir faire ça... Cahier des charges : :P Créer un lisp permettant de reproduire l'accroche repérage de AutoCAD LT. Procédure : Dessin de base : http://images2.hiboox.com/vignettes/3907/0vlcm5gu.jpg 1- Commande ligne (ou n'importe quelle autre !) 2- Premier point (comme l'exemple mais on n'est pas obligé) 3- Maj+Clic droit (ou autre pour appeler la commande) 3a- Passage en mode ortho 4- Clic sur un point pour le repérage (le dessin est verrouillé sur l'ortho, donc si on clic sur une extrémité, avec l'accroche, la ligne reste sur l'ortho et fait la longueur X ou Y de la distance entre le premier pt de la ligne et le réperage temporaire) 5- Entrée pour terminer le repérage 5a - 2ème pt de la ligne au niveau de pt de repérage temporaire. http://img294.imageshack.us/img294/9938/ex7by2.jpg 6- Maj+Clic droit (ou autre pour rappeler la commande) 7- clic sur autre point pour le repérage tempo (etc.) (8- Entrer une longueur pour un autre pt de repérage) ça je sais plus si ça le fait ou pas 9- Entrée pour terminer la commande. 10- La ligne est crée. http://img120.imageshack.us/img120/4144/ex8vr8.jpg Fin de la commande ligne. Contraintes : :casstet: Si possible en autolisp pur, ou en tout cas avec les vl dispo dans les équivalences de (Gile) .. Voilà ! Dites moi ce que vous en pensez ! A bientot. Matt. [Edité le 30/9/2007 par Matt666]
  7. Matt666

    Liste accrochages

    Eh bien ça y est !! Ouf... En fait le repérage existe sous lt, mais fonctionne différemment ! Je poste un souhait pour avoir cette accroche sous AutoCAD lourd... A + ! Matt.
  8. Matt666

    Möebius

    Petite explication dans cette page... On va demander au brutes du lisp, ya de quoi s'amuser.... C'est assez balaise, là !!! :P
  9. C'est pas la variable SDI qu'il faut changer, c'est FILEDIA... Il faut enregistrer la variable et la mettre à le 1 le temps d'ouvrir le dessin. Ensuite tu restaures la variable à son état initial... (progn (setq filedia (getvar "filedia")) (setvar "filedia" 0) (command "_open" "c:\\test.dwg") (setvar "filedia" filedia) ) Mais si tu veux rester avec ta variable SDI, remplace tous les filedia par SDI... A bientôt.. Matt. PS : J'ai mis un progn au cas où tu essaies cette routine directement. Si tu inclues ce bout de code dans ta routine, pas forcément besoin de progn ;) [Edité le 27/9/2007 par Matt666]
  10. Matt666

    Continuer une polyligne

    Pfff, c'est du vlisp... Déçu... :) En fait BricsCAD comporte un petit bug, qui lorsque la commande pedit a échoué, cette même polyligne devient une polyligne lourde... Donc ce n'ets pas dénué d'intérêt pour les utilisateurs intelliCAD... Je ferai ptet une version autolisp avec tes améliorations (qui sont d'ailleurs vachement bien !! Surtout selon le coté sélectionné)... Histoire de rendre possible l'utilisation de cette routine pour des intelliCadiens... A bientot ! Matt. [Edité le 27/9/2007 par Matt666]
  11. La vache il est drôlement dur ce lisp :D !!! Je tatonne, mais j'y arriverai ! A bientôt ! Matt.
  12. Matt666

    Blocs Autocad 2004

    Une routine "toutgris" !!! Dément... :D
  13. Matt666

    Blocs Autocad 2004

    :thumbup: Ah bah oui forcément, un code balancé comme ça c'est po évident !! Bon : 1- tu copies le code dans un fichier texte que tu enregistres où tu veux, et que tu nommes CHLAY.LSP 2- Ensuite tu vas AutoCAD, Outils/Charger une application... 3- Tu vas chercher le fichier texte ou lisp que tu as enregistré 4- Si tu veux l'avoir à chaque démarrage, tu cliques sur "Contenu", tjs dans la même fenêtre et tu ajoute le lisp 5- Charger 6- Fermer. Tu n'as plus qu'à entrer CHLAY dans la ligne de commande ! Bing.
  14. Ah ok pardon ! J'avais pas vu... A+ ! Matt.
  15. Matt666

    Blocs Autocad 2004

    un truc comme ça ? (defun LSTAB ( TABL / LB X ) (if (member (strcase tabl) '("APPID" "BLOCK" "DIMSTYLE" "LAYER" "LTYPE" "STYLE" "UCS" "VIEW" "VPORT") ) (progn (setq lb (cons (cdr (assoc 2 (tblnext tabl T))) lb)) (while (setq x (cdr (assoc 2 (tblnext tabl)))) (setq lb (cons x lb)) ) (if (/= (strcase tabl) "BLOCK") (setq lb (acad_strlsort lb)) lb ) ) ) ) (defun lst2str (lst sep / ) (strcat (vl-princ-to-string (car lst)) (apply 'strcat (mapcar '(lambda (x) (strcat sep (vl-princ-to-string x))) (cdr lst) ) ) ) ) (defun c:CHLAY (/ cmdecho a b ent) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (command "_undo" "D") (if (setq a (ssget "_X")) (repeat (setq cn (sslength a)) (setq ent (entget (ssname a (setq cn (1- cn))))) (entmod (subst (cons 62 256) (assoc 62 ent) ent )) (entupd (ssname a cn)) ) ) (command "-calque" "CO" 8 (lst2str (lstab "layer") ",") "" "_UNDO" "F") (setvar "cmdecho" cmdecho) (princ) ) Entre CHLAY, puis attend ! A bientot. Matt. [Edité le 26/9/2007 par Matt666]
  16. Gile, tu pourrais donner ta solution de sélection par polyigne dans ce post ! C'est un peu vieux mais ça peut toujours servir... A bientot. Matt.
  17. Matt666

    Liste accrochages

    Pas de pb, ça m'arrive souvent aussi !!! :thumbup:
  18. Matt666

    Liste accrochages

    Oui je connais tout cela... J'utilise AutoCAD lourd !! Je veux juste une liste de toutes les accroches objets dispo dans AutoCAD LT, avec le MAJ+Clic droit, et dans les paramètres d'accroche... C'est tout... Par contre ton image n'a pas fonctionné.. Mais tu as du le voir ;) Merci pour ta réponse en tout cas ! A bientot. Matt. [Edité le 26/9/2007 par Matt666]
  19. Salut ! Qqn pourrait me donner la liste des accrochages objets dispo sur ACLT, syouplé ? La liste par les paramètres des accroches et aussi avec maj+clic droit ????? Ya un accrochage dément que j'utilisais, mais je ne me rappelle pas de son nom... C'est repérage, ou point.... un truc comme ça... Merci ! A bientot. Matt. [Edité le 26/9/2007 par Matt666]
  20. Matt666

    Caractères spéciaux

    Tout dépend de ton style de texte... A savoir quelle typo est utilisée... Certaines typos sont limitées en caractères. La police par défaut n'accepte pas le ², par exemple. Essaie de changer de style de texte... A bientot. Matt. [Edité le 26/9/2007 par Matt666]
  21. Matt666

    Continuer une polyligne

    Ah oui mais ok, j'avais pas vu le or !!!! (or (equal ent (entlast)) Oui c'est une bonne idée... Toutes les amélios sont les bienvenues ! A bientot. Matt.
  22. Matt666

    acadmns

    Euh ce ne sont plus des fichiers mns ce sont des fichiers cui, maintenant...
  23. Matt666

    Continuer une polyligne

    J'arrive pas à comprendre cette logique... :o Je vois vraiment pas.... Peux-tu t'expliquer encore mieux que ce tu as déjà fait ? Chu un peu neuneu des fois... ;) Mais c'est exactement pour ça mon ami !!! Sinon, tu n'as vu l'erreur décelée par Fraid non plus ?? Je vois vraiment pas.. Ca fonctionne très bien chez moi ! Désolé Fraid, mais je vois vraiment pas... En tout cas de me montrer une autre façon de procéder, et de voir les erreurs qui se cachent dans mon code ! C'est cool. A bientot ! Matt.
  24. Matt666

    Continuer une polyligne

    Voilà un exemple de création de polyligne avec un entmake. Par contre je n'arrive pas à reproduire la fermeture de la polyligne... Si qqn a une idée ! (defun c:COPO_ENTM (/ cmdecho pol newpol lst) (setq cmdecho (getvar "cmdecho")) (setvar "cmdecho" 0) (if (and (setq pol (car (entsel "\nSélectionner la polyligne à continuer :"))) (eq "LWPOLYLINE" (cdr (assoc 0 (entget pol)))) ) (progn (command "_.PLINE" (cdr (assoc 10 (reverse (entget pol))))) (while (not (zerop (getvar "cmdactive")))(command pause)) (setq newpol (entlast)) (setq lst (append (vl-remove-if-not '(lambda (x) (member (car x) '(10 40 41 42))) (entget pol)) (vl-remove-if-not '(lambda (x) (member (car x) '(10 40 41 42))) (entget newpol)) )) (entmake (append (list (cons 0 "LWPOLYLINE") (cons 8 (cdr (assoc 8 (entget pol)))) (cons 62 (cdr (assoc 62 (entget pol)))) (cons 90 (+ (length (vl-remove-if-not '(lambda (x) (eq (car x) 10)) (entget pol))) (length (vl-remove-if-not '(lambda (x) (eq (car x) 10)) (entget newpol))) )) ) lst ) ) (entdel pol) (entdel newpol) (redraw (entlast)) )) (setvar "cmdecho" cmdecho) (princ) ) A bientôt ! Matt. Edition : Ajout des vl- à remove-if-not... Vive BricsCAD !! [Edité le 25/9/2007 par Matt666]
  25. Matt666

    Continuer une polyligne

    Euh normalement non... Visuellement : 1- tu sélectionnes ta polyligne 2- tu la continues depuis le dernier sommet saisi... En code ça se passe autrement... 1- Tu sélectionnes 2- Tu créés une deuxième polyligne à partir du dernier pt de la première 3- Commande pedit+joindre pour joindre les deux polylignes... Il faut utiliser COPO2, ou recharges le dernier code que j'ai mis sur cette page... COPO... Au fait COPO pour COntinuer POlyligne... Qu'on se le dise ! Sinon on pourrait imaginer une polyligne jointe avec ENTMAKE...
×
×
  • 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é