(gile) Posté(e) le 24 août 2011 Posté(e) le 24 août 2011 Salut, Quatre nouvelles fonctions AutoLISP sont apparues dans la version 2012 pour palier un (tout petit) peu à l'absence des fonctions vla(x) dans AutoCAD pour Mac. Ces fonctions sont aussi accessibles avec les versions Windows (voir ici) :- dumpallproperties : liste les propriétés pour l'entité (vlax-dump-object).- getpropertyvalue : obtient la valeur de la propriété (vlax-get-property).- ispropertyreadonly : évalue si la propriété est en lecture seule (vlax-property-available T).- setpropertyvalue : définit la valeur de la propriété (vlax-put-property). Ceci montre bien que si Autodesk le voulait, AutoLISP pourrait évoluer sans dépendre d'interface propriétaire comme COM/ActiveX et exposer directement des fonctionnalités ObjectARX... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bseb67 Posté(e) le 24 août 2011 Posté(e) le 24 août 2011 Salut Gile, Je prend note de l'info. Je n'ai pas encore eu l'occasion de travailler avec la 2012...Mais maintenant que j'ai mon nouveau PC, je vais tenter de passerde 2010 à 2012. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
VDH-Bruno Posté(e) le 24 août 2011 Posté(e) le 24 août 2011 Bonjour, Ceci montre bien que si Autodesk le voulait, AutoLISP pourrait évoluer sans dépendre d'interface propriétaire comme COM/ActiveX et exposer directement des fonctionnalités ObjectARX... Oui j’ai déjà lu ce genre de propos notamment celui-ci http:// http://forums.augi.com/showthread.php?p=1138397#post1138397 avec un traducteur automatique, d’ailleurs je ne sais qu’en penser, notamment sur une possible (et réelle) évolution du VLisp, qu’imposerai les problèmes de compatibilité avec AutoCAD pour Mac. Même si je n’utilise pas Mac un avis éclairé m’intéresserait..A+ (Ps : Depuis que j’ai modestement regardé d’autres versions Lisp, il y a bien 2 ou 3 fonctionnalités que je souhaiterai retrouver dans AutoLisp, peut être serait-ce l’occasion?) Apprendre => Prendre => Rendre
(gile) Posté(e) le 24 août 2011 Auteur Posté(e) le 24 août 2011 Salut, Ce que ça peut laisser présager (on peut toujours espérer) c'est une extension d'AutoLISP. Pour l'instant, ces nouvelles fonctions ne sont qu'un moyen d'écrire plus simplement et plus lisiblement ce qu'on pouvait déjà faire en AutoLISP avec entget et entmod sans en avoir toute la puissance. Par exemple, la propriété Normal d'un cercle est en lecture seule alors qu'on peut modifier le groupe 210 de sa liste DXF avec entmod... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 26 octobre 2014 Auteur Posté(e) le 26 octobre 2014 Salut, Je déterre un peu ce sujet parce que, même si je ne "lispe" plus trop souvent, j'ai eu l'occasion de me repencher sur ces fonctions lors de formations ou de réponses sur des forums. Par ailleurs, il devrait y avoir aujourd'hui beaucoup plus d'utilisateurs d'AutoCAD 2012 ou ultérieur, donc potentiellement intéressés. Ces fontions qui sont donc au départ une alternative aux fonctions vla(x), se révèlent aussi être plus simple à utiiser que les listes DXF :(setq circle (entmakex '((0 . "CIRCLE") (10 20.0 30.0 0.0) (40 . 15.0))))Pour obtenir le centre du cercle,(getpropertyvalue circle "Center")est équivalent à:(vlax-get (vlax-ename->vla-object circle) "Center")ou :(cdr (assoc 10 (entget circle)))les trois retournent : (20.0 30.0 0.0) Ou pour modifier le rayon du cercle:(setpropertyvalue circle "Radius" 20.0)fonctionne comme :(vlax-put (vlax-ename->vla-object circle) "Radius" 20.0)ou :(entmod (subst '(40 . 20.0) (assoc 40 (entget circle)) (entget circle))) Pour certaines entités, comme les références de bloc, ceci va beaucoup plus loin.Les valeurs d'attribut peuvent être obtenues et/ou modifiées directement depuis le bloc où chaque étiquette d'attribut est considérée comme une propriété du bloc.Par exemple, si la variable 'bloc' contient le nom d'entité d'une référence de bloc avec un attribut dont l'étiquette est "ID", on obtient directement la valeur de cet attribut en faisant :(getpropertyvalue bloc "ID")et on la modifie avec :(setpropertyvalue bloc "ID" "007") On obtient et/ou modifie aussi directement les propriétés dynamiques des blocs dynamiques.Par exemple, si le bloc dynamique contenu dans la variable 'blocDyn' a une propriété d'étirement nommée Distance, on obtient sa valeur par :(getpropertyvalue blocDyn "AcDbDynBlockPropertyDistance")et on la modifie à 100.0 avec :(setpropertyvalue ent "AcDbDynBlockPropertyDistance" 100.0) Mais plus fort encore, ces nouvelles fonctions permettent d'accéder à des propriétés qui n'étaient jusque là ni exposées en DXF, ni via COM (Visual LISP), notamment certaines propriétés des solides 3D.Par exemple, la longueur (Length), la largeur (Width) et la hauteur (Height) d'une Boite, ou le rayon (Radius) et la hauteur (Height) d'un cylindre. Ou encore, la hauteur (Height) d'un solides extrudé, la longueur (Length) d'un solide balayé, Voilà quelques trucs que j'ai été amené à découvrir, il y en a certainement d'autres, il ne faut donc pas hésiter à faire un :(dumpallproperties (car (entsel)))en phase de développement pour voir s'il n'existe pas un moyen plus rapide, plus concis, voire carrément inexistant jusque là de lire ou écrire les propriétés d'une entité... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 27 octobre 2014 Posté(e) le 27 octobre 2014 Bonjour (gile), Merci pour le partage, très intéressant comme retour (même si j'évolue encore sous AutoCAD 2007) […], même si je ne "lispe" plus trop souvent, […] Oui, c'est bien ce qu'il me semblait avoir détecté avec tous ces if imbriqué qui apparaissent de plus en plus dans ton code… :D Amicalement Bruno Apprendre => Prendre => Rendre
Tramber Posté(e) le 30 octobre 2014 Posté(e) le 30 octobre 2014 En effet, quelle mise à jour intéressante pour attributs, blocs dyn et solides. Chez moi dumpallproperties renvoie nil sur ma 2014. C'est un peu décevant et bloque mes essais. (tu avais écrit dumpallaproperties (un "a" en trop), je me suis permis de corriger) J'ai toutefois réussi un (setpropertyvalue circle "Center" '(0 0 0)) en notant qu'il faut un point 3D. Je verrai sur la 2015 si le dump veut bien fonctionner... Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
GEGEMATIC Posté(e) le 13 novembre 2014 Posté(e) le 13 novembre 2014 salut à tous, Gile à bien fait de déterrer ce sujet,je me rappelle que le setpropertyvalue avait été le seul moyende changer la hauteur d'extrusion de solides,mais le plus dingue, sur une 2012, c'est que ça permet un truc infaisable en .Net (en 2012 du moins)passer du mode niveau ou attaché une xref(setpropertyvalue exref "IsFromOverlayReference" 0)marche nickel en fait c'est vraiment un gros regain d'interret pour le lisp, car pour moi le Net n'avait d’intérêt que lorsque j'étais bloqué par le lisp et par comGérald ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
AzRoDoRzA Posté(e) le 19 août 2019 Posté(e) le 19 août 2019 Hello, Petite question, c'est quoi le propertyname de "Sommet X" et "Sommet Y" ?
(gile) Posté(e) le 19 août 2019 Auteur Posté(e) le 19 août 2019 Hello, Petite question, c'est quoi le propertyname de "Sommet X" et "Sommet Y" ? Difficile à dire sans voir au moins le résultat de dumpallproperties ni même connaître le type d'entité concernée... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
AzRoDoRzA Posté(e) le 19 août 2019 Posté(e) le 19 août 2019 Difficile à dire sans voir au moins le résultat de dumpallproperties ni même connaître le type d'entité concernée...Ah oui exact, donc le type d'entité c'est une polyligne et j'essaye de récupérer ces données : https://prnt.sc/ountcjJe ne peux pas passer par les code dxf car ils me retournent les coordonnées de mon onglet objet or je travaille dans l'espace objet (coordonnées complètement différentes)
(gile) Posté(e) le 19 août 2019 Auteur Posté(e) le 19 août 2019 Essaye de décrire le plus clairement ce que tu cherches à faire parce que là c'est toujours très obscur.(getpropertyvalue pline "Vertices" 0 "Position")comme(cdr (assoc 10 (entget (pline))))renvoient les coordonnées du premier sommet (0) de la polyline (pline) définies dans le SCO de la polyligne. Le SCO est identique au SCG si la polyligne est dessinée sur le plan XY du SCG. Si tu veux avoir les coordonnées des sommets définies dans le SCU courant (comme dans le palette des propriétés), il faut utiliser la fonction trans :(trans (getpropertyvalue pline "Vertices" 0 "Position") pline 1)ou(trans (cdr (assoc 10 (entget (pline)))) pline 1) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
AzRoDoRzA Posté(e) le 20 août 2019 Posté(e) le 20 août 2019 Essaye de décrire le plus clairement ce que tu cherches à faire parce que là c'est toujours très obscur. En fait, je récupère tout les sommets de ma polyligne, je vérifie si un bloc est attaché à un de ces sommets, si c'est le cas je récupère l'attribut "NOM_BLOC" de ce bloc en question. Et en faisant des test dans l'espace objet onglet présentation, j'ai pu remarquer que les coordonnées des polylignes était complètement différentes. C'est donc pour cela que je cherchais une solution à ce problème, et la fonction "trans" répond exactement à mes besoins, merci!
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