bseb67
Membres-
Compteur de contenus
833 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bseb67
-
Re, 1 oui, et tu peux même faire une matrice difforme: 0 1 2 0 2 6 7 9 5 4 3 5 5 Le lisp ne connait que les variables simples (entier, réel, chaine de caractères) et les listes (composées de sous-listes... et de ces éléments). 2 le nom c'est celui que tu veux, c'est simplement le nom de la variable: (setq ma_matrice '((0 1 2)(0 2 6 7 9) (5 4) (3 5 5))) ma_matrice contiendra l'exemple du 1. 3 pour ca, je te renvoie sur la fonction de traitement d'une ligne, si tu sais que ton fichier est fait ligne par ligne, que chaque élément est séparé par une tabulation (ou autre caractère spécifique) et que la ligne contient X éléments dont X0= quelque chose, X1= autre chose et ainsi de suite, il te faut récupérer ce que tu veux utiliser; qu'importe si la ligne contient plus d'infos Pour le pilotage de ms-dos, je crois que c'est possible, mais là fait une recherche, je pense que patrick35 ou Gile ont peut-être touché le sujet.
-
Re, ;-------------------------------------; ; nom: StringToList ; ; role: renvoie sous forme de liste ; ; les entiers ou réels contenus ; ; dans la chaine de caractères ; ; str séparés avec sep ; ; param: str => string ; ; sep => séparateur ; ; retour: une liste d'entiers ou réels; ; date: 09/06/2009 ; ; BLAES Sébastien ; ;-------------------------------------; (defun StringToList( str sep / res tmp pos_sep) (setq res '() tmp str) (cond ; condition d'arrêt ((/= (type str) 'STR) ) ; on cherche s'il y a encore le séparateur dans la chaine ((= (setq pos_sep (vl-string-search sep str)) nil) ; il ne reste plus qu'un seul élément (setq res (list (read str))) ) ; s'il y a encore un séparateur on garde le premier élément ; et on relance sur la suite (t (setq res (cons (read (substr str 1 pos_sep)) (StringToList (substr str (+ (max 2 (strlen sep)) pos_sep)) sep))) ) ) ; cond res ) ; StringToList ex: (StringToList "1 2.15 35 7" " ") => (1 2.15 35 7) comme le premier élément de la liste c'est le numéro, on prendra le (cdr ...) (setq du_res (cdr (StringToList "1 2.15 35 7" " "))) => (2.15 35 7) => X=2.15 Y=35 et Z=7 En regardant ton exemple, tu n'utilises pas le z, et en faisant (car du_res) tu obtiens donc le X1 et (cadr du_res) tu obtiens le Y. Et si j'ai bien compris ta suite: ;--------------------------------------; ; nom: traitement_ligne ; ; role: décode la ligne est renvoie ; ; une liste contenant deux listes; ; param: str => string ; ; retour: une liste de listes ; ; date: 09/06/2009 ; ; BLAES Sébastien ; ;--------------------------------------; (defun traitement_ligne( str / res) (setq res '()) (cond ((= (setq du_res (cdr (StringToList str " "))) nil) ) (t (setq le_X (car du_res) le_Y (cadr du_res) res (cons (list le_X le_Y 1 0) (list (list le_Y (- le_X) 0 1)))) ) ) ; cond res ) ; traitement_ligne
-
Salut, voici un exemple rapide, la fonction traitement_ligne par contre devra être celle qui décode ta ligne en fonction de comment tu sépares les X des Y ;| une matrice peut être vue comme une liste contenant des listes ex: ((1 2 3 4 5 8) (4 5 0 3 4 8) (1 2 6 7 9 5)) |; (defun load_matrice_in_file( mon_fichier / res desc buffer) (setq res nil) (cond ((/= (type mon_fichier) 'STR) (princ "\nLe paramètre mon_fichier n'est pas une chaine") ) ; on tente d'ouvrir le fichier ((= (setq desc (open mon_fichier "r")) nil) (princ (strcat "\nErreur d'ouverture de " mon_fichier)) ) (t ; on boucle sur le fichier pour lire ligne par ligne (while (/= (setq buffer (read-line desc)) nil) ; on décompose les données lues et on les rajoutent (setq res (append res (traitement_ligne buffer))) ) ; while (close desc) (setq desc nil) ) ; progn ) ; cond res ) ; load_matrice_in_file ensuite tu pourra utiliser des (nth ... (nth ...)) pour accéder à un élément, mais au cas ou tu ne le sais pas, les indices vont de 0 à N-1 Voilà, à toi de le mettre à ta sauce [Edité le 9/6/2009 par bseb67]
-
Salut chris_mtp, Pour ouvrir et lire des données dans un fichier texte, ce n'est pas compliqué en soit, il faut juste que le fichier à lire soit bien écrit càd formatter de la même façon quelque soit les lignes. Il suffit de faire un open, puis un read-line et traiter la ligne lue. Pense à faire le close à la fin pour libérer le fichier.
-
c'est possible.... Si tu enregistre en 2010, tu ne pourra ouvrir sous une version antérieure, ca c'est normal. Par contre, si tu créés des objets spécifiques à 2010, tu ne les verra pas dans 2009 et inférieur. A l'écran il n'y aura rien, mais en lisp tu peux attraper ces objets, mais ils seront considérés comme "zombies". Et avec ma faible expérience (par rapport à d'autres ici), je déconseille le format 2000, tu risques de perdre plein de choses que la version 2000 ne gère pas. C'est vrai que pour certains clients, on doit leur fournir des fichiers au format 2000, mais on travaille sur du 2007 puis c'est lors de l'envoi que l'on change la version en fonction du client.
-
Salut, juste pour être sur, le fichier que tu ouvres sous 2009 tu ne l'as pas sauvegardé au format 2010? Si oui, c'est normal,
-
Zoom étendu auto dans Fenetre présentation [résolu]
bseb67 a répondu à un(e) sujet de Chr1s dans AutoCAD LT 2009
Je crois que c'est UCSFOLLOW à mettre à 0 à faire dans la fenêtre en EP -
Sans oublier de ne pas faire de migration de paramètres si il te le propose
-
Salut, voici mon premier jet: ; VARIABLES GLOBALES (setq VAR_PROFIL_E1 1 VAR_PROFIL_E2 1 VAR_PROFIL_H 1 ) ; setq ;----------------------------------------; ; nom: dessine_profil ; ; role: dessine un profil avec pour point; ; de base p_ins, d'épaisseur1 e1, ; ; d'épaisseur2 e2 et de hauteur h ; ; param: p_ins => point3D ; ; e1 => entier ou réel ; ; e2 => entier ou réel ; ; h => entier ou réel ; ; retour: t si tout c'est bien passé ; ; nil sinon ; ; date: 21/05/2009 ; ; BLAES Sébastien ; ;----------------------------------------; (defun dessine_profil( p_ins e1 e2 h / res) (setq res nil) (cond ; on teste les paramètres ((/= (type p_ins) 'LIST) ) ((/= (length p_ins) 3) ) ((= (member (type e1) '(INT REAL)) nil) ) ((= (member (type e2) '(INT REAL)) nil) ) ((= (member (type h) '(INT REAL)) nil) ) (t ; on va calculer les 7 différents points de ce profil (setq ; p_ins correspond au coin bas gauche du profil p1 p_ins ; il faut ajouter en X e2+25+50 à p1 pour obtenir p2 p2 (mapcar '+ p1 (list (+ e2 25.0 50.0) 0.0 0.0)) ; il faut ajouter en Y e1 à p2 pour obtenir p3 p3 (mapcar '+ p2 (list 0.0 e1 0.0)) ; il faut soustraire en X 50 à p3 pour obtenir p4 p4 (mapcar '- p3 (list 50.0 0.0 0.0)) ; il faut soustraitre en X 25 et ajouter 25 en Y à p4 pour obtenir p5 p5 (mapcar '+ p4 (list -25.0 25.0 0.0)) ; il faut ajouter en Y h à p5 pour obtenir p6 p6 (mapcar '+ p5 (list 0.0 h 0.0)) ; il faut soustraire en X e2 à p6 pour obtenir p7 p7 (mapcar '- p6 (list e2 0.0 0.0)) lastent (entlast) ) ; setq ; on créer le profil (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 7) ; nombre de sommets '(70 . 1) ; 1 = polyligne fermée ou 0 = polyligne ouverte '(38 . 0.0) ; élévation (cons 10 (trans p1 1 0)) ; trans pour passer les coordonnées dans le scu en-cours (cons 10 (trans p2 1 0)) (cons 10 (trans p3 1 0)) (cons 10 (trans p4 1 0)) (cons 10 (trans p5 1 0)) (cons 10 (trans p6 1 0)) (cons 10 (trans p7 1 0)) (cons 210 (trans '(0 0 1) 1 0 T)) ) ) ; entmake ; on vérifie si la création a réussie (setq res (not (equal lastent (entlast)))) ) ) ; cond res ) ; dessine_profil ;----------------------------------------; ; nom: c:111 ; ; role: commande bouclante permettant de ; ; dessiner des profils en demandant; ; les paramètres nécessaires ; ; pour quitter => faire échap ; ; param: aucun ; ; retour: t si tout c'est bien passé ; ; nil sinon ; ; date: 21/05/2009 ; ; BLAES Sébastien ; ;----------------------------------------; (defun c:111() ; on charge les fonctions vl au cas où (vl-load-com) (cond ; on demande le point d'insertion du profil ((= (vl-catch-all-error-p (setq p_ins (vl-catch-all-apply 'getpoint (list "\nPoint d'insertion du profil?" )))) t) ; annulation ) ; on teste p_ins ((/= (type p_ins) 'LIST) ; on relance (c:111) ) ((/= (length p_ins) 3) ; on relance (c:111) ) (t (cond ; on demande la saisie d'e1 ((= (vl-catch-all-error-p (setq e1 (vl-catch-all-apply 'getreal (list (strcat "\nEpaisseur1 <" (rtos VAR_PROFIL_E1 2) "> ?") )))) t) ; annulation ) (t (if (/= e1 nil) (setq VAR_PROFIL_E1 e1) ) ; if (cond ; on demande la saisie d'e2 ((= (vl-catch-all-error-p (setq e2 (vl-catch-all-apply 'getreal (list (strcat "\nEpaisseur2 <" (rtos VAR_PROFIL_E2 2) "> ?") )))) t) ; annulation ) (t (if (/= e2 nil) (setq VAR_PROFIL_E2 e2) ) ; if (cond ; on demande la saisie d'h ((= (vl-catch-all-error-p (setq h (vl-catch-all-apply 'getreal (list (strcat "\nHauteur <" (rtos VAR_PROFIL_H 2) "> ?") )))) t) ; annulation ) (t (if (/= h nil) (setq VAR_PROFIL_H h) ) ; if (if (= (dessine_profil p_ins VAR_PROFIL_E1 VAR_PROFIL_E2 VAR_PROFIL_H) t) (progn ; on relance (c:111) ) ; progn ) ; if ) ) ; cond ) ) ; cond ) ) ; cond ) ) ; cond ) ; c:111 copie-colle le lisp dans un fichier .lsp, charge-le, et puis il suffit d'entrer 111 pour appeler la commande. La commande boucle, il faut saisir le point d'insertion qui est le coin bas gauche de ton profil, puis les épaisseurs et la hauteur. Ensuite, redonner le point d'insertion. pour les épaisseurs et la hauteur, si tu fais entrée, il prendra la dernière valeur saisie (ce qui entre <>). Par contre si tu recharges le lisp, ces valeurs seront de nouveau 1 1 1. Voilà, j'espère que c'est bon. bon week-end :)
-
Salut rvpas! Tout d'abord c'est lispeuses ou lispeurs ;) le "t" il faut le mettre dans stagiaire. Je ne suis pas sur d'avoir tout compris, mais en lisp (en fait en vlisp) tu peux changer l'objet pointé par un champ en recréant la formule. J'ai déjà fait sur des blocs cotations associés à un autre bloc. J'avais mis pas mal de temps à capter, qu'il faut tout simplement créer la formule du champ et l'écrire dans l'attribut, autocad gère tout seul la création du champ et sa suite. exemple: "(%<\\AcObjProp.16.2 Object(%<\\_ObjId " (itoa (vlax-get cotation 'ObjectID))">%).Parameter(43).UpdatedDistance \\f \"%lu2%pr2\">% )" La formule est juste une chaine caractères. cotation est une entité transformée en objet vl (vlax-ename->vla-object), j'appelle le paramètre de code 43 qui est pour mon cas une distance dynamique dans le bloc que je veux en décimal et une précision de 2 chiffres après virgule. Le plus simple, c'est de créer manuellement ton champ et regarde la formule dans ta boite de dialogue. a+
-
Salut kalaat! Alors oui, c'est possible comme c'est simplement de la géométrie. Il faut juste savoir si tu veux une suite de lignes ou plutôt une polyligne? Je n'ai pas le temps maintenant, demain peut-être... sauf si quelqu'un d'autre te le fait entre-temps. a+
-
Salut, Patch installé sur les poste ayant A2009, mais quand on lit les bugs corrigés par la SP3 ca fait peur, il suffit de chercher crash dans update 3 : 40 fois :o
-
Salut! Si tu as une full: (command "-MODIFLISTECHELLE" "r" "o" "q")
-
Salut mikl63! utilise WW (weight watchers), euh ... je rigole :cool: Je comprend largement ton problème et nous sommes beaucoup ici à avoir des cochonneries pareil. Mais à la base on est déjà "chiant" lors de la réception des plans, ont demande un minimum d'organisation et règles, et un maximum pour le poids. Mais on a déjà reçu des plans où les sois-disant hachures n'étaient en fait que des lignes :mad: En fait tout les fichier ne comportait que des lignes. Après il y a aussi les erreurs de conversion d'un autre logiciel qu'autocad en dwg. Certains plans archi contiennent des blocs de blocs .... avec un bloc vide à la fin :mad: . Et les contrôles de te dit: X erreurs X corrigées :) et bien tu relances autant de fois que tu veux le controle, toujours X erreurs X corrigées. Bonne chance
-
Salut à tous, En fait ce n'est pas une demande d'aide ;) , mais une constatation: J'ai un petit lisp qui fait des appels à vla-put-TabOrder. Cette fonction permet de donner l'ordre des présentations dans autocad, la "présentation" correspondant à l'espace objet sera toujours en position 0, puis les vrais présentations iront donc de 1 à 255 (valeur max). Après plusieurs mesures avec un nombre différents de présentations et sur différentes versions d'autocad (avec les mêmes fichiers et postes identiques), voici mes résultats (temps par appel à vla-put-taborder): 1) avec 50 présentations: - autocad 2008 => 0.14s - autocad 2009 => 0.07s - autocad 2010 => 0.10s - autocad 2007 => 0.00s (en fait ca met 0.02s pour 50 appels) 2) avec 70 présentations: - autocad 2008 => 0.17s - autocad 2009 => 0.08s - autocad 2010 => 0.12s - autocad 2007 => 0.01s 3) avec 255 présentations: - autocad 2008 => 1.35s - autocad 2009 => 0.66s - autocad 2010 => 0.95s - autocad 2007 => 0.01s Au vu des temps, 2007 est la plus rapide, suivie de loin par la 2009, puis 2010 et enfin 2008 Vive la 2007 :)
-
GROS BUG ou petit bug !!!! à vous de juger !!!!
bseb67 a répondu à un(e) sujet de rebcao dans AutoCAD LT 2010
Hors sujet: Oh non rebcao, t'as oser mettre un lien sur cette merde :o fin hors sujet. -
J'ai laissé tombé pour mes lisps. J'ai refait mes blocs dynamiques et y mettant des paramètres de consultations. Ainsi l'utilisateur n'a accès qu'aux dimensions autorisées et les hachures suivent correctement sur la 2007 et 2008. De plus, je n'aurai pas droit au : "le lisp a planté" Seul point négatif: la saisie des valeurs pour les tableaux de consultation. merci encore patrick pour ton temps, si tu passes en alsace, préviens à temps ;)
-
salut lili2006, A mon avis ton fichier doit être naze, car plusieurs fois des collègues m'ont demandé d'ouvrir un plan qu'ils n'arrivaient pas à ouvrir. Et bien chez moi aussi cela ne marchait pas, et pour cause, un fichier qui sois disant doit contenir une partie d'une bâtiment + fond de plan archi qui fait déjà 3Mo ne peut pas faire 1.25Mo. L'envoi avait foiré, donc fichier incomplet. Au pire, c'est peut-être carrément le DD qui out sur quelques secteurs et ton fichier est donc corrompu. Edit: désolé de venir tard dans le post [Edité le 23/4/2009 par bseb67]
-
33 paramètres de visibilité :o Ca fait un joli paquet, je vais tenter sur mes blocs dynamiques, mais moi je n'ai que 5-6 en visibilité et quelques un en consultation. .... ben après quelques essais, je n'ai pas de grosses sacades, mais le curseur est ralenti lorsque je passe sur un de mes blocs dynamiques. Mes relevés sur 2008 (avec les mêmes blocs dans dessin vierge): - mouvement souris sur espace vide => 10% CPU - mouvement souris espace vide, bloc dyn, espace vide => 12%CPU Le mini-pic vient surtout du fait qu'autocad surbrille le bloc (+20%) Mais sur 2010: - mouvement souris sur espace vide => 19% CPU - mouvement souris espace vide, bloc dyn, espace vide => 29%CPU Là, ce n'est plus un mini-pic, mais bon pic :o (+52%)
-
Salut, Si j'ai bien compris, tu as des boutons qui font un load d'un lisp sur le réseau et lance ensuite une commande? ou les lisps sont déjà chargés et tu tapes simplement la commande? Chez nous aussi on a des problèmes de lenteur, mais cela ce ressent autant sur l'ouverture, sauvegarde et fermeture des fichiers que sur le chargement des lisps. Mais sous 2009, j'ai fait pas mal de benchmark, au mieux mes temps d'exécution n'augmentait que de 2% au pire 15% par rapport à 2008 (même fichier ouvert et même lisp bien-sur) Mes premières barre d'outils contenaient des boutons avec un load + appel de commande, maintenant je fait un bouton qui charge le(s) lisp(s) puis un pour chaque commande disponible avec simplement comme appel le nom de la commande.
-
Bienvenu stephd :) C'est vrai qu'il n'y a pas de forum de présentation sur cadxp. Chose à peut-être développer, mais alors plus besoin d'edvige et autres fiches, puisque l'on devient assez bête pour tout divulguer. Modéliste de camion :D , je trouve ca chouette, mais je n'ai ni la patience, ni le tact pour faire quelque chose de bien. M'en vais faire un petit tour sur ta page ;) a+
-
Re, J'ai essayé sur ma 2010: et bien ca marche aussi. Dans mon lisp je lance ma dcl pour choisir les dimensions, puis je la ferme et lance une fonction pour la mise à jour des paramètres. Et donc là, ca ne marche pas. Mais si je relance juste la fonction de mise à jour des paramètres directement dans la console (avec les mêmes valeurs), et bien là ca marche. alors je me suis, bon, on fait un simple repeat 2 dans le lisp. Et bien non :mad: marche pas non plus. je pensais que cela venait de la dcl, mais je ne crois pas; car avec ceci: (defun c:ttt() (setq bl (vlax-ename->vla-object (car (entsel))) pr (vlax-invoke bl 'getdynamicblockproperties) la (nth 0 pr) ht (nth 2 pr) ) (vlax-put la 'value 600.0) (vlax-put ht 'value 600.0) ) si je lance 2 fois ttt => l'affichage est correct. Mais avec ceci: (defun tttt( bl) (setq pr (vlax-invoke bl 'getdynamicblockproperties) la (nth 0 pr) ht (nth 2 pr) ) (vlax-put la 'value 600.0) (vlax-put ht 'value 600.0) ) (defun c:pop() (setq bl (vlax-ename->vla-object (car (entsel)))) (tttt bl) (tttt bl) ) en lancant pop => ca ne marche pas Bon, je vais chercher s'il y a une variable pour ca.
-
Salut patrick :) Ce matin en ouvrant ce post, je me dit chouette on va essayer. Et bien non, ca ne marche pas :( . Je viens de faire un essai est voilà ce que cela fait (c'est la même chose que pour mon lisp): http://bseb67.free.fr/cadxp/hachure/resize_bloc_hachure.PNG Un regen est aussi nécessaire
-
Pas encore de solution pour la 2009, mais pour la 2010, il y a un patch 4.17 sur le site de texacad qui règle le problème de reconnaissance des clés usb. Donc, on attendra le SP1 de la 2010 pour y passer et en attendant on restera sur 2008
-
Salut à tous! Là je coince sur un petit truc qui me gène. J'ai un bloc dynamique http://bseb67.free.fr/cadxp/hachure/VOLET-VF.dwg avec deux propriétés: hauteur et largeur. Si je modifie une des propriétés par le panneau des propriétés de l'objet, le bloc se met bien à jour : càd les hachures s'ajustent bien. Mais comme j'ai fait un lisp, car il y a des dimensions standard, je fait donc un vla-put-Value sur les propriétés. Mais les hachures ne suivent pas. Je suis obligé de faire un regenall, ce qui est très long Est-ce que l'on de vous à une idée pour ca? merci.
