-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
208
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
Salut, Pour manipuler aisément les échelles de types de lignes, je m'étais fait une petite boite de dialogue. Fichier .dcl à enregistrer sous "echtlign.dcl" dans un dossier du chemin de recherche : //Boite de dialogue "Echelle de type de ligne" //02/08/04 - Gilles Chanteau - echtl:dialog{ label="Echelle de type de ligne"; initial_focus="factech"; :edit_box{ label="Facteur d'échelle global:"; key="factech"; allow_accept=true; edit_width=10; } :edit_box{ label="Echelle de l'objet courant:"; key="echcour"; allow_accept=true; edit_width=10; } :spacer{width=1;} :boxed_radio_column{ label="Présentation (espace papier)"; :radio_button{ label="Unités spécifiques de l'espace papier"; key="echpap"; } :radio_button{ label="Unités de l'espace de création de l'objet"; key="echobj"; } } :spacer{width=1;} ok_cancel; :spacer{width=1;} } Et le LISP qui la commande (taper echtl pour lancer la commande) : ;;; Boite de dialogue "Echelle de type de ligne" ;;; 02/08/04 - Gilles Chanteau - ;;; C:ECHTL commande la boite de dilaogue "echtl" (echtlign.dcl). ;;; Définit les variables système LTCSCALE, CELTSCALE et PSLTSCALE. (defun c:echtl (/ dcl_id) (setq dcl_id (load_dialog "ECHL_LIGN.DCL")) (if (not (new_dialog "echtl" dcl_id)) (exit) ) (set_tile "factech" (rtos (getvar "ltscale"))) (set_tile "echcour" (rtos (getvar "celtscale"))) (if (= (getvar "psltscale") 1) (set_tile "echpap" "1") (set_tile "echobj" "1") ) (action_tile "echpap" "(setvar \"psltscale\" 1)") (action_tile "echobj" "(setvar \"psltscale\" 0)") (action_tile "accept" (strcat "(progn" "(setvar \"ltscale\" (atof (get_tile \"factech\")))" "(setvar \"celtscale\" (atof (get_tile \"echcour\")))" "(command \"_regenall\")(done_dialog))" ) ) (start_dialog) (unload_dialog dcl_id) (princ) )
-
Merci Patrick_35 :)
-
Salut, On dirait que Bonuscad a eu un problème... Pour sélectionner les entités sur un point il suffit de faire : (ssget '([i]x y[/i]))
-
Salut, Effectivement les filtres de sélection supportent l'utilisation des wild-cards. Quelques exemples que je garde comme aide mémoire : ;;; Exemple de filtres de sélection (utilisation de "wild-card") ;;; Grippe toutes les entités dont le nom fini par LINE (LINE, POLYLINE, SPLINE, LWPOLYLINE) ;;; sauf les droites (XLINE) et les multilignes (MLINE) ((lambda (/ ss) (setq ss (ssget "_X" '((-4 . " (0 . "*LINE") (0 . "~X*") (0 . "~M*") (-4 . "and>") ) ) ) (sssetfirst nil ss) ) ) ;;; Grippe tous les cercles sur les calques 1 à 3 ((lambda (/ ss) (setq ss (ssget "_X" '((0 . "CIRCLE") (8 . "Calque[1-3]")))) (sssetfirst nil ss) ) ) ;;; Grippe tous les objets qui ne sont pas sur des calques gelés ((lambda (/ ss) (setq ss (ssget "_A")) (sssetfirst nil ss) ) ) ;;; Grippe tous les objets construits dans un SCU non parallèle au SCG ((lambda (/ ss) (setq ss (ssget "_X" '((-4 . "!=") (210 0.0 0.0 1.0)))) (sssetfirst nil ss) ) ) ;;; Grippe tous les cercles de rayons supérieur à 30 et inférieur ou égal à 40 ou égal à 50 ((lambda (/ ss) (setq ss (ssget "_X" '((0 . "CIRCLE") (-4 . " (-4 . " (-4 . ">") (40 . 30.0) (-4 . " (40 . 40.0) (-4 . "and>") (-4 . "=") (40 . 50.0) (-4 . "or>") ) ) ) (sssetfirst nil ss) ) ) NOTA : Supprimer les espaces après les
-
WiPEOUT code DXF pas cohérent le 14!!!
(gile) a répondu à un(e) sujet de BIM G CO dans Pour aller plus loin en LISP
J'ai modifié les lignes de code ci-dessus. Çà fonctionne maintenant quelque soit le SCU (en 3D) et quelque soit l'élévation par rapport au plan de ce SCU La méthode n'est pas trés élégante, et ne renvoie pas forcément les mêmes coordonnées qu'un wipeout crée à partir d'une polyligne avec les mêmes points. -
Comme l'a dit Christian (Rebcao) dans son message, tu n'es pas obligé de mettre tes hachures dans l'espace papier, tu peux les mettre dans l'espace objet des fenêtres de présentation.
-
Cette option n'est disponible que quand on est dans une présentation (sur une version pleine, en tout cas)
-
Salut, Je crains que si toutes les faces de tes solides recevaient la lumière de la même façon, on ne distinguerait plus que la silhouette des solides. Par exemple cet escalier en béton vu en perspective à gauche, en vue de dessus à droite, on ne distingue plus les marches parce qu'elle reçoivent uniformément la lumière : http://img479.imageshack.us/img479/3586/fdaocolimaon5kv.jpg Tu peux quand même régler la luminosité des ombrages avec la variable SHADEDIF (entre 0 et 100)
-
Salut, Pour ta première question, peut-être une réponse en LISP ici, sans doute à adapter à tes besoins.
-
WiPEOUT code DXF pas cohérent le 14!!!
(gile) a répondu à un(e) sujet de BIM G CO dans Pour aller plus loin en LISP
J'ai un peu dégrossi l'histoire, pour traduire une liste de points en coordonnées pour les codes dxf de WIPEOUT. Çà semble marcher, mais ce n'est qu'une ébauche. Soit pt_lst une liste de points (les sommets d'un polygone) définis dans le SCU. Définition de la direction d'extrusion du SCU courant (setq ucszdir (trans '(0 0 1) 1 0 T)) Calcul du point d'insertion (code 10) (setq ins (list (apply 'min (mapcar 'car pt_lst)) (apply 'min (mapcar 'cadr pt_lst)) (caddr (car pt_lst)) ) ) Calcul du côté du pixel (setq pix (max (- (apply 'max (mapcar 'car pt_lst)) (car ins)) (- (apply 'max (mapcar 'cadr pt_lst)) (cadr ins)) ) ) Calcul du centre du pixel (setq cen (mapcar '+ ins (list (/ pix 2) (/ pix 2) (caddr ins)))) Traduction des cordonnées des points de pt_lst en dxf14 (setq dxf14_lst (mapcar '(lambda (pt) (mapcar '(lambda (x) (/ x pix)) (mapcar '- pt cen)) ) pt_lst ) dxf14_lst (mapcar '(lambda (pt) (mapcar '* pt '(1 -1 1))) dxf14_lst) ) Traduction du point d'insertion dans le SCG (setq dxf10 (trans ins 1 0)) Définition des vecteurs en u et v du pixel (setq dxf11 (list pix 0.0 0.0) dxf12 (list 0.0 pix 0.0) ) (foreach v '(dxf11 dxf12) (set v (trans (polar '(0 0) (+ (angle '(0 0) (eval v)) (angle '(0 0) (trans (getvar "UCSXDIR") 0 ucszdir)) ) pix ) ucszdir 0 ) ) ) Création d'une liste de paires pointées pour les codes dxf 14 (setq dxf14_lst (mapcar '(lambda (pt) (cons 14 pt)) dxf14_lst) dxf14_lst (append dxf14_lst (list (car dxf14_lst))) ) Création du wipeout (entmake (append (list '(0 . "WIPEOUT") '(100 . "AcDbEntity") '(100 . "AcDbWipeout") (cons 10 dxf10) (cons 11 dxf11) (cons 12 dxf12) '(13 1.0 1.0 0.0) '(70 . 7) '(280 . 1) '(281 . 50) '(282 . 50) '(283 . 0) '(71 . 2) '(91 . 5) ) dxf14_lst ) ) [Edité le 15/12/2005 par (gile)] -
un grand chantier pour dégraisser le Mammouth...suite...
(gile) a répondu à un(e) sujet de rebcao dans CADxp, vos souhaits
Encore une fois bravo, Rebcao (peut-être préfère-tu Christian ?) Un super boulot, très pratique et bigrement utile !!! -
Je suis très touché par tous ces remerciements, surtout venant de vous qui m'avez tellement appris de choses. Comme dit au début, j'espère que chacun ajoutera à ce post ses trouvailles et astuces au gré des difficultés rencontrées dans ce domaine.
-
WiPEOUT code DXF pas cohérent le 14!!!
(gile) a répondu à un(e) sujet de BIM G CO dans Pour aller plus loin en LISP
Salut Maximilien, Ce qu'il me semble avoir compris : Les codes 11 et 13 déterminent, respectivement en X et enY, la taille du carré (pixel) Le code 13 dit qu'un seul pixel en X comme en Y inclue le polygone. Dans ton premier exemple le pixel fait 0.46 x 0.46 unités et son coin supérieur gauche est confondu avec le point de départ du wipeout (code 10) Les codes 14 délimitent le cadre du wipeout à l'intérieur de ce carré, avec pour origine le centre du carré et pour unité le coté du carré : d'où (-0.5 0.5 0.0) le coin supérieur gauche, (0.5 0.5 0.0) coin superieur droit, (0.5 0.33913 0.0) coin inférieur droit ... Illustration : en blanc, le wipeout coté en unité de dessin, en rouge le pixel coté en pixel. http://img17.imageshack.us/img17/9770/sanstitre3ci.jpg -
Tant que j'y suis, je livre aussi mes découvertes sur la codification dxf des ellipses et arcs elliptiques. Le centre (code 10) est défini dans le SCG, l'extrémité du grand axe (code 11) aussi, mais par rapport au centre ! Le rapport entre les axes (code 40) doit être inférieur à zéro. Le départ et la fin d'un arcs (codes 41 et 42) ne sont pas simplement des angles mais des "paramètres" répondant à l'équation vectorielle : p(u) = c + a* cos(u) + b* sin(u) où c représente le centre de l'ellipse; a et b représentent respectivement le grand axe et le petit axe. Pour l'exemple, soient cen et ext deux points définis dans le SCU, respectivement le centre et l'extrémité du premier axe, et dist le rapport avec l'autre axe. Soit, aussi la variable ucszdir définie comme ci-dessus. Comme dist doit être inférieur à zéro, un test et, si nécessaire, une redéfinition de l'extrémité s'imposent : (if ( (setq ext (polar cen (+ (/ pi 2) (angle cen ext)) (* dist (distance cen ext)) ) dist (/ 1 dist) ) ) Traduction des points dans le SCG : (foreach pt '(cen ext) (set pt (trans (eval pt) 1 0)) ) Redéfinition de ext, qui doit être défini par rapport au centre de l'ellipse : (setq ext (mapcar '- ext cen)) Création de l'ellipse avec entmake : (entmake (list '(0 . "ELLIPSE") '(100 . "AcDbEntity") '(100 . "AcDbEllipse") (cons 10 cen) (cons 11 ext) (cons 40 dist) (cons 41 0.0) (cons 42 (* 2 pi)) (cons 210 ucszdir) ) ) Pour un arc elliptique, il faudra transformer les angles ang1 et ang2 acquis avec (getangle) en "paramètres" de l'ellipse : (foreach ang '(ang1 ang2) (set ang (+ (eval ang) (angle '(0 0) (trans (getvar "UCSXDIR") 0 ucszdir)) (- (angle '(0 0) (trans ext 0 ucszdir))) ) ) (set ang (atan (sin (eval ang)) (* (cos (eval ang)) dist))) ) Et ensuite : (entmake (list '(0 . "ELLIPSE") '(100 . "AcDbEntity") '(100 . "AcDbEllipse") (cons 10 cen) (cons 11 ext) (cons 40 dist) (cons 41 ang1) (cons 42 ang2) (cons 210 (extr_dir)) ) )
-
Salut Tramber, et merci :red: Pour Vla-put-normal : (vla-put-Normal objt (vlax-3d-point ucszdir) ) avec ucszdir comme défini ci-dessus, tout simplement.
-
Comme j'ai pu lire çà et là, je ne suis pas le seul à avoir quelques difficultés avec les "traductions" de coordonnées dans les codes dxf pour les entités construites (ou à construire) dans des SCU non parallèles au SCG. Je propose donc de rassembler dans ce fil les trouvailles et astuces de chacun. Dans les exemples suivants nom_ent est un nom d'entité lst_ent la liste entget de cette entité et pt un point récupéré dans le SCU courant avec (getpoint). 1 UCSZDIR Tout d'abord, ce qui semble être la "pierre angulaire" de nombreuses traduction : la direction d'extrusion du SCU courant. C'est le code dxf 210 des entitité de ce SCU. Suivant l'utilisation, on peut le définir dans une variable ou dans une fonction : (setq ucszdir (trans '(0 0 1) 1 0 T))ou (defun ucszdir () (trans '(0 0 1) 1 0 T)) (dans les exemples suivants ucszdir est défini dans une variable) Dans la constitution d'une liste entmake : (cons 210 ucszdir) 2 Entités dont les points sont définis dans le SCG (ligne, ellipse, spline...) Dans ce cas, pas de problème particulier. 2.1 Traduction du point de départ de l'entité dans le SCU : (trans (cdr (assoc 10 lst_ent)) 0 1)ou (trans (cdr (assoc 10 lst_ent)) nom_ent 1) 2.2 Définition du point de départ pour une liste pour (entmake) ou (entmod) (cons 10 (trans pt 1 0)) 3 Entités dont les points sont définis dans le SCO (lwpolyline, arc, cercle, blocs...) (pour les lwpolylignes CF réponse N° 8) 3.1 Traduction du point de départ de l'entité dans le SCU : (trans (cdr (assoc 10 lst_ent)) ucszdir 1)ou (trans (cdr (assoc 10 lst_ent)) (cdr (assoc 210 (entget nom_ent))) 1)ou (trans (cdr (assoc 10 lst_ent)) nom_ent 1) 3.2 Définition du point de départ pour une liste pour (entmake) ou (entmod) (cons 10 (trans pt 1 ucszdir)) 4 Traductions des angles (départ et fin d'un arc de cercle, rotation d'un bloc ou d'un texte...) 4.1 Angle 0.0 du SCU courant (angle '(0 0) (trans (getvar "UCSXDIR") 0 ucszdir)) 4.2 Angle acquis avec (getangle) (+ (getangle "\nSpécifiez l'angle: ") (angle '(0 0) (trans (getvar "UCSXDIR") 0 ucszdir)) ) [Edité le 12/12/2005 par (gile)][Edité le 25/12/2005 par (gile)] [Edité le 3/2/2006 par (gile)]
-
Salut Ludwig, Tu peux aussi ajouter au fichier acad.pgp, pour Word et la calculatrice Windows, par exemple : CALC, START CALC, 1,, WORD, START WINWORD, 1,, Et ensuite, dans les boutons : ^C^Ccalc; ^C^Cword; Cette méthode, sans lisp, fonctionne peut-être même sur les LT ? OUPS, je navais pas lu Débuter en LISP :red: [Edité le 7/12/2005 par (gile)]
-
Salut, Pour modifier des blocs dynamiques, il faut utiliser l'éditeur de blocs : Menu Outils -> Editeur de blocs. Quelques exemples dans L'atelier des nouvelles fonctionnalités.
-
En fait, AutoLISP semble ne prendre en considération que les entiers compris entre -2 147 483 648 et 2 147 483 647. Un entier spécifié hors de cette fourchette est changé en réel, mais pour une opération dont les termes sont deux entiers "valides" et le résultat hors fouchette, ce dernier sera invalide (faux quoi). :cool: Plus d'explications (en anglais) dans l'aide aux développeurs AutoLISP Developer's Guide -> Using the AutoLISP Language -> AutoLISP Basics -> AutoLISP Data Types -> Integers
-
Salut, Demande à Patrick, notre cher "oueb-maistre" de les mettre en téléchargement dans la section blocs dynamiques.
-
Eh non ! La fourchette pour (getint) est toujours entre -32 768 et 32 767. Pour récupérer la valeur en décimal dans une chaine, (rtos (atof (rtos ... 2)) 2) n'est-ce pas un peu redondant ? ;) Comme le dit Tramber, (rtos ... 2) semble être suffisant. [Edité le 4/12/2005 par (gile)]
-
En effet, il vaut mieux pour un cartographe ne pas trop travailler en millimètres ;)
-
Les "méthodes officielles"sont décrites dans l'aide : Manuel d'utilisation -> Hachures, notes, tableaux et cotes -> Cotes et tolérances -> Utilisation des styles de cote -> Définition de l'échelle des cotes Ce débat me semble être un débat entre "générations" (générations d'utilisateurs, s'entend). ;) Il semble que pour les plus anciens, des méthodes de travail acquises avec d'anciennes versions ont parfois du mal à intégrer les nouvelles fonctionnalités des versions ultérieures (rien que de très normal et respectable). Pour les utilisateurs plus récents (je ne connais AutoCAD que depuis la 2002), ces nouveautés ne sont pas perçues comme telles et sont donc plus facilement utilisées dans des méthodes de travail en élaboration. Quelque soit la manière, ce qui me plait dans AutoCAD, c'est justement sa grande capacité à permettre à chacun de l'utiliser et de le personnaliser selon ses préférences. :) [Edité le 3/12/2005 par (gile)]
-
Petite précision, La cote est à la hauteur spécifiée dans la fenêtre dans laquelle elle a été créée, mais pas dans les fenêtres où l'échelle est différente. D'où la nécéssité d'avoir un calque "cotation" par échelle de fenêtre et de geler dans chaque fenêtre les calques "cotations" pour des échelles différentes, ce qu'explique Christian ici. [Edité le 3/12/2005 par (gile)]
-
Salut Didier, Si je peux me permettre, il s'agit bien de cocher "Echelle des cotes selon présentation" dans l'onglet "Ajuster" (ou de mettre la variable DIMSCALE à 0). Ensuite, dans l'espace objet des fenêtres de présentation, quelque soit leurs échelles, les texte des cotes devraient avoir la hauteur spécifiée dans ce style de cote, comme quand on cote dans l'espace papier. Chez moi çà marche...
