Matt666
Membres-
Compteur de contenus
736 -
Inscription
-
Dernière visite
-
Jours gagnés
2
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Matt666
-
(command \"_open\" \"c:\\\\test.dwg\")
Matt666 a répondu à un(e) sujet de l56 dans Pour aller plus loin en LISP
Tente ça peut être... Je suis totalement novice en VBA, donc bon... (command "vbastmt" "ActiveDocument.Save" "vbastmt" "ActiveDocument.Close") A bientot ! Matt. -
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]
-
(command \"_open\" \"c:\\\\test.dwg\")
Matt666 a répondu à un(e) sujet de l56 dans Pour aller plus loin en LISP
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] -
(command \"_open\" \"c:\\\\test.dwg\")
Matt666 a répondu à un(e) sujet de l56 dans Pour aller plus loin en LISP
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. -
Oui oui je sais bien... C'est pour AutoCAD, ou clones... Je travaillais avant sous LT, et je trouvais ça vachement pratique !! Voilà...
-
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]
-
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.
-
Petite explication dans cette page... On va demander au brutes du lisp, ya de quoi s'amuser.... C'est assez balaise, là !!! :P
-
(command \"_open\" \"c:\\\\test.dwg\")
Matt666 a répondu à un(e) sujet de l56 dans Pour aller plus loin en LISP
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] -
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]
-
La vache il est drôlement dur ce lisp :D !!! Je tatonne, mais j'y arriverai ! A bientôt ! Matt.
-
Une routine "toutgris" !!! Dément... :D
-
: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.
-
zoom sur bloc sans la commande zoom objet !!
Matt666 a répondu à un(e) sujet de Matt666 dans Pour aller plus loin en LISP
Ah ok pardon ! J'avais pas vu... A+ ! Matt. -
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]
-
zoom sur bloc sans la commande zoom objet !!
Matt666 a répondu à un(e) sujet de Matt666 dans Pour aller plus loin en LISP
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. -
Pas de pb, ça m'arrive souvent aussi !!! :thumbup:
-
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]
-
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]
-
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]
-
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.
-
Euh ce ne sont plus des fichiers mns ce sont des fichiers cui, maintenant...
-
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.
-
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]
-
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...
