-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
209
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
Salut, Pour la fonction POLAR, l'argument angle est exprimé en radians, à partir de l'axe des X du SCU courant, dans le sens trigonométrique. Pour la fonction COMMAND les angles sont exprimés en unités courantes, et tiennent compte des paramètres courants ANGDIR et ANGBASE. Donc si rot est un angle en unités courantes (le grade pour toi) pour le traduire en radians dans le sens trigonométrique, à partir de l'axe des X du SCU : (setq rot_rd (* (/ rot 200.0) pi)) ; traduction des grades en radians (if (= 1 (getvar "ANGDIR")) ; inversion si sens horaire (setq rot_rd (- rot_rd)) ) (setq rot_rd (+ (getvar "ANGBASE") rot_rd)) ; prise en compte de ANGBASE (command "_.line" "_non" pins "_non" (polar pins rot_rd 5) "") PS : la rotation d'un texte est exprimée à partir de l'axe X du SCU courant quelque soit la valeur de ANGBASE, donc pour que la ligne soit parallèle au texte, il ne faut pas faire la dernière conversion (prise en compte de ANGBASE). [Edité le 25/10/2006 par (gile)]
-
Si tu utilises la saisie dynamique (DYNMODE à 1) et que la variable DYNPICOORDS est à 0 les coordonnées sont exprimées en coordonnées relatives. Soit tu désactives la saisie dynamique, soit, si tu préfères travailler avec les coordonnées absolues, tu mets DYNPICOORDS à 1 ou tu tapes #0,0 pour forcer les coordonnées absolues.
-
Salut, Non, il suffit, avec le bloc-note, de créer un ALIAS à la fin du fichier acad.pgp (C:\Program Files\AutoCAD 2002\Support\acad.pgp) La syntaxe est facile : ALIAS, *COMMANDE par exemple (alias déjà définis) : A, *ARC L, *LIGNE Attention, si tu utilises des alias déjà existants ces derniers seront "écrasés". Pour recharger le fichier modifié, tape REINIT à la ligne de commande puis de cocher "Fichier PGP" dans la boite de dialogue. [Edité le 25/10/2006 par (gile)]
-
cour de lisp ! (pas a pas avec exemple !)
(gile) a répondu à un(e) sujet de kenny31 dans CADxp, vos souhaits
Tu peux trouver la plupart des fonction AutiLISP décrites en Français ici, conserve précieusement ce lien. -
cour de lisp ! (pas a pas avec exemple !)
(gile) a répondu à un(e) sujet de kenny31 dans CADxp, vos souhaits
Salut, Il y a certainement plusieurs lispeurs sur CADxp qui seront prets à t'aider. Le plus concret serait que tu détermine quelque chose de pas trop compliqué que tu voudrais automatiser. Tu postes ta demande dans le forum "Débuter en LISP", et tu auras de l'aide. Tu peux d'ailleurs parcourrir ce forum qui est plein de conseils et de renseignements. -
C'est un oubli de ma part, pour les version antérieures à 2004 (je crois), il faut ajouter : (vl-load-com) au début du LISP, avant ou juste apès la ligne (defun c:pline_block (/ AcDoc Space bloc nom ent aire long ins) EDIT : Je dis une bétise, le LISP ne peut fonctionner qu'avec une version 2006 ou 2007 (blocs dynamiques). À ma connaisance le chargement des fonctions ActiveX avec (vl-load-com) n'est plus nécessaire avec ces versions. [Edité le 25/10/2006 par (gile)]
-
Salut, Tu peux voir ce message où est expliquée la syntaxe des différentes options d'un champ "Longueur".
-
Salut, Ces fenêtres sont peut-être suer un calque "gelé dans la fenêtre courante".
-
Salut, Le LISP cherche un bloc nommé "Pline_block" dans la collection du dessin courant, s'il ne le trouve pas il cherche un fichier "Pline_block.dwg" dans le chemin de recherche, et s'il ne le trouve pas non plus, retourne le mesage que tu as eu. Tu dois donc créer un bloc nommé "pline_block" dans le dessin, ou l'enregistrer sous "Pline_block.dwg" avec la commande WBLOC. Ce bloc doit contenir 3 attributs, dans l'ordre : le nom de la pièce, son périmètre et son aire. Je pense qu'il est préférable de mettre les unités sous forme de textes ou d'attributs constants pour n'avoir que des nombres lors d'une éventuelle extraction. Si tu veux que les unités soient des suffixes des attributs, tu peux voir ce sujet
-
J'ai peut-être mal compris la demande. La syntaxe pour un champ "Longueur" avec options : (strcat "%(itoa id) ">%).Length \\f \"%lu2%pr2%ps[Périmètre : , m]%ct8[0.01]\">%" ) Les options pour les champs sont entre les guillemets précédés de \\f : \\f \"%lu2%pr2%ps[Périmètre : , m]%ct8[0.01]\" %lu2 : type d'unités de longueur (2 pour type décimal, comme pour LUNITS) %pr2 : nombre de décimales (ici 2, comme LUPERC) %ps[Périmètre : , m] : préfixe et suffixe (si seulement suffixe : [, m]) %ct8[0.01] : facteur de conversion (ici 0.01 pour cm -> m) [Edité le 9/11/2006 par (gile)]
-
Salut, Il me semble qu'un attribut est toujours du type chaine de caractère (STR). Pour savoir si la chaine ne contient qu'un nombre il faut la "lire" : (if (numberp (read NumPlan)) (princ "\n...Ok c'est un chiffre") (princ "\n...Nok c'est du texte") )
-
Salut, Deux petits LISP, un pour les préfixes l'autre pour les suffixes. (defun c:change_pref (/ old new name) (vl-load-com) (if (and (setq old (getstring "\nEntrez le préfixe à changer: ")) (setq new (getstring "\nEntrez le nouveau préfixe: ")) ) (vlax-for b (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq name (vla-get-Name b)) (if (wcmatch name (strcat old "*")) (vla-put-Name b (vl-string-subst new old name)) ) ) ) (princ) ) (defun c:change_suff (/ old new name) (vl-load-com) (if (and (setq old (getstring "\nEntrez le suffixe à changer: ")) (setq new (getstring "\nEntrez le nouveau suffixe: ")) ) (vlax-for b (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq name (vla-get-Name b)) (if (wcmatch name (strcat "*" old)) (vla-put-Name b (vl-string-subst new old name (- (strlen name) (strlen old)) ) ) ) ) ) (princ) ) En l'état la casse est respectée pour choisir les blocs qui seront renommés (si le préfixe entré est Vanne, vanne ne sera pas retenu).
-
Salut, Le premier LISP du message fonctionne avec un bloc ayant 3 attributs : le nom de la pièce, le périmètre et l'aire.
-
Salut, Voici une version avec possibilité de spécifier un angle de rotation (0.00 si ENTER, espace ou clic droit) : ;;; Pline_bloc -Gilles Chanteau- 04/09/06 ;;; Insère le bloc "pline_block" après sélection d'une polyligne ;;; Attribut 1 : Nom de la pièce ;;; Attribut 2 : Longueur de la polyligne ;;; Attribut 3 : Aire de la polyligne (defun c:pline_block (/ AcDoc Space bloc nom ent aire long ins) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((tblsearch "BLOCK" (setq bloc "Pline_block"))) ((findfile (setq bloc "Pline_block.dwg"))) (T (setq bloc nil)) ) (if bloc (progn (while (not (setq ent (car (entsel))))) (if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE") (progn (setq obj (vlax-ename->vla-object ent) id (vla-get-ObjectID obj) long (strcat "% (itoa id) ">%).Length>%" ) aire (strcat "% (itoa id) ">%).Area \\f \"%lu6%qf1\">%" ) ) (initget 1) (setq nom (getstring T "\nNom de la pièce: ")) (initget 1) (setq ins (getpoint "\nPoint d'insertion: ")) (if (not (setq ang (getorient ins "\nSpécifiez l'angle de rotation : " ) ) ) (setq ang (getvar "ANGBASE")) ) (setq ref (vla-InsertBlock Space (vlax-3d-point (trans ins 1 0)) bloc 1.0 1.0 1.0 ang ) ) (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list nom long aire) ) (vla-regen AcDoc acActiveViewport) ) (alert "L'objet sélectionné n'est pas une polyligne.") ) ) (alert "Le bloc \"Pline_block\" est introuvable.") ) (princ) )
-
Re, Voici une nouvelle version, avec le point de départ en N°1 et le point de fin des polylignes ouvertes en N°n+1 pour n divisions. (defun c:incdiv (/ ent obj long dist nb n AcDoc Space ins txt txtlst) (vl-load-com) (while (not (setq ent (car (entsel "\nSélectionnez l'objet à diviser: "))) ) ) (setq obj (vlax-ename->vla-object ent)) (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getEndParam (list obj)) ) (prompt "\nL'objet ne peut pas être divisé.*Incorrect*") (progn (initget 7) (setq nb (getint "\nEntrez le nombre de segments: ") long (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) dist (/ long nb) n -1 AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-StartUndoMark AcDoc) (repeat (if (= (vla-get-closed obj) :vlax-true) nb (1+ nb) ) (setq ins (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n)))) ) (vla-addPoint Space (vlax-3d-point ins)) (setq txt (vla-addText space (itoa (1+ n)) (vlax-3d-point (polar ins (/ pi 4) (* (getvar "TEXTSIZE") (getvar "DIMSCALE") 0.2) ) ) (* (getvar "TEXTSIZE") (getvar "DIMSCALE")) ) ) (setq txtlst (cons txt txtlst)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;; ;;; Aligne le texte sur la polyligne (vla-Rotate txt (vlax-3d-point ins) (angle '(0 0 0) (vlax-curve-getFirstDeriv obj (vlax-curve-getParamAtPoint obj ins) ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ) (initget "Oui Non") (if (= "Oui" (getkword "\nInverser le sens ? : ")) (foreach tx txtlst (vla-put-TextString tx (if (= (vla-get-closed obj) :vlax-true) (itoa (1+ (rem (- nb (atoi (vla-get-TextString tx)) -1) nb)) ) (itoa (- nb (atoi (vla-get-TextString tx)) -2)) ) ) ) ) (if (and (= (vla-get-closed obj) :vlax-true) (setq dep (car (entsel "\nSélectionnez un chiffre pour le nouveau de départ (ou ENTER): " ) ) ) (member (setq txt (vlax-ename->vla-object dep)) txtlst) ) (progn (setq dif (- nb (atoi (vla-get-TextString txt)))) (foreach tx txtlst (vla-put-TextString tx (itoa (1+ (rem (+ dif (atoi (vla-get-TextString tx))) nb)) ) ) ) ) ) (vla-EndUndoMark AcDoc) ) ) (princ) )
-
salut, l'invite : "spécifiez un chiffre pour le nouveau départ" est mal formulée, j'aurais dû écrire : "Sélectionnez un chiffre pour le nouveau départ". Il faut sélectionner à l'écran le chiffre qui deviendra le nouveau N° 0. Je pourrais mettre le départ à 1, mais celà suppose de traiter différemmment les polylignes ouvertes et fermées. J'essaye de voir ça (si j'ai le temps).
-
[Résolu] Problème ouverture/enregistrement de fichier
(gile) a répondu à un(e) sujet de Joe12 dans AutoCAD 2006
Salut et bienvenue, Ce doit être la variable système FILEDIA qui est pasée à 0, il faut la remettre à 1. Tu trouveras ici un excellent document fait par Rebcao qui traite de tous ces types de problèmes. -
Salut, Un petit bout de code pour faire une liste de tous les types de ligne du fichier acadiso.lin. (setq f (open (findfile "acadiso.lin") "r")) (while (setq l (read-line f)) (if (= (substr l 1 1) "*") (setq lst (cons (substr l 2 (1- (vl-string-position 44 l))) lst)) ) ) tu peux ensuite évaluer si le nom du style que tu crées est déjà présent dans la liste avec la fonction MEMBER.
-
Peux tu préciser, ta demande ? Le point de départ (ou de fin si la poly est fermée) est effectivement le point 0 (normal, non ?).
-
mise à l\'échelle des cotes et textes
(gile) a répondu à un(e) sujet de Bellière-Manière dans AutoCAD LT 2007
Il s'agit de cotation dans l'espace papier : en restant dans l'espace papier on peut utiliser les accochages aux objets sur des objets de l'espace objet d'où transspatial. -
Salut, Tu charges le LISP : Outils > AutoLISP > Charger une application. Tu tapes join3dpoly à la ligne commande. Tu suis les instructions sur la ligne commande. La poly 3d aura les propriétés (calque, couleur, type de ligne ...) du premier objet sélectionné (ligne, polyligne ...), tous les objets sélectionnés ensuite seront joints s'il sont jointifs.
-
C'est pas angtos, c'est tes réglages de géomètre qui te fourvoient. La fonction LISP angle ne tient pas compte des variables ANGBASE et ANGDIR, par contre angtos en tient compte. Avec tes réglages : (setq p1 '(0 0) p2 '(1 0) p3 '(0 1)) (angle p1 p2) -> 0.0 (angle p1 p3) -> 1.5708 (angtos (angle p1 p2)) -> "100.00g" (angtos (angle p1 p3)) -> "0.00g" Dans le même esprit getangle tient compte des variable ANGBASE et ANGDIR, getorient n'en tient pas compte.
-
Tes lignes ne sont pas coplanaires, tu ne peux pas les joindre en une polyligne, une polyligne est un objet 2D. De toutes façons, tu ne peux extruder un objet que suivant un chemin plan (ligne, arc, polyligne, spline plane) ou une polyligne 3D. si tu veux joindre tes lignes en une polyligne 3D, tu peux utiliser le LISP Join3dPoly Télécharger Join3dPoly
-
Salut, Tes lignes sont elles bien jointives, coplanaires ? Quel message as-tu sur la ligne de commande ? (tu peux faire F2 pour lire les messages passés)
-
Sélection de texte pour modification
(gile) a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Exact, et on n'utilisera les variables globales avec parcimonie, par exmple pour conserver une valeur par défaut entre deux lancement d'une routine. Une convention veut que les variables globales aient des nom du type : *NomDeLaVariable* entre deux astérisques. Je te renvois à ce message
