Arcasdk Posté(e) le 19 juillet 2012 Posté(e) le 19 juillet 2012 Bonjour à tous, Aujourd'hui j'ai importé une présentation inventor vers autocad. Et dans un souci de respecté les préférences du client au niveau des calques, des styles de cote ou texte, je me dois de faire un peu de ménage. Quand inventor converti une présentation vers autocad, les cotations sont toutes à la même taille, la seule chose qui peut me les différencier c'est l'échelle linéaire qui change lorsque l'échelle de la vue change (100 pour une vue au 100ème, 20 pour une vue au 20ème...) Lorsque que je fais un (entget (car (entsel))) sur une de ces côtes, je ne trouve pas le paramètre (le code DXF) qui me dit que la côte est à l’échelle linéaire 100. Comment puis je faire pour me faire un jeu de sélection (ssget) avec toutes les côtes qui ont la même échelle linéaire. D'autre part, je souhaite importer des style de côte que j'ai sur d'autres plans. Existe t'il un moyen de les charger avec une commande lisp <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Carboleum Posté(e) le 19 juillet 2012 Posté(e) le 19 juillet 2012 Je ne sais pas ce que c'est que l’échelle linéaire, mais en tous cas repère l'association dxf (entget (car(entsel))) qui te la renseigne (quelque chose comme (n . 100) n pour un nombre) et fais ceci: (ssget '((n . 100))) avec le n qui est le même que celui de (n . 100) Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
Arcasdk Posté(e) le 19 juillet 2012 Auteur Posté(e) le 19 juillet 2012 Le 19/07/2012 à 08:22, Carboleum a dit : Je ne sais pas ce que c'est que l’échelle linéaire, mais en tous cas repère l'association dxf (entget (car(entsel))) qui te la renseigne (quelque chose comme (n . 100) n pour un nombre) et fais ceci: (ssget '((n . 100))) avec le n qui est le même que celui de (n . 100) Coucou, merci de ta réponse. C'est bien ce que j'ai fait.... mais il n'y a rien qui a comme valeur "100" dans les codes dxf. Du coup je n'arrive pas à faire mon jeu de sélection.... <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Carboleum Posté(e) le 19 juillet 2012 Posté(e) le 19 juillet 2012 Alors, je sais pas ;-) Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
didier Posté(e) le 19 juillet 2012 Posté(e) le 19 juillet 2012 coucou si tu mettais un fichier d'exemple en téléchargementon comprendrait mieux ce que tu demandes. dans ce fichier, mets un nota du styleça je veux garder, ça je veux filtrer ... change l'extension ou bien mets-le en zip pour le mettre sur le siteon n'a pas le droit de poser des DWG.amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
bryce Posté(e) le 19 juillet 2012 Posté(e) le 19 juillet 2012 Bonjour, L'échelle linéaire forcée n'est pas accessible directement avec entget, car elle est stockée dans les XData... <_< Elle est beaucoup plus facile à récupérer en Visual Lisp avec (vla-get-LinearScaleFactor).Ex:(vla-get-LinearScaleFactor (vlax-ename->vla-object (car (entsel)))) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
VDH-Bruno Posté(e) le 20 juillet 2012 Posté(e) le 20 juillet 2012 Bonjour, Un équivalent en AutoLisp à la ligne de code donné par Bryce(cdr (assoc 1040 (cdadr (assoc -3 (entget (car (entsel)) '("ACAD")))))) Sur ce principe un code à tester qui devrai répondre à ton besoin;; Sélectionne les cotations en fonction de leur échelle linéaire (defun c:selCotEchLin (/ eref echlin i ss e) (cond ((and (setq eref (car (entsel "\nPointez une cotation en référence pour l'échelle linéaire :"))) (setq eref (entget eref '("ACAD"))) (= "DIMENSION" (cdr (assoc 0 eref))) ) (setq echlin (cdr (assoc 1040 (cdadr (assoc -3 eref))))) (sssetfirst nil (repeat (setq i (sslength (setq ss (ssget "X" '((0 . "DIMENSION")))))) (if (equal echlin (cdr (assoc 1040 (cdadr (assoc -3 (entget (setq e (ssname ss (setq i (1- i)))) '("ACAD")))))) 1.0e-9 ) ss (ssdel e ss) ) ) ) ) ) (princ) ) A+ Apprendre => Prendre => Rendre
Arcasdk Posté(e) le 23 juillet 2012 Auteur Posté(e) le 23 juillet 2012 Merci Bryce c'est exactement ce que je cherchais. Et c'est vrai qu'un peu de V-Lisp, c'est pas mal. C'est pas que ca me fait peur mais c'est que je ne sais pas ou chercher les commandes... Merci à toi aussi VDH-Bruno, si ta commande n'était pas aussi longue j'aurai certainement recopié la tienne mais tu ne m'en voudra pas si je pique la syntaxe de Bryce. En revanche je suis quand même curieux de savoir où tu trouves la correspondance des (assoc 1040) ou (assoc -3). Qu'est ce qu'on trouve dans les Xdata, et comment on les parcoure..? Merci à tous! <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
VDH-Bruno Posté(e) le 24 juillet 2012 Posté(e) le 24 juillet 2012 Bonjour Arcasdk, Citation En revanche je suis quand même curieux de savoir où tu trouves la correspondance des (assoc 1040) ou (assoc -3). Qu'est ce qu'on trouve dans les Xdata, et comment on les parcoure..? Bien que n’étant pas un grand spécialiste de la question je vais essayer de t’éclairer dans la mesure de mes moyens. Les Xdata ou données étendues permettent d’attacher des données à des entités, données utilisée par Autodesk ou des applications spécifiques. Sous AutoCAD on trouve par exemple des Xdata attaché aux fenêtres de l’EP (VIEWPORT) ou aux hachures (HATCH), les données étendues sont accessible avec la fonction entget, elles suivent les données de définitions de l’entité et sont précédées d’un code de groupe -3 et d’un nom d’applications (pour AutoCAD le nom d’application est "ACAD"). Pour que la fonction entget retourne les données étendues d’une entité, il faut spécifier son nom d’application, syntaxe (entget ename [applist]) Exemple d’une cotation dont on a modifié le paramètre d’échelle linéaire Citation _$ (entget (car (entsel)) '("ACAD"))((-1 . <Nom d'entité: 7e7da040>) (0 . "DIMENSION") (330 . <Nom d'entité: 7efadcf8>) (5 . "112BB0") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "IB00-cotations") (100 . "AcDbDimension") (2 . "*D122") (10 35781.1 27894.2 0.0) (11 35473.1 27953.7 0.0) (12 0.0 0.0 0.0) (70 . 32) (1 . "") (71 . 5) (72 . 1) (41 . 1.0) (42 . 3080.0) (73 . 0) (74 . 0) (75 . 0) (52 . 0.0) (53 . 0.0) (54 . 0.0) (51 . 0.0) (210 0.0 0.0 1.0) (3 . "IB-25-25") (100 . "AcDbAlignedDimension") (13 35165.1 27983.3 0.0) (14 35781.1 27983.3 0.0) (15 0.0 0.0 0.0) (16 0.0 0.0 0.0) (40 . 0.0) (50 . 0.0) (100 . "AcDbRotatedDimension") (-3 ("ACAD" (1000 . "DSTYLE") (1002 . "{") (1070 . 144) (1040 . 5.0) (1002 . "}")))) Nota une astuce pour retourner les données étendues d’une entité quelques soit le nom d’application remplace "ACAD" par "*" :(entget (car (entsel)) '("*")) L’argument applist se conforment au motif de filtrage utilisé par la fonction wcmatch. Pour ce qui est du code 1040 je te renvoie un peu à la réponse de Carboleum, il suffit de faire varier l’echelle linéaire de ta cotation est de rechercher dans la liste dxf des données étendue, le code dxf qui varie… Pour sélectionner des entités en fonction de leur données étendues il suffit de spécifié leur nom d’applications exemple :;; Sélectionne les cotations ayant des données étendues (ssget '((0 . "DIMENSION") (-3 ("ACAD")))) Ou ;; Sélectionne toutes les entitées ayant des données étendues (ssget "X" '((-3 ("*")))) Pour en savoir plus sur le sujet, il y a le forum qui est très riche sur la question, a voir également les fonctions XDLIST & XDATA des outils Express (il y a je crois une version amélioré par (gile) sur le forum). Il existe également une description des codes donnée dans le Manuel d’utilisation DXF rubrique Données étendues dans les Concepts DXF avancéshttp://exchange.autodesk.com/autocadmep/fra/online-help/browse#WS1a9193826455f5ff18cb41610ec0a2e719-7943.htm Et la rubrique Extended Data – xdata que l’on trouve dans l’aide AutoLISP Developer's Guide > Using the AutoLISP Language > Using AutoLISP to Manipulate AutoCAD Objects > Extended Data – xdata.http://docs.autodesk.com/ACD/2011/ENU/filesALG/WS73099cc142f4875516d84be10ebc87a53f-7a08.htm Citation … si ta commande n'était pas aussi longue j'aurai certainement recopié la tienne mais tu ne m'en voudra pas si je pique la syntaxe de Bryce. Non pas du tout d’ailleurs je viens de m’apercevoir que ma ligne de code n’était pas si fiable, car il peut y avoir plusieurs code 1040 notamment si la taille des flèches a été modifié, pour bien faire il me semble qu’il faudrait également faire une vérification sur la valeur du code 1070 qui précède… Du coup je comprends mieux maintenant la remarque de Bryce Citation Elle est beaucoup plus facile à récupérer en Visual Lisp avec (vla-get-LinearScaleFactor). Cordialement Bruno Apprendre => Prendre => Rendre
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant