Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. Je te crois, ce n'était qu'une suggestion (tu peux alors supprimer le chemin s'il ne sert à rien) Tu dis l'avoir installé chez toi sans problème, ce qui laisse supposer que tu es en administrateur de ton poste. Est-ce aussi le cas sur le poste où tu essayes de l'installer? Ce n'est qu'une autre piste!...
  2. Bonjour, Je ne connais pas du tout ce plug-in, mais si tu vas dans les options dans l'onglet "Fichiers", as tu un chemin déclaré qui pointe vers le dossier d'installation du plug-in? (comme pour les express par exemple) Si non, essayes de rajouter ce chemin, c'est peut être l'explication qu'il ne trouve pas les commandes associées.
  3. Bonjour, Suite à une demande d'un utilisateur que j'ai trouvé intéressante, j'ai essayé de trouvé une solution. Le problème à la base était de retrouver les entités ayant servir comme champs dynamique dans un tableau. C'est vrai qu'AutoCad à la base ne permet pas de savoir qu'elle est l'entité qui a servi à créer le champ, ce qui peut être gênant lorsqu'on veut contrôler que l'on a rien oublié concernant le métré qui a été réalisé dans le tableau. Voici donc ce que j'ai fais, la routine est encore fraîche. Ne vous gênez pas a y apporter des modifications pour l’améliorer. Pour le test: Pour faire un tableau de métré rapidement vous pouvez utiliser Metre2Cell&Field Puis utiliser la routine ci dessous Un problème que je n'ai pas compris, pour le bon fonctionnement il est préférable de faire "Esc" pour annuler la sélection faite par la routine avant de relancer celle ci sur une nouvelle table. (defun c:Obj_link2table ( / js obj nb_rows nb_columns indx_r indx_c js_ sub id_cell field_obj en ent) (while (null (setq js (ssget "_:S" '((0 . "ACAD_TABLE")))))) (setq obj (vlax-ename->vla-object (ssname js 0)) nb_rows (vla-Get-Rows obj) nb_columns (vla-Get-Columns obj) indx_r 0 indx_c 0 js_sub (ssadd) ) (while (<= indx_r (1- nb_rows)) (if (eq (vla-GetContentType obj indx_r indx_c) 2) (cond ((numberp (vlax-variant-value (vla-GetCellValue obj indx_r indx_c))) (setq id_cell (vla-GetFieldId obj indx_r indx_c ) field_obj (vla-ObjectIDToObject (vla-get-ActiveDocument (vlax-get-acad-object)) id_cell) en (cdr (assoc 331 (entget (cdr (assoc 360 (entget (vlax-vla-object->ename field_obj))))))) ) (setq js_sub (ssadd en js_sub)) ) ) ) (setq indx_c (1+ indx_c)) (if (> indx_c (1- nb_columns)) (setq indx_r (1+ indx_r) indx_c 0)) ) (if js_sub (sssetfirst nil js_sub)) (prin1) ) Voilà, si d'autres veulent creuser le sujet, je suivrais avec attention leur propositions.
  4. bonuscad

    Fichier trop lourd ?

    Bonjour, A lire ta succession de réponses. Personnellement je réserve le copier-coller à des entités simples. Pour ma part je ne le ferais pas pour les images. Si tu fais un décompose sur image déchargée qui a été copier-coller, ben tu verras que celle-ci lors du rechargement autocad te dira qu'elle est rechargée et relié, mais tu ne la verra nulle part. (en gros il se croisse les bras). Je te suggère de recommencer ta manip et de traiter tes images de façon classique (pas de copier-coller), et voir si il y a une différence. NB: L'insertion façon bloc d'un fichier, en mode "DECOMPOSE", est tout aussi efficace (et plus sure) qu'un copier-coller.
  5. Salut, Et par le gestionnaire d'état des calques? Tu te mets dans la fenêtre bien configurée en couleur , donc dans l'EO. Tu enregistre ton état de calque. Tu vas dans ta nouvelle fenêtre et tu restaure celui-ci !!!
  6. Qu'est que pourrait retourner la ligne magique suivante tapée en ligne de commande? Bien mettre le nom du calque qui t’intéresse. (sslength (ssget "_X" '((8 . "LE NOM DU CALQUE A PURGER"))))
  7. Avec la même démarche qu'avec le code proposé précédemment. NB: J'ai été surpris de ne pas trouver de système de projection attribué à ton dessin ! Comment tu fais tes re-projection? Sous réserve que j'ai bien pris le bon système de référence de départ... ;Conversion de coordonnéees Lambert I vers Lambert93 RGF (defun c:xy_LL-ItoRGF93 ( / as_cor js ename1 dxf_ent1 stringx ename2 dxf_ent2 stringy pt ll pt_x pt_y desc) (setq as_cor (ade_projgetwscode)) (cond ((eq (strcase as_cor) "IGN-I") (ade_projsetsrc as_cor) (ade_projsetdest "Lambert93") (princ "\nSelectionner le texte représentant le X: ") (while (setq js (ssget "_+.:E:S" '((0 . "TEXT")))) (setq ename1 (ssname js 0)) (cond (ename1 (cond ((not (zerop (setq stringx (atof (cdr (assoc 1 (setq dxf_ent1 (entget ename1)))))))) (princ "\nSelectionner le texte représentant le Y: ") (while (not (setq js (ssget "_+.:E:S" '((0 . "TEXT")))))) (setq ename2 (ssname js 0)) (cond ((not (zerop (setq stringy (atof (cdr (assoc 1 (setq dxf_ent2 (entget ename2)))))))) (setq pt (list stringx stringy) ll (ade_projptforward pt) pt_x (car ll) pt_y (car (cdr ll)) desc (ade_projgetinfo "Lambert93" "description") ) (princ (strcat "\nX,Y: " (rtos stringx 2 3) "," (rtos stringy 2 3) "\n Converti depuis: " as_cor "\n Converti vers : " desc "\nX,Y: " (rtos pt_x 2 3) "," (rtos pt_y 2 3) ) ) (entmod (subst (cons 1 (rtos pt_x 2 3)) (assoc 1 dxf_ent1) dxf_ent1)) (entmod (subst (cons 1 (rtos pt_y 2 3)) (assoc 1 dxf_ent2) dxf_ent2)) ) (T (princ "\nCe n'est pas une valeur numérique!")) ) ) (T (princ "\nCe n'est pas une valeur numérique!")) ) ) ) (princ "\nSelectionner le texte représentant le X: ") ) ) (T (initget "Oui Non _Yes No") (if (eq (getkword "\nAssigner le système de coordonnées IGN-I au dessin actuel[Oui/Non]? <N>: ") "Yes") (progn (ade_projsetwscode "IGN-I") (princ "\nSystème attribué, relancez la commande") ) ) ) ) (prin1) )
  8. Il y a forcément une référence persistante à ce calque si tu n'arrive pas à le purger. Une imbrication de bloc? (profondeur de plusieurs niveaux) Pense aussi à regarder dans ton espace papier si tu n'as rien qui traîne qui fait référence à ce calque. Sans voir le fichier, difficile d'identifier ton problème.
  9. bonuscad

    copier rotation

    Bonjour, Il y a aussi MOCORO des express, mais c'est pas automatique. Si la rotation est régulière, même avis que bryce: se sera le plus pratique.
  10. bonuscad

    Pour commencer?

    Bonjour, Vu que l'aide en ligne d'Autocad sur le lisp est en anglais, je me permet de te proposer ce lien. A voir même si l'anglais te rebute, car il y a tous les stades d'apprentissage.
  11. Mise à part les erreurs de syntaxes qui empêchent l'achèvement du code, je souligne aussi la préférence du (cond au (if et de l'utilisation de (getkword) au lieu de (getstring), en pensant à armer les bits avec (initget) Tu y gagnera en clarté du code NB: pense aussi à déclarer tes variables en locale. En correction succincte (ne connaissant ton intention finale) voici ce que cela pourrait donné (defun c:Grue ( / oldlayer Choix Pt0 Ray Long Ang0 R Pt1 Pt2 Pt3 Pt4 Pt5 Pt6 Pt7 L1 NomEntite liste p1 p2 ang2) (setvar "cmdecho" 0) (setq oldlayer (getvar "CLAYER")) (command "_.-Layer" "_new" "Grue" "_color" "10" "Grue" "_set" "Grue" "") ;Saisie des paramètres ;Pt0 : Point de départ du rail ;Long: Longueur du rail ;Ang0: Angle d'orientation du rail /Ox ;R : Rayon d'emprise de la grue ;Pt1 Point de fin du rail ;pt2 point d'un batiment ;ang2: Angle d'orientation du bâtiment (initget 1 "Fixe Rails") (setq Choix (getkword "\nChoisissez un type de grue [Fixe/Rails]:")) ;Grue fixe (cond ((eq Choix "Fixe") (initget 1) (setq Pt0 (getpoint "\nPoint de base de la grue: ")) (initget 3) (setq Ray (getdist Pt0 "\nDonner la rayon de la grue: ")) (command "_.point" "_none" Pt0) (command "_.circle" "_none" Pt0 Ray) ) ;Cas d'une grue sur rails ((eq Choix "Rails") (initget 1) (setq Pt0 (getpoint "\nPoint de départ du rail: ")) (initget 3) (setq Long (getdist Pt0 "\nLongueur du rail: ")) ) ) (initget 1 "Seul Batiment") (setq Choix (getkword "\nChoisir l'orientation de la grue [seul/Batiment]: ")) ;orientation seul (cond ((eq Choix "Seul") (initget 1) (setq Ang0 (getangle Pt0 "\nAngle d'orientation du rail /Ox: ")) (initget 3) (setq R (getdist Pt0 "\nRayon d'emprise de la grue: ")) (setq Pt1 (polar pt0 ang0 R) Pt2 (polar pt0 (+ Ang0 (* 1.5 pi)) R) Pt3 (polar Pt1 (+ Ang0 (* 1.5 pi)) R) Pt4 (polar Pt1 (+ Ang0 (* 0.5 pi)) R) Pt5 (polar Pt0 (+ Ang0 (* 0.5 pi)) R) Pt6 (polar Pt0 (+ Ang0 pi) R) Pt7 (polar Pt1 (+ Ang0) R) ) (command "_.line" "_none" pt0 "_none" pt1 "") (command "_.line" "_none" pt2 "_none" pt3 "") (command "_.line" "_none" pt4 "_none" pt5 "") (command "_.arc" "_none" pt2 "_none" pt6 "_none" pt5) (command "_.arc" "_none" pt4 "_none" pt7 "_none" pt3) ) ;orientation suivant un bâtiment ((eq Choix "Batiment") (while (null (setq L1 (entsel "\nSélectionner une ligne:")))) (setq NomEntite (car L1) liste (entget NomEntite) ) (cond ((eq (cdr (assoc 0 liste)) "LINE") (setq p1 (cdr (assoc 10 liste)) p2 (cdr (assoc 11 liste)) ang2 (angle p1 p2) ) (initget 3) (setq R (getdist Pt0 "\nRayon d'emprise de la grue:")) (setq Pt1 (polar pt0 ang2 R) Pt2 (polar pt0 (+ Ang2 (* 1.5 pi)) R) Pt3 (polar Pt1 (+ Ang2 (* 1.5 pi)) R) Pt4 (polar Pt1 (+ Ang2 (* 0.5 pi)) R) Pt5 (polar Pt0 (+ Ang2 (* 0.5 pi)) R) Pt6 (polar Pt0 (+ Ang2 pi) R) Pt7 (polar Pt1 (+ Ang2) R) ) (command "_.line" "_none" pt0 "_none" pt1 "") (command "_.line" "_none" pt2 "_none" pt3 "") (command "_.line" "_none" pt4 "_none" pt5 "") (command "_.arc" "_none" pt2 "_none" pt6 "_none" pt5) (command "_.arc" "_none" pt4 "_none" pt7 "_none" pt3) ) (T (princ "\nCe n'est pas une ligne!") ) ) ) ) (setvar "CLAYER" oldlayer) (setvar "cmdecho" 1) (prin1) ) Tu remarquera qu'avec (getkword) et la bonne syntaxe dans le message, tu auras directement tes options accessible dans un menu contextuel par un click droit de souris, pas besoin de taper les options. ;)
  12. Ouais, et c'est pour ça qu'on est mal barré car on a perdu notre AAA -> [] ....
  13. Je reviens juste sur le sujet pour vous proposer le code si dessus remanié pour un traitement plus généraliste. Donc celui-ci va vous permettre de nettoyer les tables de données d'objets qui auraient plusieurs enregistrements. Seul tous les objets de l'espace courant seront traités. Cette routine vous évitera l'export et le ré-import qui était la solution pour se débarrasser des ces multiples enregistrements en trop. (defun c:del_record_other0 ( / js n obj tbllist numrec ct lst) (setq js (ssget "_X" (list (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) lst nil ) (cond (js (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n)))) (setq tbllist (ade_odgettables obj)) (cond (tbllist (foreach tbl tbllist (setq numrec (ade_odrecordqty obj tbl)) (cond ((> numrec 1) (setq ct (1- numrec)) (while (not (zerop ct)) (ade_oddelrecord obj tbl ct) (setq ct (- ct 1)) ) (if (not (member tbl lst)) (setq lst (cons tbl lst)) ) ) ) ) ) ) ) ) ) (if lst (mapcar '(lambda (x) (princ (strcat "\nLa table " x " à été nettoyée"))) lst) (princ "\nAucune table à nettoyer.") ) (prin1) )
  14. bonuscad

    retour des métrés...

    Un truc qui me choque à la lecture du code (je ne l'ai pas testé), est que si on choisi "Non", la routine va tenter de fermer un fichier qui n'a pas été ouvert: (close f) est en dehors de la condition... C'est d'ailleurs, peut être l'explication de l'erreur de lecrabe
  15. bonuscad

    pb type de ligne perso

    Alors en forçant la largeur de la polyligne, j'ai bien constaté un changement de largeur entre les segments droits et courbes. J'ai modifié le LIN en rajoutant 0 à la fin (un point qui est couvert par le tiret suivant), et là tout se comporte normalement: pourquoi? je n'en sais rien... *2x4p, A,0.25,-0.25,0.25,-0.25,0.25,-0.1,["2x4p",typeligne,s=0.2,y=-0.055],-0.62,0
  16. bonuscad

    pb type de ligne perso

    Bonjour, Tu as peut être simplement une mauvaise définition de ton type de ligne perso. Pour en être sur, il serait bien que tu donne le contenu de ton fichier .LIN utilisé.
  17. Merci beaucoup Olivier de ton éclairage. Comme Patrice je suis nul, car j'ai été déjà confronté à ce problème de nombre d'enregistrement, mais je n'ai pas fais le lien. D'ailleurs j'avais écrit ceci à la volée pour m'éviter l'export puis le ré-import. (defun c:del_record_other0 ( / js n obj tbllist numrec ct) (setq js (ssget "_X" (list '(0 . "POINT") '(8 . "PR") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ) (cond (js (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n)))) (setq tbllist (ade_odgettables obj)) (foreach tbl tbllist (cond ((eq tbl "POINTS-ROUTIERS") (setq numrec (ade_odrecordqty obj tbl)) (setq ct (1- numrec)) (while (not (zerop ct)) (ade_oddelrecord obj tbl ct) (setq ct (- ct 1)) ) ) ) ) ) ) ) ) En tout cas, en effet, cela fonctionne beaucoup mieux maintenant. Dommage que dans les requêtes il ne soit pas possible de faire un distinguo sur des tables multiples, car à priori on ne sait pas sur quel niveau d'enregistrement AutocadMap va faire sa requête. Il ne sont plus à une variable près chez AutoDesk, il pourrait en implémenter une qui verrouille / déverrouille l'enregistrement multiple. Encore Merci à tous les deux de votre temps passé. Il faudra que je vérifie quand même les routines que j'ai faites à la volée pour renseigner mes OD, car je pense que le problème de départ vient de là. (j'ai du faire une erreur de conception qui cumule mes données au lieu de les écraser...)
  18. Alors typiquement pour ce formatage, essayes ceci (testé succinctement) (vl-load-com) (defun c:text_replace ( / AcDoc Space ename string pos) (defun sel_onlyText (msg / js) (princ msg) (while (not (setq js (ssget "_+.:E:S:N" (list (cons 0 "*TEXT,MULTILEADER,ATTRIB") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) ) ) (vlax-ename->vla-object (cadar (ssnamex js 0))) ) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (setq ename (sel_onlyText "\nSélectionner le texte: ")) (setq string (if (vlax-property-available-p ename 'TextString) (vlax-get ename 'TextString))) (if string (if (wcmatch string "*-*") (progn (setq pos (vl-string-position (ascii "-") string)) (vlax-put ename 'TextString (strcat (substr string 2 (- pos 4)) (substr string (+ pos 2)))) ) ) ) (prin1) )
  19. Alors il faudrait en savoir un peu plus sur la structure de ta chaîne. La position est variable ou fixe? Les 3 caractères sont toujours placé avant le "-"? Le début de chaîne est toujours identique? On peut être magicien mais pas devin! :(rires forts):
  20. Peut être avec ceci, c'est juste une fonction (defun decr_txt (Txt / Boucle Decalage Val_Txt) (setq Boucle 1 Val_txt "" ) (while (<= Boucle (strlen Txt)) (setq Ascii_Txt (vl-string-elt Txt (- (strlen Txt) Boucle))) (if (not Decalage) (setq Ascii_Txt (1- Ascii_Txt)) ) (if (or (= Ascii_Txt 47) (= Ascii_Txt 64) (= Ascii_Txt 96)) (setq Ascii_Txt (cond ((= Ascii_Txt 47) 57) ((= Ascii_Txt 64) 90) ((= Ascii_Txt 96) 122) ) Decalage nil ) (setq Decalage T) ) (setq Val_Txt (strcat (chr Ascii_Txt) Val_Txt)) (setq Boucle (1+ Boucle)) ) (if (not Decalage) (setq Val_Txt (strcat (cond ((> Ascii_Txt 47) "9") ((> Ascii_Txt 90) "Z") ((> Ascii_Txt 122) "z") ) Val_Txt ) ) ) Val_Txt ) Exemple d'appel en ligne de commande ou intégré dans un lisp (la chaîne peut être alors une variable): (decr_txt "ADF356") -> "ADF355" (decr_txt "ADF368") -> "ADF367" (decr_txt "Ab00") -> "Aa99"
  21. Merci de tes tests, Si on ne peut plus faire confiance à des requêtes basiques et qu'on obtient des valeurs erronées, il faut qu'on m'explique l'utilité de Map... Pourtant avec le fichier de test (ou est issue l'image de mon post précédent) tout se passe correctement. J'ai donc pensé à l'ordre de création des entités (test effacer dernier, effacer dernier ....), mais que nenni, malgré une remise en ordre avec ceci: ((lambda ( / ) (while (setq ent (entsel)) (cond (ent (setq dxf_cod (entget (setq source_obj (car ent)))) (foreach m (foreach n dxf_cod (if (not (member (car n) '(0 100 67 410 8 100 10 210 50))) (setq lremov (cons (car n) lremov)))) (setq dxf_cod (vl-remove (assoc m dxf_cod) dxf_cod)) ) (entmake dxf_cod) (setq target_obj (entlast)) (COPY_DATA source_obj target_obj "All") (entdel source_obj) ) ) ) )) (NB : copy_od.lsp chargé au préalable) j'ai essayé dans les 2 sens (croissant et décroissant), toujours pareil. J'ai essayé aussi de supprimer les caractères spéciaux "_" de mon nom de champ INDEX, pas mieux. Je ne vois vraiment pas pourquoi ça ne fonctionne pas avec mon fichier. Il doit bien y avoir une raison, mais laquelle? En tout cas Map n'est pas à la hauteur, pour moi il y a un bug sérieux.
  22. Hello lecrabe, Ben j'y comprends rien du tout... Je me suis fait un petit fichier de données test. Et avec la requête suivante: http://pix.toile-libre.org/upload/img/1354201838.png cela fonctionne parfaitement, cela me retourne tous les objets dans l'intervalle d'index 0;-1 inclus (sur un ensemble de 5 à -5 avec des valeurs tous les 0.5 Dans mon cas concret, avec exactement la même requête sur un ensemble de (4.250 à -1.509) avec des intermédiaires à valeur rondes (4 3 2 1 0 -1) et bien 0 et -1 me sont renvoyés (normal) MAIS aussi -1.509 ??? Le champ index étant en réel dans les 2 fichiers...
  23. A voir sur le même site, la dernière mise en ligne: le rubik's cube. Bien sympa aussi sur l’ana-morphisme.
  24. Bonjour, Je pense que c'est un bug! Je viens de m'apercevoir que lorsque ma requête contient dans une condition (AND NOT donnée < nombre négatif), elle ne fonctionne pas (alors qu'elle devrait, enfin il me semble: j'ai des données positives ET négatives...) Le problème est seulement avec NOT, car avec AND seul je n'ai pas de problème avec les nombre négatif. Si ma requête est (AND NOT donnée < nombre positif), la requête fonctionne. Bon même si cela peut paraître étrange de faire des requêtes sur des nombres négatifs, ce dysfonctionnement me mets dans l'embarras, surtout que je ne vois pas comment le contourner. A moins que quelqu'un ai déjà réalisé des requêtes complexe sur des nombres négatifs sans problèmes. NB: MAP 2011 Version 3
×
×
  • 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é