Aller au contenu

Patrick_35

Membres
  • Compteur de contenus

    6 374
  • Inscription

  • Dernière visite

  • Jours gagnés

    30

Tout ce qui a été posté par Patrick_35

  1. Mouais, et moi qui commençais à me tâter pour goûter au .Net, ma motivation vient de descendre d'un seul coup de plusieurs étages. De plus, d'après l'article de serge, le lisp risque d'être concerné dans un futur proche. Du boulot en perspective ;) Merci (gile) @+
  2. Salut Et en essayant _audit ? @+
  3. Salut Un exemple pour regarder de sous-menu "Utilitaires de dessin" du menu "Fichier" appartenant au Menu "ACAD" (vlax-for ele (vla-get-submenu (vla-item (vla-item (vla-get-Menus (vla-item (vla-get-MenuGroups (vlax-get-acad-object) ) "ACAD" ) ) "&Fichier" ) 25 ) ) (terpri) (princ (vla-get-label ele)) ) @+ ps : une petite récursive pour les sous-menus serait pas mal ;)
  4. Salut (gile) Je croyais que les dll étaient compatibles pour toutes les versions ? @+
  5. Salut Et avec la variable DWGCHECK ? @+
  6. Patrick_35

    Lisps de gile

    Salut Ce n'est pas du tout le propos. C'est justement l'occasion de s'y mettre. Proverbe chinois: Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours. @+
  7. Mieux qu'un long discours. (defun c:afficher() (defun affiche() (cond ((= vue "0") (setq img nil)) ((= vue "1") (setq img "tedessus")) ((= vue "2") (setq img "teface")) ((= vue "3") (setq img "tedroite")) ((= vue "4") (setq img "tegauche")) ) (setq larg (dimx_tile "img")) (setq long (dimy_tile "img")) (start_image "img") (fill_image 0 0 long larg 0) (and img (slide_image -100 -170 (+ 140 larg) (+ 140 long) img)) (end_image) ) (setq rep 1) (setq rep1 0) (while (/= rep 0) (setq dcl_id (load_dialog "ielement.DCL")) (new_dialog "ielement" dcl_id) (action_tile "te" "(setq choice \"te\")") (action_tile "coude" "(setq choice \"coude\")") (action_tile "veh" "(setq choice \"vehicule\")") (action_tile "vanne" "(setq choice \"vanne\")") (action_tile "pi" "(setq choice \"pi\")") (action_tile "manch" "(setq choice \"manchette\")") (action_tile "jd" "(setq choice \"jd\")") (action_tile "suiv" "(done_dialog 1)") (action_tile "annul" "(done_dialog 0)") (setq rep (start_dialog)) (unload_dialog dcl_id) (if (= rep 0) (exit)) ;**************************************************CONDITION CHOIX TE************************************************************************************************************************ (if (= choice "te") (progn (setq dcl_id (load_dialog "te.DCL")) (new_dialog "tedcl" dcl_id) (setq vue "0") (affiche) (action_tile "vue1" "(setq vue $value)(affiche)") (action_tile "diam1" "(setq diam1 $value)") (action_tile "diam2" "(setq diam2 $value)") (action_tile "rot" "(setq rotation $value)") (action_tile "prec" "(done_dialog 1)") (action_tile "cancel" "(exit)") (action_tile "accept" "(and (setq rep1 1)(done_dialog 1))") (setq rep (start_dialog)) (unload_dialog dcl_id) (if (= rep 0) (exit) )) (if (= rep1 1) (progn (insere) (exit)) ) ) )) @+
  8. Salut (cdr (assoc 10 (entget detect))) Et j'ajouterai quelque part dans la boucle de recherche des attributs (= (cdr (assoc 0 ent)) "SEQEND") Ainsi que de filter mes objets (ssget '((0 . "INSERT") (66 . 1))) @+
  9. Patrick_35

    Lisps de gile

    Salut C'est bien aussi de les faire soi-même, bien que je ne décrie pas le travail de (gile), au contraire. @+
  10. A lire ton lisp, la marche n'est pas aussi haute que tu le crois. Juste quelques subtilités à bien comprendre. @+
  11. Salut Je suppose qu'une fois tous les paramètres choisis, cela correspond à un bloc. Ben dans ce cas, tu fais une image de ton bloc (avec la commande _mcliche) que tu affiches en fonction de tes paramètres (avec slide_image) @+
  12. Salut (defun c:ecrire_nom_d_images (/ bg hd sel vla_image_en_cours) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (vla-startundomark *acdoc*) (and (ssget '((0 . "IMAGE"))) (progn (vlax-for vla_image_en_cours (setq sel (vla-get-activeselectionset *acdoc*)) (vla-getboundingbox vla_image_en_cours 'bg 'hd) (entmake (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbMText") (cons 10 (mapcar '(lambda(a B)(/ (+ a B) 2)) (vlax-safearray->list bg) (vlax-safearray->list hd))) (cons 1 (vl-filename-base (vla-get-ImageFile vla_image_en_cours))) (cons 8 (vla-get-Layer vla_image_en_cours)) (cons 40 (abs (/ (- (cadr (vlax-safearray->list bg)) (cadr (vlax-safearray->list hd))) 10.0))) (cons 71 5) ) ) ) (vla-delete sel) ) ) (vla-endundomark *acdoc*) (princ) ) @+
  13. Salut On passe la vitesse supérieur ;) Le plus simple est d'utiliser ceci. L'idée est de comparer le nombre d'impression dans la file d'attente de Pdfcreator et le nombre de feuilles que l'on imprime. S'il y a une différence, je fais une boucle d'attente. Supprimer un process. C'est la seul manière de fermer Pdfcreator. Un vlax-release-object de Pdfcreator en lui-même ne suffit pas. (defun kill(qui / item meth1 meth2 obj WMI) (setq WMI (vlax-create-object "WbemScripting.SWbemLocator") meth1 (vlax-invoke WMI 'ConnectServer nil nil nil nil nil nil nil nil) meth2 (vlax-invoke meth1 'ExecQuery "Select * from Win32_Process") ) (vlax-for item meth2 (and (setq obj (vlax-get item 'CommandLine)) (vl-string-search (strcase qui) (strcase obj)) (vlax-invoke item 'Terminate) ) ) (foreach item (list WMI meth1 meth2) (vlax-release-object item) ) ) Ma routine d'impression (kill "PDFCreator.exe") ; Eradiquer PdfCreator si jamais on s'en est déjà servit. (setq pdf (vlax-create-object "PDFCreator.clsPDFCreator")) ; Apeller l'activex PdfCreator (vlax-invoke pdf 'cstart "/NoProcessingAtStartup") ; Ne pas démarrer au lancement (vlax-put pdf 'cPrinterStop :vlax-true) ; Activer la file d'attente (vlax-put pdf 'cWindowState 0) ; Afficher la fenêtre de Pdfcreator (vlax-invoke pdf 'cClearCache) ; Vider la file d'attente (setq tot 0) ; Initialiser mon nombre d'impression (mon_impression) ; Mon Impression en cours... (while (/= (vlax-get pdf 'cCountOfPrintjobs) (1+ tot))) ; Pause tant que la nouvelle impression n'est pas dans la file d'attente (setq tot (1+ tot)) ; Incrémenter mon nombre d'impression pour correspondre à ma file d'attente Pour regrouper mes impressions en un seul (vlax-invoke pdf 'cCombineAll) Et nettoyer (vlax-release-object pdf) @+
  14. Salut Je sens que mes chevilles vont gonfler :(rires forts): Ben si, elle fonctionne avec des arc :huh: Ben voila. ;; ;; Routine (PAP --> PAPILLON) de Detection de Croisement/Papillon ou Touchette Polyligne par Polyligne ;; Routine PAPILLON vs 1.03 par P35 suite a la demande de lecrabe ;; Couleur 1 --> Plusieurs pap ou touchettes sans croisement avec d'autres poly ;; Couleur 2 --> Plusieurs pap ou touchettes avec 1 croisement avec d'autres poly ;; Couleur 3 --> Plusieurs pap ou touchettes avec plusieurs croisements avec d'autres poly ;; Couleur 4 --> Aucun pap ou touchette avec plusieurs croisements avec d'autres poly ;; Couleur 5 --> Un pap ou touchette sans croisement avec d'autres poly ;; Couleur 6 --> Un pap ou touchette avec 1 croisement avec d'autres poly ;; Couleur 7 --> Un pap ou touchette avec plusieurs croisements avec d'autres poly ;; Couleur 8 --> Aucun pap ou touchette avec 1 croisement avec d'autres poly ;; (defun c:papillon(/ col com doc ent sel tot croise un_seg) (defun croise(pts lst clo / cnt pt1 pt2 tot) (setq cnt 0 tot 0) (while (setq pt1 (nth cnt lst)) (if (and (eq cnt (length lst)) (eq clo :vlax-true) ) (setq pt2 (nth 0 lst)) (setq pt2 (nth (1+ cnt) lst)) ) (and (/= (car pts) pt1) (/= (cadr pts) pt1) pt2 (/= (car pts) pt2) (/= (cadr pts) pt2) (inters (car pts) (cadr pts) pt1 pt2) (setq tot (1+ tot)) ) (setq cnt (1+ cnt)) ) tot ) (defun un_seg(ent / cnt ele lst nb pt1 pt2 tot) (setq lst nil cnt 0 tot 0) (while (not (vl-catch-all-error-p (setq pts (vl-catch-all-apply 'vla-get-coordinate (list ent cnt))))) (setq lst (cons (vlax-safearray->list (vlax-variant-value pts)) lst) cnt (1+ cnt) ) ) (setq cnt 0) (while (setq pt1 (nth cnt lst)) (if (and (eq cnt (length lst)) (eq (vla-get-closed ent) :vlax-true) ) (setq pt2 (nth 0 lst)) (setq pt2 (nth (1+ cnt) lst)) ) (and pt2 (setq tot (+ tot (croise (list pt1 pt2) lst (vla-get-closed ent))))) (setq cnt (1+ cnt)) ) (if (equal (car lst) (last lst)) (setq tot (- tot 2)) ) (while lst (setq nb (length lst) ele (car lst) lst (vl-remove ele lst) cnt (- nb (length lst)) ) (and (> cnt 1) (setq tot (+ tot cnt)) ) ) tot ) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "LWPOLYLINE"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (setq tot (un_seg ent) col nil ) (vlax-for com sel (and (not (equal ent com)) (setq lst (vlax-invoke ent 'intersectwith com acextendnone)) (progn (if (> (length lst) 3) (setq col 2) (or col (setq col 1)) ) ) ) ) (cond ((and (> tot 2) (not col)) (vlax-put ent 'color 1) ) ((and (> tot 2) (= col 1)) (vlax-put ent 'color 2) ) ((and (> tot 2) (= col 2)) (vlax-put ent 'color 3) ) ((and (= tot 0) (= col 2)) (vlax-put ent 'color 4) ) ((and (= tot 2) (not col)) (vlax-put ent 'color 5) ) ((and (= tot 2) (= col 1)) (vlax-put ent 'color 6) ) ((and (= tot 2) (= col 2)) (vlax-put ent 'color 7) ) ((and (= tot 0) (= col 1)) (vlax-put ent 'color 8) ) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) @+
  15. Patrick_35

    Substitution de blocs

    Salut Avec Rbloc, tu peux choisir plusieurs blocs de noms différents (sélection écran) que tu peux remplacer par un seul. Si je pousse le bouchon, il est tout à fait possible avec Rbloc de remplacer tous les blocs d'un dessin pas un seul type de bloc. @+
  16. Je comprends pas. J'avais testé et cela semblait fonctionner Tu as un fichier test pour que je modifie @+
  17. Salut Quelque chose comme ça ? (defun c:pap(/ doc com ent lst sel) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "LWPOLYLINE"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (vlax-for com sel (and (/= ent com) (setq lst (vlax-invoke ent 'intersectwith com acextendnone)) (progn (if (> (length lst) 3) (mapcar '(lambda(x)(vlax-put x 'color 5)) (list ent com)) (mapcar '(lambda(x)(vlax-put x 'color 1)) (list ent com)) ) ) ) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) @+
  18. Patrick_35

    Jaune et 255,255,0

    Pour le code dxf 420, des valeurs supérieur ou égal à 0 Extrait de l'aide @+
  19. Patrick_35

    Jaune et 255,255,0

    Salut Avec un peu de retard et pour proposer une variante (and (ssget "_X" '((-4 . ">=")(420 . 0))) (vlax-map-collection (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) '(lambda(x) (vlax-put x 'color (vlax-get x 'color))) ) (vla-delete sel) ) Bruno, tu peux simplifier (entmod (vl-remove-if '(lambda (x) (or (= (car x) 420) (= (car x) 430))) (entget (car (entsel))))) par (entmod (vl-remove-if '(lambda (x) (member (car x) '(420 430)) (entget (car (entsel))))) @+
  20. Ben décidement, mes messages se croisent avec d'autres ;) @+
  21. Salut Que c'est le lisp qui écrit le DCL ? C'est pour éviter le fichier DCL, n'avoir plus qu'un fichier à gérer et ne plus avoir la question @+
  22. Salut Tu n'interroges pas le bouton qui est choisit, mais l'ensemble En prenant l'exemple que la variable ctb = 0 quand c'est en monochrome (action_tile "ctbnb" "(setq ctb 0)" (action_tile "ctbc" "(setq ctb 1)" ps : non testé Et j'en profite pour optimiser la liste des imprimantes (defun liste_imprimantes() (vl-remove-if '(lambda(x)(member x '( "Aucun" "None" "Microsoft XPS Document Writer" "HP Designjet T1200 HPGL2" "Fax" "Default Windows System Printer.pc3" "DWF6 ePlot.pc3" "DWFx ePlot (XPS Compatible).pc3" "DWG To PDF.pc3" "PublishToWeb JPG.pc3" "PublishToWeb PNG.pc3" ) ) ) (vlax-invoke (vla-get-activelayout doc) 'getplotdevicenames) ) ) Et celle qui vire tout les pc3 (defun liste_imprimantes() (vl-remove-if '(lambda(x)(or (member x '( "Aucun" "None" "Microsoft XPS Document Writer" "HP Designjet T1200 HPGL2" "Fax" "DWF6 ePlot.pc3" ) ) (and (vl-filename-extension x) (eq (strcase (vl-filename-extension x)) ".PC3") ) ) ) (vlax-invoke (vla-get-activelayout doc) 'getplotdevicenames) ) ) @+
  23. Patrick_35

    ScanDXF Beta

    Salut Excellent initiative. Je me doute de la raison du dxf, mais c'est dommage de ne pas utiliser ObjectDbx. Je n'ai pas testé, mais je lance quelques idées. Pour le décompte 1) Faire la différence avec le même bloc par rapport à son/ses attribut(s). J'ai comme exemple des BET qui implante des luminaires avec le même bloc, mais qui les différencies avec le 1er attribut. Cela donne le luminaire type 1, type 2, etc... Et comme on est des perfectionnistes, ne pas limiter le nombre d'attributs qui permet de faire la différence (0 = pas de différence). 2) Faire attention à l'insertion multiple de blocs (command _minsert). On a un seul bloc dans Autocad, mais qui contient en réalité plusieurs. 3) Faire un total par fichier, puis au global. 4) Exporter le résultat sur un fichier Excel par exemple @+
  24. Patrick_35

    Zipper avec Autocad

    C'est vrai qu'il est super ce site. On y retrouve des pointures du lisp. Il faut juste se mette à l'anglais. :(rires forts): oh, c'est fort possible, et comme à l'époque, cela m'avais titillé, j'avais recherché comment faire. Et je viens de voir que le lisp pouvait être amélioré avec la sélection multiple de fichiers @+
  25. Patrick_35

    Zipper avec Autocad

    Salut Tu peux y accéder avec Shell.Application J'ai fait un lisp à ce sujet ps : grillé par tramber ;) @+
×
×
  • 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é