PHILPHIL
Membres-
Compteur de contenus
1 256 -
Inscription
-
Dernière visite
-
Jours gagnés
10
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par PHILPHIL
-
hello je trouve aussi , plus rapide Phil
-
hello Merci a CADMIn et tous derrière pour cette mise a jour de site tout beau tout neuf Phil
-
Un LISP pour vos propres hachures !
PHILPHIL a répondu à un(e) sujet de samsam dans LISP et Visual LISP
HELLO le lisp "c:hatchdraw" et "c:hatchsave" fonctionne dans un carré de 1x1 avec une précision de 0.01 ca manque de précision pour certains motifs commet le modifier pour un carré de 100x100 avec une précision de 0.0001 ne pourrait il pas marcher avec aucune précision ?? merci PHil -
HELLO trouver, avec des bouts de programmes trouver sur le net ;;;;; By Lee MAC (defun LWPoly (lst lprx) (setq ll (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)) )) (setq all (append ll lprx )) (entmakex (append all (mapcar (function (lambda (p) (cons 10 p))) lst))) ) (defun c:DIAGONALE_INTERNE (/ myboundary) (vl-arx-import 'bpoly) (setq myboundary 0) (while (/= myboundary nil) (setq myboundary (bpoly (getpoint "\nSPECIFIER UN POINT INTERNE POUR LA CREATION DES DIAGONALES :"))) (setq pt_lst nil) (setq entx (entget myboundary)) (setq linepr '()) (if (cdr (assoc 6 entx)) (setq linepr (cons (cons 6 (cdr (assoc 6 entx))) linepr)) ) (if (cdr (assoc 8 entx)) (setq linepr (cons (cons 8 (cdr (assoc 8 entx))) linepr)) ) (if (cdr (assoc 43 entx)) (setq linepr (cons (cons 43 (cdr (assoc 43 entx))) linepr)) ) (if (cdr (assoc 62 entx)) (setq linepr (cons (cons 62 (cdr (assoc 62 entx))) linepr)) ) (setq pl_obj (vlax-ename->vla-object myboundary) cc (vla-get-coordinates pl_obj) ) (setq pt_lst_cnt (/ (length (vlax-safearray->list (vlax-variant-value cc))) 2)) (setq cntr 0) (repeat pt_lst_cnt (setq pt_lst (cons (append (vlax-safearray->list (vlax-variant-value (vla-get-coordinate pl_obj cntr))) (list 0)) pt_lst ) cntr (1+ cntr) ) ) (if (> (length pt_lst) 3) (progn ;;(lwpoly (list (nth 0 pt_lst) (nth 2 pt_lst)) linepr) (lwpoly (list (nth 1 pt_lst) (nth 3 pt_lst)) linepr) ) ) (command-s "effacer" myboundary "") ) ) a+ Phil
-
hello merci a vous deux j'ai plein de ligne verticales / horizontales qui se recoupent( en débordant ou pas ) qui forment un quadrillage l'idée est de trouver les coordonnées des intersections des lignes extérieures en cliquant une fois a l'intérieur d'un rectangle formé par le quadrillage normalement dans l'ordre trigonometrique ( bas gauche, bas droit, haut droit, haut gauche ), on prend le premier point puis le troisieme et on forme une ligne qui est la diagonale et de recommencer a la volée, sans a avoir a sélectionner des lignes, juste en cliquant un point( "centroides" ) la commande "CONTOUR" permet a la volée de créer des polyligne entre les entitées en cliquant un point mais je dois ensuite les effacer j'ai un lisp qui créer une diagonale d'un trapeze, losange ( polylignes a 4 angles ). l'idée est faire un mix des deux merci A+ Phil
-
bonjour je cherche a créer une diagonale entre des lignes pour un calepinage les lignes forment bien des rectangles fermés ( ce sont des lignes pas des polylignes fermés ) j'ai trouvé un lisp de LEE MAC qui créer une diagonal en fonction des rectangles de polyligne fermés donc pour le faire fonctionner il me faut utiliser avant tout la commande "CONTOUR" en cliquant chaque point. soit deux opérations. avec vous un lisp faisant les deux opérations d'un coup sans passer par le fait de créer les polylignes fermées losanges ou alors que la polylignes fermées soit effacer apres la création de la diagonale 1 cliquer un point central entre 4 lignes 2 trouver les points de croisement des 4 lignes 3 sélectionner les points opposés 4 créer une ligne diagonale entre les points merci Phil
-
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
hello Lili attention le Lisp au dessus fonctionne avec un rectangle donc une polyligne et non plus avec un bloc implanté dans l'espace papier a+, Phil -
hello mais heu tu fais quoi avec AutoCAD et MicroStation ??? tu dessines pas par hazard ??? a+, Phil
-
Hello Tu dessines : - la bissectrice des deux lignes ( rouges ) une ligne perpendiculaire a ta ligne de base au point d'origine - le centre de l'arc est au croisement des deux nouvelles lignes, commençant a ton point d'origine a+, Phil
-
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
HELLO j'ai modifié le Lisp de FRED bon, c'est pas écrit très proprement pour les puristes pour mon rajout mais ca fonctionne et dépanne il faut créer une polyligne rectangulaire du meme format que celui désiré dans l'espace papier dans le calque "T_FENETRE IMAGE" ou supprimer ceci dans le lisp (cons 8 "T_FENETRE IMAGE") il faut aussi connaitre le facteur d’échelle du cadre polyligne dessiné dans l'espace objet par rapport a la fenetre dans l'espace papier de destination si espace papier en millimètre pour un A4V(erticale) : fenetre = 204x267 cadre polyligne = 204x267 facteur =1 si espace papier en millimètre pour un A4V(erticale) : fenetre = 204x267 cadre polyligne = 102x133.5 facteur =0.5 si espace papier en millimètre pour un A4V(erticale) : fenetre = 204x267 cadre polyligne = 408x534 facteur =2 (defun c:cep2_polyligne (/ acdoc b c fen i lays n-p nom-p ong-base ong_dest sel xmin ymax a-p haut larg p1 p2 nom ech lay lock unit) (vl-load-com) ; 4 Millimètres 5 Centimètres 6 Mètres (setq facteurechellepoly (atof (getcfg "APPDATA/FACTEURECHELLEPOLY"))) (initget 4) (setq tmp (getdist (strcat "\nENTRER LE FACTEUR D'ECHELLE DE LA POLYLIGNE CADRE DANS L'ESPACE OBJET PAR RAPPORT A LA FENETRE PAPIER <" (rtos facteurechellepoly 2 8) ">: " ) ) ) (if tmp (setq facteurechellepoly tmp) ) (setcfg "APPDATA/FACTEURECHELLEPOLY" (rtos facteurechellepoly 2 8)) (setq unit (/ 1 facteurechellepoly)) (setq sel (ssget (list '(0 . "LWPOLYLINE") (cons 8 "T_FENETRE IMAGE"))) acdoc (vla-get-activedocument (vlax-get-acad-object)) nom-p (getstring t "\n Nom des Onglets à Créer :") lays (layoutlist) ) (if (> (length lays) 1) (progn (princ "\n Copie configuration traceur d'onglet Existant. \n Plusieurs Présentations détectées.") (while (not ong-base) (princ "\n") (repeat (setq i (length lays)) (princ (strcat (nth (- (length lays) i) lays) " * ")) (setq i (1- i)) ) (setq ong-base (getstring t "\n Présentation d'où la configuration du traceur sera récupérée :")) (if (not (member ong-base lays)) (setq ong-base nil) ) ) ) (setq ong-base (car lays)) ) (setq a-p (vla-item (vla-get-layouts acdoc) ong-base)) (vla-getcustomscale a-p 'n 'm) (vla-put-activelayout acdoc a-p) (vlax-for e (vla-get-paperspace acdoc) (if (equal (vla-get-objectname e) "AcDbViewport") (setq lay (vla-get-layer e) lock (vla-get-displaylocked e) ) ) ) (setq i 0) (repeat (sslength sel) (setq c (vlax-ename->vla-object (ssname sel i))) (progn (vla-getboundingbox c 'xmin 'ymax) (setq n-p (vla-add (vla-get-layouts acdoc) (setq ong_dest (strcat nom-p " - " (rtos (1+ i) 2 0))))) (vla-copyfrom n-p a-p) (vla-put-activelayout acdoc n-p) (setq fen (vla-addpviewport (vla-get-paperspace acdoc) (vlax-3d-point '(0 0 0)) (setq larg (* unit (- (car (vlax-safearray->list ymax)) (car (vlax-safearray->list xmin))))) (setq haut (* unit (- (cadr (vlax-safearray->list ymax)) (cadr (vlax-safearray->list xmin))))) ) ) (vla-put-layer fen lay) (vla-put-displaylocked fen lock) (vla-zoomextents (vlax-get-acad-object)) (vla-display fen :vlax-true) (vla-put-mspace acdoc :vlax-true) (vla-put-activepviewport acdoc fen) (vla-zoomwindow (vlax-get-acad-object) xmin ymax) (vla-put-mspace acdoc :vlax-false) (if (> (- (car (vlax-safearray->list ymax)) (car (vlax-safearray->list xmin))) (- (cadr (vlax-safearray->list ymax)) (cadr (vlax-safearray->list xmin))) ) (vla-put-plotrotation (vla-get-activelayout acdoc) ac90degrees) (vla-put-plotrotation (vla-get-activelayout acdoc) ac0degrees) ) (setq p1 (vlax-make-safearray vlax-vbdouble (cons 0 1)) p2 (vlax-make-safearray vlax-vbdouble (cons 0 1)) ) (vlax-make-variant (vlax-safearray-fill p1 (list (- (/ larg 2)) (- (/ haut 2))))) (vlax-make-variant (vlax-safearray-fill p2 (list (/ larg 2) (/ haut 2)))) (vla-put-plottype (vla-get-activelayout acdoc) acwindow) (vla-setwindowtoplot (vla-get-activelayout acdoc) p1 p2) (setq i (1+ i)) ) ) (setvar "TILEMODE" 1) (princ) ) a+ Phil -
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
hello LILI je vient de retester CEP et CEP2 le fait de changer l'echelle implanté du bloc "IMAGE CADRE" ( en x=1 y=1 z=1) dans le fichier, peut faire que ca ne marche plus TRES BIEN. ex : je voyais dans l'espace papier la fenetre objet,( 4.3x 2.9 ) et en zoomant arriere le cadre papier cent fois plus grand ca devient une équation a X inconnues echelle du bloc echelle du bloc implanté parametre de mise a l'echelle du bloc dynamique( hauteur longueur ) echelle de l'espace objet echelle de l'espace papier sur ton fichier ca marche quand j'ai ca echelle du bloc : en centimetre echelle du bloc implanté : x=0.01 y=0.01 z=0.01 parametre de mise a l'echelle du bloc dynamique( hauteur longueur ) 413x290 ( ca correspond au a de cote en millimettres la meme echelle que l'espace papier désiré ) echelle de l'espace objet : en metre ( réglé dans la demande lisp ) echelle de l'espace papier : en millimetre ( réglé dans la demande lisp ) les lisp CEP (adapté a mes exigences de travail ) CEP2 ( plus générique ) c'est ici que le lisp calcul les dimensions de la fenetre dans l'espace papier (setq fen (vla-addpviewport (vla-get-paperspace acdoc) (vlax-3d-point '(0 0 0)) (setq larg (* unit (/ (- (car (vlax-safearray->list ymax)) (car (vlax-safearray->list xmin))) ech))) (setq haut (* unit (/ (- (cadr (vlax-safearray->list ymax)) (cadr (vlax-safearray->list xmin))) ech))) ) ) et la que je cherche a calculer unit (setq unit (/ (/ echelleespacepapier echelleespaceobjet) 10)) meme la je ne maitrise pas l'échelle d'implantation du bloc "IMAGE CADRE" ;;; Crée un onglet EP par cadre de page sélectionné en EO ;;; par Bred - Un onglet déjà paramétrer doit exister - ;;; Version 1.1 (defun c:cep (/ acdoc b c fen i lays n-p nom-p ;;; ONG-BASE ;;; ONG_DEST sel xmin ymax a-p haut larg p1 p2 nom ech lay lock ;unit ) (vl-load-com) ; 4 Millimètres 5 Centimètres 6 Mètres ;;; (setq typecadre (atof (getcfg "APPDATA/TYPECADRE"))) ;;;(setq unit (cdr ;;; (assoc (getvar "INSUNITS") '((4 . 1) (5 . 10) (6 . 1000))) ;;; ) ;;; ) (setq echelleespaceobjet (atof (getcfg "APPDATA/ECHELLEESPACEOBJET"))) (initget 4) (setq tmp (getdist (strcat "\nENTRER L'ECHELLE DE L'ESPACE OBJET EN METRE <" (rtos echelleespaceobjet 2 8) ">: ") ) ) (if tmp (setq echelleespaceobjet tmp) ) (setcfg "APPDATA/ECHELLEESPACEOBJET" (rtos echelleespaceobjet 2 8)) (setq echelleespacepapier (atof (getcfg "APPDATA/ECHELLEESPACEPAPIER"))) (initget 4) (setq tmp (getdist (strcat "\nENTRER L'ECHELLE DE L'ESPACE PAPIER EN METRE <" (rtos echelleespacepapier 2 8) ">: ") ) ) (if tmp (setq echelleespacepapier tmp) ) (setcfg "APPDATA/ECHELLEESPACEPAPIER" (rtos echelleespacepapier 2 8)) (setq unit (/ (/ echelleespacepapier echelleespaceobjet) 10)) (while (not sel) (setq sel (car (entsel "\nCHOIX DU CADRE SOURCE (Bloc) :"))) (if sel (if (not (equal (vla-get-objectname (setq b (vlax-ename->vla-object sel))) "AcDbBlockReference")) (setq sel nil) ) ) ) ;; (if (= (tblsearch "layer" "T_FENETRE") nil) (command-s "-calque" "n" "T_FENETRE" "co" "7" "T_FENETRE" "") ) (setq cav (getvar "clayer")) (command-s "-calque" "ac" "T_FENETRE" "ch" "T_FENETRE" "") (setq rege (getvar "REGENMODE")) (setvar "REGENMODE" 1) (setvar "cmdecho" 0) (prompt "\nSELECTIONNER LES BLOCS CADRES POUR LA CREATION DES PRESENTATIONS :") ;;; (setq SEL (ssget '((0 . "INSERT"))) (setq sel (ssget (list '(0 . "INSERT") (cons 8 "T_FENETRE IMAGE"))) acdoc (vla-get-activedocument (vlax-get-acad-object)) ;;; NOM-P (getstring t "\n Nom des Onglets à Créer :") lays (layoutlist) ) (setq compteur 0) (setq compteurmax (sslength sel)) (prompt "\n 1 : JPG1188x1680") (prompt "\n 2 : PNG1188x1680") (prompt "\n 3 : JPG570x800") (prompt "\n 4 : A3H RDC 1-50 PL001-") (prompt "\n 5 : 00") (initget "1 2 3 4 5") (setq typecadre (getcfg "APPDATA/TYPECADRE")) (setq tmp (getstring t (strcat "\nSELECTIONNER LE TYPE DE CADRE A RECRER (1 2 3 4 5) < " typecadre " >: "))) (if (/= tmp "") (setq typecadre tmp) ) (if (= typecadre "1") (setq ong-base "001 JPG1188x1680") ) (if (= typecadre "2") (setq ong-base "002 PNG1188x1680") ) (if (= typecadre "3") (setq ong-base "003 JPG570x800") ) (if (= typecadre "4") (setq ong-base "A3H RDC 1-50 PL001-") ) (if (= typecadre "5") (setq ong-base "00") ) (setcfg "APPDATA/TYPECADRE" typecadre) (setq a-p (vla-item (vla-get-layouts acdoc) ong-base)) (vla-getcustomscale a-p 'n 'm) (vla-put-activelayout acdoc a-p) (vlax-for e (vla-get-paperspace acdoc) (if (equal (vla-get-objectname e) "AcDbViewport") (setq lay (vla-get-layer e) lock (vla-get-displaylocked e) ) ) ) (setq i 0) (repeat (sslength sel) (if (vlax-property-available-p (vlax-ename->vla-object (ssname sel i)) 'effectivename) (setq nom vla-get-effectivename) (setq nom vla-get-name) ) (if (equal (nom (setq c (vlax-ename->vla-object (ssname sel i)))) (nom B)) (progn (vla-getboundingbox c 'xmin 'ymax) (setq lstima (getatt c) nblstima (length lstima) ima1 (cdr (nth 0 lstima)) ima2 (cdr (nth 1 lstima)) ima3 (cdr (nth 2 lstima)) ima4 (cdr (nth 3 lstima)) ima5 (cdr (nth 4 lstima)) ima6 (cdr (nth 5 lstima)) ) (setq ong_dest (strcat ;;ONG-BASE " " ima1 ) ) (if (/= ima2 "") (setq ong_dest (strcat ong_dest " " ima2)) ) (if (/= ima3 "") (setq ong_dest (strcat ong_dest " " ima3)) ) (if (/= ima4 "") (setq ong_dest (strcat ong_dest " " ima4)) ) (if (/= ima5 "") (setq ong_dest (strcat ong_dest " " ima5)) ) (if (/= ima6 "") (setq ong_dest (strcat ong_dest " " ima6)) ) (setq n-p (vla-add (vla-get-layouts acdoc) ong_dest)) (setq ech (vla-get-yscalefactor c)) (vla-copyfrom n-p a-p) (vla-put-activelayout acdoc n-p) (setq fen (vla-addpviewport (vla-get-paperspace acdoc) (vlax-3d-point '(0 0 0)) (setq larg (* unit (/ (- (car (vlax-safearray->list ymax)) (car (vlax-safearray->list xmin))) ech))) (setq haut (* unit (/ (- (cadr (vlax-safearray->list ymax)) (cadr (vlax-safearray->list xmin))) ech))) ) ) (vla-put-layer fen lay) (vla-put-displaylocked fen lock) (vla-zoomextents (vlax-get-acad-object)) (vla-display fen :vlax-true) (vla-put-mspace acdoc :vlax-true) (vla-put-activepviewport acdoc fen) (vla-zoomwindow (vlax-get-acad-object) xmin ymax) (vla-put-mspace acdoc :vlax-false) (if (> (- (car (vlax-safearray->list ymax)) (car (vlax-safearray->list xmin))) (- (cadr (vlax-safearray->list ymax)) (cadr (vlax-safearray->list xmin))) ) (vla-put-plotrotation (vla-get-activelayout acdoc) ac90degrees) (vla-put-plotrotation (vla-get-activelayout acdoc) ac0degrees) ) (setq p1 (vlax-make-safearray vlax-vbdouble (cons 0 1)) p2 (vlax-make-safearray vlax-vbdouble (cons 0 1)) ) (vlax-make-variant (vlax-safearray-fill p1 (list (- (/ larg 2)) (- (/ haut 2))))) (vlax-make-variant (vlax-safearray-fill p2 (list (/ larg 2) (/ haut 2)))) (vla-put-plottype (vla-get-activelayout acdoc) acwindow) (vla-setwindowtoplot (vla-get-activelayout acdoc) p1 p2) (setq i (1+ i)) (setq compteur (1+ compteur)) (command-s "espacep") (command-s "zoom" "et") (prompt (strcat "\nLE PROGRAMME A TRAITE : " (rtos compteur 2 0) " OPERATION(S) SUR : " (rtos compteurmax 2 0) ) ) (princ) ) ) ) (setvar "TILEMODE" 1) (setvar "REGENMODE" rege) (setvar "cmdecho" 1) (setvar "clayer" cav) (prompt "\n") (princ) ) ;;; Crée un onglet EP par cadre de page sélectionné en EO ;;; par Bred - Un onglet déjà paramétrer doit exister - ;;; Version 1.1 (defun c:cep2 (/ acdoc b c fen i lays n-p nom-p ong-base ong_dest sel xmin ymax a-p haut larg p1 p2 nom ech lay lock unit) (vl-load-com) ; 4 Millimètres 5 Centimètres 6 Mètres ;;; (setq unit (cdr ;;; (assoc (getvar "INSUNITS") '((4 . 1) (5 . 10) (6 . 1000))) ;;; ) ;;; ) (setq echelleespaceobjet (atof (getcfg "APPDATA/ECHELLEESPACEOBJET"))) (initget 4) (setq tmp (getdist (strcat "\nENTRER L'ECHELLE DE L'ESPACE OBJET EN METRE <" (rtos echelleespaceobjet 2 8) ">: ") ) ) (if tmp (setq echelleespaceobjet tmp) ) (setcfg "APPDATA/ECHELLEESPACEOBJET" (rtos echelleespaceobjet 2 8)) (setq echelleespacepapier (atof (getcfg "APPDATA/ECHELLEESPACEPAPIER"))) (initget 4) (setq tmp (getdist (strcat "\nENTRER L'ECHELLE DE L'ESPACE PAPIER EN METRE <" (rtos echelleespacepapier 2 8) ">: ") ) ) (if tmp (setq echelleespacepapier tmp) ) (setcfg "APPDATA/ECHELLEESPACEPAPIER" (rtos echelleespacepapier 2 8)) (setq unit (/ (/ echelleespacepapier echelleespaceobjet) 10)) (while (not sel) (setq sel (car (entsel "\n Choix du cadre (Bloc) :"))) (if sel (if (not (equal (vla-get-objectname (setq b (vlax-ename->vla-object sel))) "AcDbBlockReference")) (setq sel nil) ) ) ) (setq sel (ssget '((0 . "INSERT"))) acdoc (vla-get-activedocument (vlax-get-acad-object)) nom-p (getstring t "\n Nom des Onglets à Créer :") lays (layoutlist) ) (if (> (length lays) 1) (progn (princ "\n Copie configuration traceur d'onglet Existant. \n Plusieurs Présentations détectées.") (while (not ong-base) (princ "\n") (repeat (setq i (length lays)) (princ (strcat (nth (- (length lays) i) lays) " * ")) (setq i (1- i)) ) (setq ong-base (getstring t "\n Présentation d'où la configuration du traceur sera récupérée :")) (if (not (member ong-base lays)) (setq ong-base nil) ) ) ) (setq ong-base (car lays)) ) (setq a-p (vla-item (vla-get-layouts acdoc) ong-base)) (vla-getcustomscale a-p 'n 'm) (vla-put-activelayout acdoc a-p) (vlax-for e (vla-get-paperspace acdoc) (if (equal (vla-get-objectname e) "AcDbViewport") (setq lay (vla-get-layer e) lock (vla-get-displaylocked e) ) ) ) (setq i 0) (repeat (sslength sel) (if (vlax-property-available-p (vlax-ename->vla-object (ssname sel i)) 'effectivename) (setq nom vla-get-effectivename) (setq nom vla-get-name) ) (if (equal (nom (setq c (vlax-ename->vla-object (ssname sel i)))) (nom B)) (progn (vla-getboundingbox c 'xmin 'ymax) (setq n-p (vla-add (vla-get-layouts acdoc) (setq ong_dest (strcat nom-p " - " (rtos (1+ i) 2 0))))) (setq ech (vla-get-yscalefactor c)) (vla-copyfrom n-p a-p) (vla-put-activelayout acdoc n-p) (setq fen (vla-addpviewport (vla-get-paperspace acdoc) (vlax-3d-point '(0 0 0)) (setq larg (* unit (/ (- (car (vlax-safearray->list ymax)) (car (vlax-safearray->list xmin))) ech))) (setq haut (* unit (/ (- (cadr (vlax-safearray->list ymax)) (cadr (vlax-safearray->list xmin))) ech))) ) ) (vla-put-layer fen lay) (vla-put-displaylocked fen lock) (vla-zoomextents (vlax-get-acad-object)) (vla-display fen :vlax-true) (vla-put-mspace acdoc :vlax-true) (vla-put-activepviewport acdoc fen) (vla-zoomwindow (vlax-get-acad-object) xmin ymax) (vla-put-mspace acdoc :vlax-false) (if (> (- (car (vlax-safearray->list ymax)) (car (vlax-safearray->list xmin))) (- (cadr (vlax-safearray->list ymax)) (cadr (vlax-safearray->list xmin))) ) (vla-put-plotrotation (vla-get-activelayout acdoc) ac90degrees) (vla-put-plotrotation (vla-get-activelayout acdoc) ac0degrees) ) (setq p1 (vlax-make-safearray vlax-vbdouble (cons 0 1)) p2 (vlax-make-safearray vlax-vbdouble (cons 0 1)) ) (vlax-make-variant (vlax-safearray-fill p1 (list (- (/ larg 2)) (- (/ haut 2))))) (vlax-make-variant (vlax-safearray-fill p2 (list (/ larg 2) (/ haut 2)))) (vla-put-plottype (vla-get-activelayout acdoc) acwindow) (vla-setwindowtoplot (vla-get-activelayout acdoc) p1 p2) (setq i (1+ i)) ) ) ) (setvar "TILEMODE" 1) (princ) ) ;; GETATT ;; Retourne une liste d'association des attribut du bloc ;; ;; Argument ;; bl : la référence de bloc (ename ou vla-object) ;; ;; Retour ;; une liste d'association du type : ((etiquette . valeur) ...) (defun getatt (bl) (vl-load-com) (or (= (type bl) 'vla-object) (setq bl (vlax-ename->vla-object bl))) (if (and (= (vla-get-objectname bl) "AcDbBlockReference") (= (vla-get-hasattributes bl) :vlax-true)) (mapcar (function (lambda (x) (cons (vla-get-tagstring x) (vla-get-textstring x)))) (vlax-invoke bl 'getattributes) ) ) ) ;; PUTATT ;; Donne les valeurs de la liste aux attributs du bloc ;; ;; Arguments ;; bl : la référence de bloc (ename ou vla-object) ;; lst : une liste d'association du type : ((etiquette . valeur) ...) ;; ;; Retour ;; une liste d'association du type des attributs traités (defun putatt (bl lst / att ret) (vl-load-com) (or (= (type bl) 'vla-object) (setq bl (vlax-ename->vla-object bl))) (if (and (= (vla-get-objectname bl) "AcDbBlockReference") (= (vla-get-hasattributes bl) :vlax-true)) (mapcar (function (lambda (x) (if (setq att (assoc (vla-get-tagstring x) lst)) (progn (vla-put-textstring x (cdr att)) (setq ret (cons att ret))) ) ) ) (vlax-invoke bl 'getattributes) ) ) ret ) les lisp REGULAR DRAW ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; redessine tout correctement avec precision, coordonnees suivant le SCG ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:regular_draw_scg (/ js n_count prec ent dxf_ent dxf_lst) (setq js (ssget '((0 . "FACE3D,ARC,ATTDEF,ATTRIB,CIRCLE,ELLIPSE,INSERT,LINE,POLYLINE,LWPOLYLINE,*TEXT,POINT,SHAPE,SOLID,TRACE,DIMENSION" ) ) ) n_count -1 ) (cond (js (initget 6) (setq redprecis (atof (getcfg "APPDATA/REDPRECIS"))) (setq prec1 (getreal (strcat "\nFACTEUR D'ARRONDI A APPLIQUER AU POINT DE DEFINITION DES OBJETS, RAYON ET HAUTEUR DE TEXTE <" (rtos redprecis 2 8) "> :? " ) ) ) (if (/= prec1 nil) (setq prec prec1) (setq prec redprecis) ) (setcfg "APPDATA/REDPRECIS" (rtos prec 2 8)) (setq prec (/ 1 prec)) (setvar "cmdecho" 0) (command-s "_.undo" "_group") (while (setq ent (ssname js (setq n_count (1+ n_count)))) (setq dxf_ent (entget ent)) (cond ((eq (cdr (assoc 0 dxf_ent)) "LWPOLYLINE") (setq dxf_lst (cdr dxf_ent) dxf_ent (list (car dxf_ent)) ) (while (cdr dxf_lst) (if (eq 10 (caar dxf_lst)) (setq dxf_ent (cons (cons 10 (mapcar '(lambda (x) (round_number x prec)) (cdar dxf_lst))) dxf_ent)) (setq dxf_ent (cons (car dxf_lst) dxf_ent)) ) (setq dxf_lst (cdr dxf_lst)) ) (setq dxf_ent (reverse dxf_ent)) ) ((eq (cdr (assoc 0 dxf_ent)) "POLYLINE") (while (eq (cdr (assoc 0 (setq dxf_ent (entget (entnext (cdar dxf_ent)))))) "VERTEX") (setq dxf_ent (subst (cons 10 (mapcar '(lambda (x) (round_number x prec)) (cdr (assoc 10 dxf_ent)))) (assoc 10 dxf_ent) dxf_ent ) ) (entmod dxf_ent) ) ) (t (foreach n dxf_ent (if (member (car n) '(10 11 12 13 14 40)) (if (listp (cdr n)) (setq dxf_ent (subst (cons (car n) (mapcar '(lambda (x) (round_number x prec)) (cdr n))) (assoc (car n) dxf_ent) dxf_ent ) ) (setq dxf_ent (subst (cons (car n) (round_number (cdr n) prec)) (assoc (car n) dxf_ent) dxf_ent)) ) ) ) ) ) (entmod dxf_ent) (entupd ent) ) (command-s "_.undo" "_end") (setvar "cmdecho" 1) (princ (strcat "\n" (itoa n_count) " objet(s) transformé(s).")) ) (t (princ "\Aucun objet valide trouvé.")) ) (prin1) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; redessine tout correctement avec precision, coordonnees suivant le SCu ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:regular_draw_scu (/ js n_count prec ent dxf_ent dxf_lst) (setq js (ssget '((0 . "FACE3D,ARC,ATTDEF,ATTRIB,CIRCLE,ELLIPSE,INSERT,LINE,POLYLINE,LWPOLYLINE,*TEXT,POINT,SHAPE,SOLID,TRACE,DIMENSION" ) ) ) n_count -1 ) (cond (js (initget 6) (setq redprecis (atof (getcfg "APPDATA/REDPRECIS"))) (setq prec1 (getreal (strcat "\nFACTEUR D'ARRONDI A APPLIQUER AU POINT DE DEFINITION DES OBJETS, RAYON ET HAUTEUR DE TEXTE <" (rtos redprecis 2 8) "> :? " ) ) ) (if (/= prec1 nil) (setq prec prec1) (setq prec redprecis) ) (setcfg "APPDATA/REDPRECIS" (rtos prec 2 8)) (setq prec (/ 1 prec)) (setvar "cmdecho" 0) (command-s "_.undo" "_group") (while (setq ent (ssname js (setq n_count (1+ n_count)))) (setq dxf_ent (entget ent)) (cond ((eq (cdr (assoc 0 dxf_ent)) "LWPOLYLINE") (setq dxf_lst (cdr dxf_ent) dxf_ent (list (car dxf_ent)) ) (while (cdr dxf_lst) (if (eq 10 (caar dxf_lst)) (setq dxf_ent (cons (cons 10 (trans (mapcar '(lambda (x) (round_number x prec)) (trans (cdar dxf_lst) 0 1)) 1 0)) dxf_ent ) ) (setq dxf_ent (cons (car dxf_lst) dxf_ent)) ) (setq dxf_lst (cdr dxf_lst)) ) (setq dxf_ent (reverse dxf_ent)) ) ((eq (cdr (assoc 0 dxf_ent)) "POLYLINE") (while (eq (cdr (assoc 0 (setq dxf_ent (entget (entnext (cdar dxf_ent)))))) "VERTEX") (setq dxf_ent (subst (cons 10 (trans (mapcar '(lambda (x) (round_number x prec)) (trans (cdr (assoc 10 dxf_ent)) 0 1)) 1 0) ) (assoc 10 dxf_ent) dxf_ent ) ) (entmod dxf_ent) ) ) (t (foreach n dxf_ent (if (member (car n) '(10 11 12 13 14 40)) (if (listp (cdr n)) (setq dxf_ent (subst (cons (car n) (trans (mapcar '(lambda (x) (round_number x prec)) (trans (cdr n) 0 1)) 1 0)) (assoc (car n) dxf_ent) dxf_ent ) ) (setq dxf_ent (subst (cons (car n) ;;(trans (round_number ;;(trans (cdr n) ;; 0 1) prec ) ;;1 0) ) (assoc (car n) dxf_ent) dxf_ent ) ) ) ) ) ) ) (entmod dxf_ent) (entupd ent) ) (command-s "_.undo" "_end") (setvar "cmdecho" 1) (princ (strcat "\n" (itoa n_count) " objet(s) transformé(s).")) ) (t (princ "\Aucun objet valide trouvé.")) ) (prin1) ) (defun round_number (xr n /) (* (fix (atof (rtos (* xr n) 2 0))) (/ 1.0 n))) a+ Phil -
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
hello LILI deja il est normal que le bloc qui est implanté dans l'onglet papier "00" n'arrive pas dans les nouveaux onglet papier en utilisant le lisp CEP le lisp "CEP" créer un onglet avec une nouvelle fenetre qui regarde l'espace papier en s'ajustant pile poil au bloc implanté dans l'espace papier quand tu dis ca ne marche pas ? qu'est ce qui ne marche pas en fait ? dans MON bloc "cadre image" : les parametres "hauteur de cadre" et "largeur de cadre" font varié le cadre bleu et et l'echelle des attributs dans TON bloc "cadre image" issu de MON bloc, tu as rajouté en bas a droite "PLAN : N°" sur lequel aucun parametre de mise a l'échelle n'intervient ! ( c'est ca que tu dis qui ne marche pas ?) pour ce qui est du bloc implanté dans ton onglet "00" je l'ai recopie avec le lisp "CPP" ( copier des entitee d'un onglet sur d'autres onglets du fichier sans les ouvrir ) apres coup petite remarque de puriste : ton bloc dans "00" meme dessiné en millimettre a des coordonnées avec des chiffres apres la virgule lisp : "regular draw" permet de rectifier ca j'avais du le faire dans le fichier que je t'avais renvoyé a+ Phil -
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
Hello LILI je viens de passer "CEP" sur ton fichier et ca marche et "CEP2" ca marche aussi les derniers lisp que j'ai postés hier tu as modifié les attributs OK quand tu parles des "etats de visibilité" tu parle de quoi la ? car MON bloc ne comporte pas de parametre de "visibilité" tu n'as rien changé dans le LISP par hazard ? le fait d'etre en grades au lieux de dégrés ou d'etre en "horaire" plutot quand "trigonométrique", d'avoir un angle de base de "300g" au lieux de "0g" n'influence pas le LISP a+ Phil -
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
hello LILI effectivement il manquait ca ( merci Gil ) ;; GETATT ;; Retourne une liste d'association des attribut du bloc ;; ;; Argument ;; bl : la référence de bloc (ename ou vla-object) ;; ;; Retour ;; une liste d'association du type : ((etiquette . valeur) ...) (defun getatt (bl) (vl-load-com) (or (= (type bl) 'vla-object) (setq bl (vlax-ename->vla-object bl))) (if (and (= (vla-get-objectname bl) "AcDbBlockReference") (= (vla-get-hasattributes bl) :vlax-true)) (mapcar (function (lambda (x) (cons (vla-get-tagstring x) (vla-get-textstring x)))) (vlax-invoke bl 'getattributes) ) ) ) ;; PUTATT ;; Donne les valeurs de la liste aux attributs du bloc ;; ;; Arguments ;; bl : la référence de bloc (ename ou vla-object) ;; lst : une liste d'association du type : ((etiquette . valeur) ...) ;; ;; Retour ;; une liste d'association du type des attributs traités (defun putatt (bl lst / att ret) (vl-load-com) (or (= (type bl) 'vla-object) (setq bl (vlax-ename->vla-object bl))) (if (and (= (vla-get-objectname bl) "AcDbBlockReference") (= (vla-get-hasattributes bl) :vlax-true)) (mapcar (function (lambda (x) (if (setq att (assoc (vla-get-tagstring x) lst)) (progn (vla-put-textstring x (cdr att)) (setq ret (cons att ret))) ) ) ) (vlax-invoke bl 'getattributes) ) ) ret ) a+ Phil -
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
hello LILI on doit pouvoir aller jusqu'a 256 onglet de présentations par fichiers je crois tu implantes autant de fois que tu veux le bloc "CADRE IMAGE" en faisant attention que la concatenation des textes d'attributs soit tous differents sinon ca fera deux onglets avec le meme nom et le lisp s’arrêtera a+, phil -
HELLO pour la carte pour REVIT ( surtout ) et AUTOCAD ( de fait ) pourquoi pas une NVIDIA QUADRO RTX 6000 ou NVIDIA QUADRO RTX A6000 ? OUPSSSSSSSSSSSSSSSSSSSS j'avais pas trouvé le prix, c'est pas la meme chose il y en a en stock surement plus que les RTX 3060 Ti Phil
-
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
hello LILI voici le nouveau lisp CEP2 de BRED CEP de BRED que j'ai modifie ( utilise les attributs de mon bloc pour nommer les présentation ) j'ai utilisé les deux sur ton fichier pour créer les onglets de présentation et copier avec "CPP" ton cartouche sur les onglets le scu de l'onglet "00" est en bas a gauche le scu des onglets créer avec CEP et CEP2 est au centre du cadre je te renvoie ton fichier en version 2018 ZIPPER attention j'ai changé le sens horaire et l'angle de base dans les parametre dessin il te faut utiliser mon bloc "CADRE IMAGE" qui est en cm j'ai rajouter dans le lisp les données d'entrée d'échelle de l'espace PAPIER et OBJET la difficulte est de jouer avec : l'echelle de l'espace OBJET l'echelle de l'espace PAPIER l'echelle du bloc implanté CADRE IMAGE l'echelle dans laquelle le bloc a été dessinner si tu changes ces parametres le résultat sera différent je pense TEST CEP.zip -
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
hello LILI une précision : implanter le bloc "CADRE IMAGE" dans le calque "T_FENETRE IMAGE" sinon ils ne seront jamais sélectionner par (setq sel (ssget (list '(0 . "INSERT") (cons 8 "T_FENETRE IMAGE"))) Phil -
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
HELLO LILI Voici le bloc que j'implante sur mon fichier *.dwg pour utilisé "CEP" RENOMMER LE BLOC "CADRE IMAGE.TXT3 en "CADRE IMAGE.DWG" en renseignant les attributs ca permet de nommé les présentations donc il faut que les series des 6 attributs soient toutes differentes sinon le lisp s'arrete mettre les dimensions du cadre adapté a la présentation voulu présentation A3 en millimettres LARGEUR CADRE = 420 HAUTEUR CADRE = 297 dans mon lisp "CEP" il faut que tu renseignes au moins un nom de présentation présente sur ton fichier à a modifier suivant ton nom désir (prompt "\n 3 : JPG570x800") (if (= typecadre "3") (setq ong-base "JPG570x800") ) sachant que je bosse en cm et que mes présentation sont en mm, il peut y avoir des différences d'échelle chez toi a adapter a+ Phil CADRE IMAGE.txt -
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
HELLO lili je reteste les lisp pour comprendre comment ils marchent mon souci avec "CEP" est que je bosse en Cm et que mes présentations sont MM est ce que tu dois faire des presentations qui sont toutes pareilles, style que des A3 ou A4 ? phil -
Presentations multiples : Automatisation
PHILPHIL a répondu à un(e) sujet de ACAD666 dans Pour aller plus loin en LISP
hello LILI voici la version que j'ai cep1 de BRED cep2 de BRED cep de BRED modifie a ma sauce code obsolète effacé a+ PHil -
hello tous il va etre temps au bout de 7 ans de changer de materiel en vous lisant j'en conclus que : pour AUTOCAD c'est le processeur qui prime : un rapide I7 ou I9 à haute fréquence ( j'ai un xeon à 3.50 Ghz en ce moment ) pour REVIT c'est la carte graphique qui prime : une carte pro ou une carte de gamer ? la memoire si possible : 32 Mo est ce que je me trompe deja pour commencer ? merci, Phil
-
hello merci phil
-
bonjour le help d 'autocad dit ca The following example demonstrates how to change the first vertex of the Vertices collection. (command "._pline" "0,0" "3,3" "5,2" "") nil (setq e3 (entlast)) <Entity name: 10e2e4da0> (setpropertyvalue e3 "Vertices" 0 "EndWidth" 1.0) nil donc j'ai ecrit ca : (setq thelast1 (cdr (assoc -1 (entget (entlast))))) ;;; (setpropertyvalue thelast1 ;;; ;;; "AcDbDynBlockPropertyLARGEUR COTE" ;;; largeurprofil1 ;;; ) ;;; (setpropertyvalue thelast1 ;;; ;;; "AcDbDynBlockPropertyEPAISSEUR" ;;; epaisseurprofil1 ;;; ) ;;; (setpropertyvalue thelast1 ;;; ;;; "AcDbDynBlockPropertyHAUTEUR" ;;; hauteurprofil1 ;;; ) (setpropertyvalue thelast1 "AcDbDynBlockPropertyLARGEUR COTE" largeurprofil1 "AcDbDynBlockPropertyEPAISSEUR" epaisseurprofil1 "AcDbDynBlockPropertyHAUTEUR" hauteurprofil1) les 3 premiers "setpropertyvalue" marchaient pensant que ca allait plus vite j'ai testé : (setpropertyvalue thelast1 "AcDbDynBlockPropertyLARGEUR COTE" largeurprofil1 "AcDbDynBlockPropertyEPAISSEUR" epaisseurprofil1 "AcDbDynBlockPropertyHAUTEUR" hauteurprofil1) qui ne fonctionne pas savez vous pourquoi ? merci Phil
-
HELLO est ce que vous avez testé ? ou utilisé ceci : et si oui, qu'en pensez vous? https://apps.autodesk.com/ACD/fr/Detail/Index?id=333434597538088626&appLang=en&os=Win32_64 a+ Phil
