Aller au contenu

Fraid

Membres
  • Compteur de contenus

    2 523
  • Inscription

  • Dernière visite

  • Jours gagnés

    23

Tout ce qui a été posté par Fraid

  1. Fraid

    Wbloc sur Xref

    Bonjour, Je ne comprend pas du tout se que tu cherche à faire, et encore moins l’intérêt d’insérer en bloc des xrefs?????
  2. Bonjour, en copiant/collant la fenêtre cela ne fonctionne pas?
  3. J'y suis arrivé avec mes ssname l'argument sel étant le jeux de sélection des grandes polylignes. et j’utilise la fonction vertices de Gile pour capturer éventuellement des polylignes closes à l’intérieur des grandes. (defun hachsel ( Motif sel / n nn doc hach vsel polin vpolin) (setq doc (vla-get-activedocument (vlax-get-acad-object)) n -1 ) (repeat (sslength sel) (setq esel (ssname sel (setq n (+ 1 n))) vsel (vlax-ename->vla-object esel) hach (vla-addhatch (vla-get-modelspace doc) acHatchPatternTypePredefined Motif :vlax-false acHatchObject ) nn -1 ) (vlax-invoke hach 'AppendOuterLoop (list vsel)) (if (setq polin (ssget "_wp" (vertices esel)(list (cons 0 "LWPOLYLINE")(cons 70 1)))) (repeat (sslength polin) (setq vpolin (vlax-ename->vla-object (ssname polin (setq nn (+ 1 nn))))) (vlax-invoke hach 'AppendInnerLoop (list vpolin)) (vla-evaluate hach) ) (vla-evaluate hach) ) ) (vla-regen doc :vlax-true) ) (defun vertices (ent / i lst);GC (setq i (1+ (fix (vlax-curve-getEndParam ent)))) (repeat i (setq lst (cons (vlax-curve-getPointAtParam ent (setq i (1- i))) lst)) ) lst ) ce soir je vais plancher sur l'active document :blink: merci encore
  4. si je n'y arrive pas avec tous cela, je me remet à l'Autolisp :D Merci
  5. YES Merci, je n'avais pas vu cette méthode, je vais donc tout de suite faire des recherches de se coté super
  6. Merci Olivier, mais j'ai essayé en traitant les polylignes en boucle, et tout est hachuré, aucun îlot ne se forme.
  7. Bonjour, Merci Patrick pour tes précieux conseils. j'ai donc essayé ceci (defun hachsel ( Motif / doc hach vsel) (ssget "_X" (list (cons 0 "LWPOLYLINE")(cons 70 1))) (setq doc (vla-get-activedocument (vlax-get-acad-object)) vsel (vla-get-activeselectionset doc) hach (vla-addhatch (vla-get-modelspace doc) acHatchPatternTypePredefined Motif :vlax-false acHatchObject ) ) (vlax-invoke hach 'AppendOuterLoop (list vsel)) (vla-evaluate hach) ) et la j'ai cette erreur AutoCAD.Application: Echec de QueryInterface IID_IAcadBaseObject ????
  8. Bonjours, Je galère avec la méthode AppendOuterLoop. J'arrive très bien à hachurer des polylignes une par une comme cela. (defun hachit ( Motif sel / hach n vsel) (setq n -1) (repeat (sslength sel) (setq vsel (vlax-ename->vla-object (ssname sel (setq n (+ 1 n)))) hach (vla-addhatch (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) acHatchPatternTypePredefined Motif :vlax-false acHatchObject ) ) (vlax-invoke hach 'AppendOuterLoop (list vsel)) (vla-evaluate hach) ) ) voyant que AppendOuterLoop demande une liste j'ai essayé ceci. (defun hachsel ( Motif sel / hach vsel) (setq vsel (selectionset->vla-objects sel) hach (vla-addhatch (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) acHatchPatternTypePredefined Motif :vlax-false acHatchObject ) ) (vlax-invoke hach 'AppendOuterLoop vsel) (vla-evaluate hach) ) (defun selectionset->vla-objects (ss / c ename) (setq c -1) (repeat (sslength ss) (setq ename (cons (ssname ss (setq c (+ 1 c))) ename)) ) (mapcar 'vlax-ename->vla-object (reverse ename)) ) plante au niveau du (vlax-invoke hach 'AppendOuterLoop vsel) comprend pas, et ne trouve pas d'exemple qui permettrais de prendre en compte les îlots. Merci
  9. je vais faire des testes ce soir, la suis charrette je te tiens au courant
  10. l'itération est la répétition de code, dans une boucle par exemple.
  11. Bonjour, Je ne vois pas pourquoi cela serais limité à 333 hachures... Mais je ne comprend pas bien ton erreur. Tu as 105'395 hachures dans une xref? si tu as plus de 32000 objets dans un dwg ce n'est pas possible. en plus nous sommes limité en nombre d'itération, donc encore moins possible.(je ne sais plus combien, autour de 20000 me semble t'il) même en divisant tes plans en plus d'xref cela n’arrangerais rien.
  12. a oui, aussi, si il y a des calques contenant des hachures mais qu'ils ne sont pas désirés dans le tableau, je ne sais pas les détecter(hormis le 0).
  13. en fait c'est au niveau de la fonction GTHA, si je met une boucle selon la liste de calques, je n'arrive pas a incrémenter le nom des variables pour construire la liste finale.....
  14. He bonjour, Merci C'est surement grandement grâce à toi, Gile et aux autres. Ce n'est pas facile, mais à force de persévérer on y arrive. Parce que voulais tester la fonction de Lee Mac, c'étais donc l'occasion. Parce que je n'y suis pas arrivé...j'ai du m’emmêler les parenthèses. :unsure:
  15. voila la nouvelle version ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;getharea V2.0 17/12/2018;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Tappez GHA ou getharea pour lancer le lisp ;Place un tableau au point 0,0 contenant les surfaces de hachures par calques/xref ;;;;;;;;;;;;;;;;;;;;;;By fraiddd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:getharea (/ exref xrefs listlistareaxref n listArea listareaxref ) (vl-load-com) (setq xrefs (ssget "_x" (list (cons 0 "INSERT"))) n -1 ) (if xrefs (progn (repeat (sslength xrefs) (setq exref (ssname xrefs (setq n (1+ n))) listArea (cadar (LM:ODBX2 'GTHA (list (vla-get-path (vlax-ename->vla-object exref))) nil)) listareaxref (list (cdr (assoc 2 (entget exref))) listArea) ) (if listlistareaxref (setq listlistareaxref (append listlistareaxref (list listareaxref))) (setq listlistareaxref (list listareaxref)) ) ) (if listlistareaxref (tabsurf listlistareaxref) (princ "\Xrefs incompatibles")) ) (princ "\nAucune XREF dans le dessin") ) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun GTHA ( doc / lay area1 area2 area3 area4 area5 calque1 calque2 calque3 calque4 calque5 ) (setq calque1 "PROJ_DALLE_ETAPE 3_HACH" calque2 "PROJ_DALLE_ETAPE 4_HACH" calque3 "PROJ_DALLE_ETAPE 5_HACH" calque4 "PROJ_DALLE_ETAPE 6_HACH" calque5 "PROJ_DALLE_SPECIALE_HACH" area1 0.0 area2 0.0 area3 0.0 area4 0.0 area5 0.0 ) (vlax-for obj (vla-get-ModelSpace doc) (setq lay (vla-get-Layer obj)) (if (= (vla-get-ObjectName obj) "AcDbHatch") (cond ((= lay calque1)(setq area1 (+ area1 (vla-get-Area obj)))) ((= lay calque2)(setq area2 (+ area2 (vla-get-Area obj)))) ((= lay calque3)(setq area3 (+ area3 (vla-get-Area obj)))) ((= lay calque4)(setq area4 (+ area4 (vla-get-Area obj)))) ((= lay calque5)(setq area5 (+ area5 (vla-get-Area obj)))) ) ) ) (list (list (cons calque1 (rtos area1 2 4)) (cons calque2 (rtos area2 2 4)) (cons calque3 (rtos area3 2 4)) (cons calque4 (rtos area4 2 4)) (cons calque5 (rtos area5 2 4)))) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun LM:ODBX2 ( fun lst sav / *error* app dbx dir doc dwl err rtn vrs );de Lee mac (defun *error* ( msg ) (if (and (= 'vla-object (type dbx)) (not (vlax-object-released-p dbx))) (vlax-release-object dbx) ) (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")) (princ (strcat "\nError: " msg)) ) (princ) ) (cond ( (progn (setq dbx (vl-catch-all-apply 'vla-getinterfaceobject (list (setq app (vlax-get-acad-object)) (if (< (setq vrs (atoi (getvar 'acadver))) 16) "objectdbx.axdbdocument" (strcat "objectdbx.axdbdocument." (itoa vrs)) ) ) ) ) (or (null dbx) (vl-catch-all-error-p dbx)) ) (prompt "\nUnable to interface with ObjectDBX.") ) ( t (vlax-for doc (vla-get-documents app) (setq dwl (cons (cons (strcase (vla-get-fullname doc)) doc) dwl)) ) (foreach dwg lst (if (or (setq doc (cdr (assoc (strcase dwg) dwl))) (and (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx dwg)))) (setq doc dbx) ) ) (progn (setq rtn (cons (cons dwg (if (vl-catch-all-error-p (setq err (vl-catch-all-apply fun (list doc)))) (prompt (strcat "\n" dwg "\t" (vl-catch-all-error-message err))) err ) ) rtn ) ) (if sav (vla-saveas doc dwg)) ) (princ (strcat "\nError opening file: " (vl-filename-base dwg) ".dwg")) ) ) (if (= 'vla-object (type dbx)) (vlax-release-object dbx) ) (reverse rtn) ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun tabsurf ( list-Surf / acdoc tables enttable Tableau int int2 list-xref list-lay nbxref nblay ) (if (setq tables (ssget "_X" (list (cons 0 "ACAD_TABLE")))) (progn (setq int -1) (repeat (sslength tables) (setq enttable (ssname tables (setq int (1+ int)))) (if (= (vla-getText (vlax-ename->vla-object enttable) 0 0) "Surfaces par Calques") (vla-delete (vlax-ename->vla-object enttable)) ) ) ) ) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) list-xref (ListeCAR2 list-Surf) list-lay (ListeCAR2 (cadr (car list-Surf))) nbxref (length list-xref) nblay (length list-lay) Tableau (vla-Addtable (vla-get-ModelSpace acdoc) (vlax-3d-point 0 0 0) (+ 3 nblay) (+ 2 nbxref) 10 66 ) int 1 ) (vla-put-VertCellMargin Tableau 3.0) (vla-put-TitleSuppressed Tableau :vlax-false) (vla-put-HeaderSuppressed Tableau :vlax-false) (vla-setText Tableau 0 0 "Surfaces par Calques") (mapcar '(lambda (lay) (setq int (+ 1 int)) (vla-setText Tableau int 0 lay) ) list-lay ) (setq int 0) (mapcar '(lambda (surf) (setq int (+ 1 int) int2 1) (vla-setText Tableau 1 int (car surf)) (mapcar '(lambda (x) (setq int2 (+ 1 int2)) (vla-setText Tableau int2 int (cdr x)) ) (cadr surf) ) ) list-Surf ) (setq int 1) (vla-setText Tableau 1 (+ 1 nbxref) "Totaux par calques");%<\AcExpr(Sum(B3:D3)) \f "%lu2">% %<\AcExpr (Sum(B4:D4)) \f "%lu2">% (repeat nblay (setq int (+ 1 int)) (vla-setText Tableau int (+ 1 nbxref) (strcat "%<\\AcExpr (Sum(" (chr 66) (itoa(+ int 1)) ":" (chr (+ 66 (- nbxref 1))) (itoa(+ int 1)) ")) \\f \"%lu2\">%" )) ) (vla-setText Tableau (+ 2 nblay) 0 "Totaux par xref") (setq int 0) (repeat nbxref (setq int (+ 1 int)) (vla-setText Tableau (+ 2 nblay) int (strcat "%<\\AcExpr (Sum(" (chr (+ 65 int)) "2" ":" (chr (+ 65 int)) (itoa(+ nblay 2)) ")) \\f \"%lu2\">%" )) ) (vla-ZoomWindow (vlax-get-acad-object) (vlax-3d-point 0 0 0) (vlax-3d-point 335 -100 0)) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun ListeCAR2 (listedListes / k°) (mapcar '(lambda (x) (setq K° (cons (car x) K°))) listedListes) (reverse K°) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:GHA nil (c:getharea)) Je vais quand même regarder l'extraction de données cela m'a l'air très intéressant.
  16. Je suis sur Autocad 2011 et quand je tape tableau je n'ai qu'une page...
  17. Ce tableau n'est qu'un exemple de présentation. Les xref aurons leur nom d'affiché ainsi que les calques et les valeurs sont fictives. Tu pourras avoir jusqu'a 24 xref, après les champs plantes. et le nombre de calque est fixé à 5. Pourrais tu me donner le nom exacte de tes calques? pour faire la liaison, c'est plus facile.
  18. Bonjour, Suis d'accord avec Steven, le tableau est inévitable. Par contre je ne vois pas comment il fait la liaison. J'ai avancé le code.Je n'aurais pas finis ce soir. par contre si tu me donne le nom des 5 calques,cela me faciliterais les choses. et voici un bout de code a charger qui te donne un aperçu du tableau (il se place au 0,0 au chargement, rien a taper). (defun tabsurf ( list-Surf / Tableau int int2 list-xref list-lay nblay ) (vl-load-com) (setq list-xref (ListeCAR2 list-Surf) list-lay (ListeCAR2 (cadr (car list-Surf))) nbxref (length list-xref) nblay (length list-lay) Tableau (vla-Addtable (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point 0 0 0) (+ 3 nblay) (+ 2 nbxref) 10 66 ) int 1 ) (vla-put-VertCellMargin Tableau 3.0) (vla-put-TitleSuppressed Tableau :vlax-false) (vla-put-HeaderSuppressed Tableau :vlax-false) (vla-setText Tableau 0 0 "Surfaces par Calques") (mapcar '(lambda (lay) (setq int (+ 1 int)) (vla-setText Tableau int 0 lay) ) list-lay ) (setq int 0) (mapcar '(lambda (surf) (setq int (+ 1 int) int2 1) (vla-setText Tableau 1 int (car surf)) (mapcar '(lambda (x) (setq int2 (+ 1 int2)) (vla-setText Tableau int2 int (cdr x)) ) (cadr surf) ) ) list-Surf ) (setq int 1) (vla-setText Tableau 1 (+ 1 nbxref) "Total par calque") (repeat nblay (setq int (+ 1 int)) (vla-setText Tableau int (+ 1 nbxref) (strcat "%<\\AcExpr (Sum(" (chr 66) (itoa(+ int 1)) ":" (chr (+ 66 (- nbxref 1))) (itoa(+ int 1)) ")) \\f \"%lu2\">%" )) ) (vla-setText Tableau (+ 2 nblay) 0 "Total par xref") (setq int 0) (repeat nbxref (setq int (+ 1 int)) (vla-setText Tableau (+ 2 nblay) int (strcat "%<\\AcExpr (Sum(" (chr (+ 65 int)) "2" ":" (chr (+ 65 int)) (itoa(+ nblay 2)) ")) \\f \"%lu2\">%" )) ) ) (defun ListeCAR2 (listedListes / k°) (mapcar '(lambda (x) (setq K° (cons (car x) K°))) listedListes) (reverse K°) ) (tabsurf (list (list "XREF1" (list ( cons "Calque-1" 1102.35) ( cons "Calque-2" 2102.35) ( cons "Calque-3" 3102.35) ( cons "Calque-4" 4102.35) ( cons "Calque-5" 5102.35) ) ) (list "XREF2" (list ( cons "Calque-1" 1202.35) ( cons "Calque-2" 2202.35) ( cons "Calque-3" 3202.35) ( cons "Calque-4" 4202.35) ( cons "Calque-5" 5202.35) ) ) (list "XREF3" (list ( cons "Calque-1" 1302.35) ( cons "Calque-2" 2302.35) ( cons "Calque-3" 3302.35) ( cons "Calque-4" 4302.35) ( cons "Calque-5" 5302.35) ) ) ) ) cela te convient t'il? en tout cas merci pour cette idée de programmation, cela m'a permis d'en apprendre plus, et au delà...
  19. tu ne l'avais pas dit. je vais revoir le code ce week end. Est ce toujours les mêmes calques? Y en a t'il beaucoup? a tu plusieurs xref dans le dessin?
  20. que obtient tu si tu colle ceci ? (getchemin (entsel "\nSélectionnez une XREF: "))
  21. chez moi cela fonctionne sur un Autocad 2011 et Windows 7. J'ai beau regarder si j' ai oublier une fonction, vois pas.
  22. Bonjour, Pour lancer le lisp c'est GHA ou getharea
  23. Fraid

    Xref : Changement chemin

    Bonjour, a tu essayé XLOADPATH ?
  24. Merci, Je pensais être passé à coté de quelque chose. J'essais de réfléchir pour consommer moins.
  25. Bonjour, Pour faire suite à ce Post ou j'utilise cette fonction (defun GTHA ( doc / area) (setq area 0.0) (vlax-for obj (vla-get-ModelSpace doc) (if (= (vla-get-ObjectName obj) "AcDbHatch") (setq area (+ area (vla-get-Area obj))) ) ) area ) Je n'ai pas réussi à filtrer la sélection avec un vla-get-hatch ou hatchs qui n'existe pas, contrairement à vla-get-blocks par exemple. Du coup me suis rabattu sur vla-get-ModelSpace, pas bon pour la planète puisque nous explorons tout ce qu'il y a dans l'espace objet... Y a t'il une façon de sélectionner les hachures (sans ssget évidement). Mercich
×
×
  • 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é