Aller au contenu

zebulon_

Membres
  • Compteur de contenus

    1 489
  • Inscription

  • Dernière visite

  • Jours gagnés

    19

Tout ce qui a été posté par zebulon_

  1. Salut bseb67 Inspire toi de ce que j'ai écrit ici . Il va falloir faire un peu de vlisp en utilisant la fonction vla-getdynamicblockproperties, parce que en lisp tout court, tu ne vas pas y arriver. Attention, dans l'exemple que je donne, la valeur changée avec vla-put-value est un texte. Dans ce cas c'est simple. Si la valeur à changer est un numérique, il faut faire vlax-make-variant avant de faire un vla-put-value. Si la valeur à changer est une coordonnée, il faut faire un vlax-make-array, puis un vlax-make-variant avant le vla-put-value. Regarde l'aide de vlax-make-variant dans l'éditeur de visual lisp, c'est expliqué. Ci-dessous un petit lisp qui te donne la liste des paramètres d'un bloc dynamique et toutes leurs propriétés. (defun c:ListPropDynBloc (/ e dbp param) ;; sélectionner un objet (setq e (car (entsel))) ;; je ne vérifie pas si c'est un bloc dynamique, tu pourras te pencher sur le sujet ;; ;; transformer ename en objet (setq e (vlax-ename->vla-object e)) ;; ;; récupérer les propriétés du bloc dynamique dans une liste (setq dbp (vla-getdynamicblockproperties e)) (setq dbp (vlax-variant-value dbp)) (setq dbp (vlax-safearray->list dbp)) ;; ;; faire la liste de tous les paramètres du bloc dynamique et leurs propriétés (foreach param dbp (vlax-dump-object param) ) (princ) ) Amicalement. Zebulon_ PS : si le 67, c'est pour le Bas-Rhin, ne le crie pas sur les toits. Il y en a ici qui n'aiment pas les alsaciens.
  2. Tiens, on parle de moi ? Je tiens à préciser que ma petite tête n'est pas assez intelligente pour inventer une telle méthode. Je la dois à mon premier maitre lisp (martin, si tu te reconnais...) qui, lui aussi, la doit sans doute à quelqu'un... J'ai seulement tenté de répondre aux cas qui font échouer la méthode, en me basant sur une méthode faisant appel à la chance. (Gile) est plus mathématique dans sa démarche. Amicalement Zebulon_
  3. Bonjour, dans le lisp, la fonction qui donne la nouvelle commande est précédée par c: (c comme command). Ce n'est donc pas textsty dont il s'agit (ce n'est qu'un sous-programme de la fonction principale) mais de txtech. Amicalement Zebulon_
  4. ;;; créer un style de texte (defun textsty (StyTxName H) (if (not (tblsearch "STYLE" StyTxName)) (command "_style" StyTxName "arial.ttf" H "1.00" "0.00" "_N" "_N") (command "_textstyle" StyTxName) ) ) ;;; créer un calque (defun calque (NewLayer ColLayer TlLayer) (if (not (tblsearch "LTYPE" TlLayer)) (command "_LINETYPE" "_L" TlLayer "acadiso" "") ) (if (not (tblsearch "LAYER" NewLayer)) (command "_layer" "_M" NewLayer "_CO" ColLayer "" "_LT" TlLayer "" "") (command "_LAYER" "_T" NewLayer "_ON" NewLayer "_S" NewLayer "") ) ) ;;Fonction qui nécessite une entité fenêtre et un point (defun LinkedFmult (ent pt / *paper-space* obj objID ip width str CLAYER) ;;référence à l'espace papier (setq *paper-space* (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ;;convertir entité en objet (setq obj (vlax-ename->vla-object ent) ;;Récupérer l'ID de l'objet objID (vla-get-objectid obj) ;;convertir le point ip (vlax-3D-Point pt) ;;définir la largeur du texte à 0 width 0.0 ;;définir la chaîne du champ str (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos objID 2 0) ">%).CustomScale \\f \"1:%lu2%ct1%qf2816%ct9[1000]\">%" ) ) (setq CLAYER (getvar "CLAYER")) ;; créer un calque "TXT30-1000" de couleur 7 (calque "TXT30-1000" "7" "Continuous") ;; créer un style de texte de 3mm de haut (textsty "TXT30-1000" "3") ;;Créer le MTEXT qui contient le champ (vla-addMText *paper-space* ip width str) (setvar "CLAYER" CLAYER) ) (defun c:txtech (/ e a pointins) (vl-load-com) (if (/= (getvar "TILEMODE") 0) (alert "Uniquement en espace papier !!!") (progn (setq e (car (entsel))) (if e (progn (setq a (entget e)) (if (/= (cdr (assoc 0 a)) "VIEWPORT") (alert "Ce n'est pas une fenêtre !!!") (progn (setq POINTINS (getpoint "\nPoint d'insertion : ")) (if POINTINS (linkedfmult e POINTINS) ) ) ) ) ) ) ) (princ) ) Voilà, vite fait... Amicalement Zebulon_
  5. Bonjour, si, c'est un lisp. Il est un peu brut de décoffrage. Je vais un peu le fignoler et le déposer tout à l'heure. Amicalement Zebulon_
  6. zebulon_

    Bug boite fenêtre

    Salut Tramber, Je reviens sur le sujet pour te proposer une parade ? Amicalement Zebulon_
  7. pourrir_la_vie... Bien trouvé, comme nom de variable. J'imagine un bureau en open space avec trentaine de poste autocad où chacun y va de son "La commande machin commence" etc... En plus, tu passes pour un con si chacun entend "Commande inconnue"... Vaut mieux qu'autocad ne soit pas trop bavard. Amicalement Zebulon_
  8. Bonjour, Mon habitude est de mettre les titres et les échelles des fmults, sous forme de textes, directement dans l'espace papier. Mon but est de remplacer le simple texte dans lequel j'écris l'échelle par un champ, lié à la fenêtre fmult, et qui affiche l'échelle automatiquement. L'intérêt, c'est qu'on peut repérer une échelle "à la con" (genre 1:42.568 ème) du premier coup d'oeil. L'autre intérêt, c'est que l'échelle à côté du titre change si l'échelle de la fmult change. Donc j'ai lancé la commande champ dans la catégorie de champs, j'ai choisi : Objet dans le type d'objet, j'ai sélectionné : une fenêtre fmult dans le propriétés, j'ai pris : échelle personnalisée dans le format, j'ai pris : 1:# ce qui me donne cette merveilleuse formule magique : Alors si j'ai bien compris : le %lu2 pour le format décimal le %ct1 pour avoir l'inverse le %qf2816, plus mystérieux, mais ça doit être pour supprimer le zéro de droite Si je travaille en espace objet en mm et en espace papier en mm, c'est nickel puisque cela m'affiche par exemple 1:25 pour une échelle personnalisée de 0.040 Par contre, si je travaille en espace objet en m et en espace papier en mm, il me faut un facteur de multiplication, puisque le 1/25ème donne une échelle personnalisée de 1000/25, soit 40. Si je lui applique la formule ci dessus, cela m'affiche 1:0.025. C'est déjà pas mal, mais si je pouvais multiplier 0.025 par 1000, ça serait mieux. Après quelques recherches, il semble que le code %ct9[1000] donne satisfaction, mais il n'est pas accessible directement par la commande champ. J'ai adapté le lisp que j'ai trouvé ici pour en faire ceci : (vl-load-com) ;;référence à l'espace papier (setq *paper-space* (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ;;Fonction qui nécessite une entité fenêtre et un point (defun LinkedFmult (ent pt / obj objID ip width str) ;;convertir entité en objet (setq obj (vlax-ename->vla-object ent) ;;Récupérer l'ID de l'objet objID (vla-get-objectid obj) ;;convertir le point ip (vlax-3D-Point pt) ;;définir la largeur du texte à 0 width 0.0 ;;définir la chaîne du champ str (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos objID 2 0) ">%).CustomScale \\f \"1:%lu2%ct1%qf2816%ct9[1000]\">%" ) ) ;;Créer le MTEXT qui contient le champ (vla-addMText *paper-space* ip width str) ) ;; A = la fenêtre fmult et B = Point d'insertion du texte (setq a (car (entsel)) b (getpoint "\nPoint d'insertion : ")) ;;Appel de la fonction (linkedfmult a b) où j'ai rajouté le %ct9[1000] dans la formule et, du coup, ça m'affiche 1:25. Tous ceux qui, un jour, ont imprimé un plan soit disant au 1:50 et qui en réalité était au 1:45 ou au 1:55, avec lequel un métreur a fait sont chiffrage en se servant de son bon vieux kutch, seront sans doute intéressés par cette méthode ? Amicalement Zebulon_
  9. C'est vraiment très fort les réacteurs... Merci pour le coup de main. Amicalement Zebulon_
  10. Bonjour, j'avais fait ça entre temps. J'ai changé mon fusil d'épaule et, comme le suggérait (gile), j'ai regardé du côté des réacteurs de commande. Comme ce sont les commandes stretch et grip_stretch qui vont affecter la cote, je me suis dit qu'un réacteur de commande pouvait faire l'affaire. Cela donne quelque chose comme ça (vlr-command-reactor "Etirer Cotes" '((:vlr-commandEnded . EndStretchDimension))) (defun reacteur_modif_textecote (E) (if (vlax-property-available-p E "TextOverRide") (progn (setq OLDTEXT (vla-get-TextOverRide E)) (alert OLDTEXT) (setq MEASUREMENT (vla-get-measurement E)) (alert (rtos MEASUREMENT)) (vla-put-textOverRide E "ESSAI") ) ) ) (defun EndStretchDimension (calling-reactor endcommandInfo / thecommandend ss ename I) (setq thecommandend (nth 0 endcommandInfo)) (if (or (= thecommandend "STRETCH") (= thecommandend "GRIP_STRETCH")) (progn (if (not (setq SS (cadr (ssgetfirst)))) (setq ss (ssget "_P")) ) (setq I 0) (if ss (repeat (sslength ss) (setq ename (ssname ss I)) (if (= (x_trouvinfo "fac" ENAME "CADSYS") "COTEA") ;; quand j'ai créé la cote je lui ai mis un marqueur xdata pour la reconnaitre (Reacteur_modif_textecote (vlax-ename->vla-object ename)) ) (setq I (+ I 1)) ) ) ) ) ) ça à l'air de marcher. Maintenant, quand la cote est associative et qu'on modifie l'objet associé, la cote change aussi mais ce n'est pas elle qui est étirée. Donc, dans ce cas, ça ne marchera pas. Faut encore que je regarde ce que tu proposes (car (vlr-data obj)) à la place du (ssget "_P") que j'utilise faute de mieux. Amicalement Zebulon_
  11. Merci pour les précisions. cela me revoie un message d'erreur erreur: Erreur Automation Objet en cours de notification. Donc, il semblerait que le notifier-object n'est disponible qu'en lecture seule. Un vla-get fonctionne, mais un vla-put renvoie une erreur. Dans le principe, ça consiste à faire comment ? Amicalement Zebulon_ [Edité le 8/8/2007 par zebulon_]
  12. Salut Patrick_35, (defun mafonction_callback (notifier-object reactor-object parameter-list)..... donc, je peux faire un vla-put-textoverride sur notifier-object ? Je vais essayer cela. J'utilise les persistants parce que je pensais que c'est le plus simple. Ceux à qui je transmet le fichier, s'ils modifient les cotes, elles ne seront pas rééditées automatiquement, comme elle pourront l'être chez moi. Je pense que ça n'a pas d'autre conséquence ou alors comment faire sinon ? Autre question : avec une cote existante comment savoir : - si un réacteur lui est rattaché ? - comment faire si je souhaite l'en débarrasser ? Merci Amicalement Zebulon_
  13. "", ça devrait le faire. Juste un petit détail : comme la commande -eattext ne concerne que des blocs, autant les filtrer tout de suite avec la commande ssget, pour empêcher l'utilisateur (qu'est ce qu'il peut faire comme conneries celui là !!!) de saisir autre chose que des blocs. (setq listeobj (ssget '((0 . "INSERT")))) Amicalement Zebulon_ PS : très puissante la fonction ssget, elle permet différents modes d'utilisation, de filtrer le jeu de sélection, avec des tests relationnels (= < > /= etc...) ou des regroupements logiques (or and xor et not).
  14. Salut (gile), C'est ce qui me semble aussi. J'ai mis un simple (alert "coucou") dans la fonction callback et, comme la commande alert fige ce qui est affiché à l'écran, c'est toujours l'ancienne cote qui est affichée pendant l'exécution de la fonction callback et pas la cote modifiée. Pour le reste, va falloir que je me gratte la tête un peu... Merci Amicalement Zebulon_
  15. C'est louche :casstet: Mias ce que tu me décris ressemble beaucoup à la commande multiple où une commande est répétée jusqu'à ce que tu appuyes sur echap. Si ça peut te mettre sur la voie ? Amicalement Zebulon_
  16. Bonjour, je me suis fait un lisp qui crée une cote où je remplace le texte de cote par défaut (par exemple 5000) par nombre*pas (par exemple 25*200) en faisant un textoverride sur l'objet cote. Sauf que, comme c'est maintenant une cote éditée, elle reste toujours à 25*200 même si on étire l'objet cote. Je me suis dit qu'avec les réacteurs je devrais y arriver, mais comme je n'y connais pas grand chose... Donc, je me suis dit que le plus simple serait d'attacher un object-reactor à l'objet cote, en rendant ce réacteur persistant (setq DimReactor (vlr-object-reactor (list E) "Dimension Reactor" '((:vlr-modified . test)))) (vlr-pers DimReactor) Où E est mon objet cote créé juste avant par le lisp et test ma fonction callback. Je pensais modifier la cote dans la fonction callback en faisant un nouveau textoverride, mais j'ai lu ceci dans l'aide de VLISP : Si je comprend bien, ce que je veux faire, à savoir modifier le texte d'une cote qu'on vient de modifier en mettant un nouveau nombre*pas, ne marchera pas de cette manière. Quelle est la démarche qui peut aboutir ? Merci. Amicalement Zebulon_
  17. Bonjour, la commande _point place un point à la fois, donc je pense qu'il faut lancer autant de (command "_point" ...) qu'il y a de point à placer. à remplacer par (command "_point" point1) (command "_point" point2) (command "_point" point3) (command "_point" point4) ou bien, s'il y a beaucoup de points à traiter, on pourrait imaginer mettre tous ces point dans une liste (avec la fonction cons) au moment où tu les calcules. Après, on peut utiliser la fonction foreach pour dérouler toute la liste, par exemple : (foreach PT MALISTEPT (command "_point" PT) ) où MALISTEPT est une liste qui contient les valeurs de point1, point2, pointn. Amicalement Zebulon_
  18. Bonjour, la fonction ssget (qui crée un jeu de sélection) devrait faire ton bonheur. Fait une recherche du mot ssget dans l'aide de visual lisp et sur cadxp. Le sujet a été traité plusieurs fois. Regarde aussi les fonctions ssname, ssadd, ssdel, sslength et ssmemb. (ss c'est pour selection set, c'est à dire jeu de sélection) Amicalement Zebulon_ [Edité le 7/8/2007 par zebulon_]
  19. zebulon_

    encercle texte

    On est tous des paresseux et on essaye d'être des paresseux intelligents. Amicalement Zebulon_
  20. Ce que je dis plus haut est valable dans mon domaine spécifique. Le marché des ouvrages d'art est relativement restreint, comparé au marché du bâtiment en général, que je ne connais que très peu (mon assurance RC pro et décennale ne couvre pas les constructions de maisons individuelles... Chacun son métier). Mais, il y a pénurie de projeteurs formés aux techniques des ouvrages d'art, alors c'est la loi du marché qui s'impose en notre faveur. Et je ne vais pas m'en plaindre. L'important, pour être dessinateur indépendant, c'est justement de pouvoir l'être. Donc, bien connaître son métier, en ayant été 10 ou 15 ans salarié. Si, par exemple, on me demandait de faire un plan de câblage d'un tablier PSIDP, qu'on me parlait de POD, PRAD, PIPO, PICF, PSIDA, poutrelles enrobées... et que ce serait du chinois pour moi, je n'aurais pas beaucoup de clients. Faire d'abord son université, si on veut. En plus, cela permet de connaître des gens, susceptibles de te donner du boulot. Et comme mon créneau est étroit, tout le monde se connait. Amicalement Zebulon_
  21. Bonjour, Ouahh 120€ de l'heure, ça c'est bien payé. En bureau d'étude structure, un projeteur est facturé environ 55€HT/heure. Si tu veux te placer en tant qu'indépendant, il faut être un peu en dessous (entre 40 et 50€HT/heure). Mais la plupart du temps, on te demandera de t'engager sur un forfait avant de commencer à tracer le moindre trait. Donc, tu estimes un temps pour réaliser l'étude, tu prends un peu de marge (20%, c'est pas trop) et tu multiplie par ton taux horaire. Après, faut se débrouiller pour que ça colle. Au début, tu te planteras quelque fois, parce que tu auras toujours peur d'être trop cher. Part du principe que tu n'es jamais trop cher (de toute façon on te le dira, si c'est le cas et on ne te dira jamais que tu n'es pas assez cher). De toute façon, les projeteurs qui savent travailler seuls, ça ne court pas les rues, alors faut en profiter. Pour déterminer ton salaire, ça dépend du nombre d'heures que tu consacres à ton boulot (personne ne t'oblige à travailler 35 h...) Mettons que tu fais 8h / jour et 20 jours par mois sur 11 mois (pour compter les congés) 8x20x11x40€/h = 70400 €/HT pour l'année. Une fois que tu as payé toutes les charges il t'en reste en gros la moitié (pour faire simple), donc environ 35000€ de revenu (salaires ou dividendes). Divisé par 12, ça te fait 2900€. Si tu fais 10h par jour, que tu travailles les samedis et que tu parts de 50€HT/h, la progression sera linéaire. Le plus important est d'avoir un réseau de 3 ou 4 clients réguliers (anciens employeurs, anciens collègues etc...), de ne pas se planter dans les estimations de temps à passer (on apprend assez vite, il suffit de se planter 2 ou 3 fois...) et de demander un avenant à chaque modification du projet. Je suis dessinateur indépendant dans le domaine du génie-civil, plus particulièrement les ouvrages d'art. Par exemple, une étude d'exécution d'un ouvrage autoroutier (Plan d'implantation, coffrage+ferraillage tablier, coffrages+ferraillage des culées, des piles et des superstructures et éventuellement un plan de ferraillage de pieux et un plan de câblage du tablier) se négocie autour de 4000 à 5000€ pour le coffrage et autour de 4500 à 5500€ pour le ferraillage). En tout 8000€HT à 10500€HT, pour avoir un ordre de grandeur. Et le travail ne manque pas. Amicalement Zebulon_
  22. zebulon_

    encercle texte

    Le premier oui, mais pas le deuxième que j'ai posté. Je te le remets ci-dessous. (defun c:mytcircle (/ ss e I a lay lrect rect lastent) (setq ss (ssget '((-4 . "< OR") (0 . "TEXT") (0 . "ATTDEF") (0 . "MTEXT") (-4 . "OR>"))) ) ;; charger la fonction si elle ne l'est pas (if (not bns_tcircle) (load "acettxt.lsp")) (setq lastent (entlast)) (bns_tcircle SS "Variable" "Rectangles" nil 0.5) (setq lrect nil) (while (setq lastent (entnext lastent)) (setq lrect (cons lastent lrect)) ) (setq lrect (reverse lrect)) (setq I 0) (repeat (sslength ss) (setq e (ssname ss I)) (setq rect (nth I lrect)) (setq I (+ I 1)) (setq a (entget e)) (setq lay (cdr (assoc 8 a))) (command "_change" rect "" "_p" "_la" LAY "") ) (princ) ) Il faut toujours enlever l'espace, ça ne change pas. ;) Amicalement Zebulon_
  23. zebulon_

    Isoler ou pas ?

    Je ne récupère jamais rien (enfin, le moins possible) de l'extérieur pour l'intégrer directement dans mes fichiers. J'affiche ce que je reçois de l'extérieur (les fond de plan topo, projets routiers etc...) en xref, tels quels. S'ils sont faux ou moches, ce n'est pas ma faute... Et puis, je mets ces xrefs en couleur grisée, pour faire ressortir mon projet, et ça passe très bien. Et quand, rarement, je fais un copier/coller d'un autre fichier qui n'est pas de moi, je mets tout de suite les éléments récupérés sur des calques à moi, dont je maîtrise la couleur et le type de ligne. Pour ce qui est des normes handicapées, il n'y a pas que certains (pas tous heureusement) architectes qui ignorent la loi. Il y a aussi certains (beaucoup, mais pas tous) maîtres d'oeuvres publics qui nous pondent des projets de voirie plus que critiquables. Par exemple, j'ai travaillé sur un projet de passerelle piétonne à Cernay (uniquement la passerelle, les rampes d'accès faisait l'objet d'un marché séparé) et j'ai fais une passerelle conforme aux normes handicapées. Mais, quand j'ai vu les plans des rampes d'accès, cela m'a fait bondir, puisqu'on y trouve des rampes à 10%. Le comble, c'est qu'ils ont fait figurer des paliers de repos "handicapés" (c'est marqué sur le plan !!!) entre ces rampes à 10%. Je leur ai demandé comment ils pensaient que les personnes en fauteuil allait arriver jusqu'à ces paliers de repos, parce que pour monter une rampe avec ce pourcentage, faut être costaud. Tout ça pour que ça coûte moins cher. Faudrait coller tous les décideurs dans un fauteuil roulant pendant un jour ou deux pour qu'ils se rendent compte. Amicalement Zebulon_
  24. zebulon_

    Isoler ou pas ?

    enfin quelqu'un qui le reconnait. moi, ça fait longtemps que je l'ai fait. En fait, j'en utilise 3 : continuous, axes et cache. C'est tout et je vis très bien avec... Moins il y en a, moins t'as d'emmerde avec. C'est mathématique. ;) Amicalement Zebulon_
  25. zebulon_

    Isoler ou pas ?

    Pour le format non valide, il faut absolument que ton fichier .pat se termine par une ligne vide. Il faut faire un retour charriot après la dernière ligne de définition du motif. Pour ce qui est de l'origine, il faut bien indiquer où autocad commence sa hachure, sinon ça va être moche. Dans la version 2007, il y a la variable HPORIGINMODE qui permet d'éviter cette gymnastique avec le scu. on met cette variable à 1, plutôt que 0, et tout de suite on se sent respirer... Mais je ne sais pas si cette variable existe déjà sur la 2005. Bon courage Amicalement Zebulon_
×
×
  • 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é