CADxp: 4 nouvelles fonctions AutoLISP dans A2012 - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

4 nouvelles fonctions AutoLISP dans A2012

#1 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11291
  • Inscrit(e) : 02-septembre 05

Posté 24 août 2011 - 08:55

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 -
Développements sur mesure pour AutoCAD
Image IPB
0

#2 L'utilisateur est hors-ligne   bseb67 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 831
  • Inscrit(e) : 27-avril 07

Posté 24 août 2011 - 09:02

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 passer
de 2010 à 2012.
Tous pour lisp, Lisp pour tous!
Avec Revit, cela ne vas trop vite...
0

#3 L'utilisateur est hors-ligne   VDH-Bruno 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 949
  • Inscrit(e) : 29-avril 10

Posté 24 août 2011 - 12:43

Bonjour,

Citation

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://forums.augi....397#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?)

0

#4 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11291
  • Inscrit(e) : 02-septembre 05

Posté 24 août 2011 - 14:07

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 -
Développements sur mesure pour AutoCAD
Image IPB
0

#5 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11291
  • Inscrit(e) : 02-septembre 05

Posté 26 octobre 2014 - 14:54

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 -
Développements sur mesure pour AutoCAD
Image IPB
0

#6 L'utilisateur est hors-ligne   VDH-Bruno 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 949
  • Inscrit(e) : 29-avril 10

Posté 27 octobre 2014 - 09:11

Bonjour (gile),

Merci pour le partage, très intéressant comme retour (même si j'évolue encore sous AutoCAD 2007)

Voir le message(gile), le 26 octobre 2014 - 14:54 , dit :

[…], 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
0

#7 L'utilisateur est hors-ligne   Tramber 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8463
  • Inscrit(e) : 29-mars 03
  • LocationStrasbourg

Posté 30 octobre 2014 - 12:51

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...
Image IPB

Bureau d'études dessin.
Spécialiste Escaliers
Développement - Formation

./__\.
(.°=°.)
0

#8 L'utilisateur est hors-ligne   GEGEMATIC 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 914
  • Inscrit(e) : 04-novembre 05

Posté 13 novembre 2014 - 18:01

salut à tous,
Gile à bien fait de déterrer ce sujet,
je me rappelle que le setpropertyvalue avait été le seul moyen
de 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 com
Gérald
---------------------------------------------------------------------- PowerClic sur http://www.g-eaux.com
0

#9 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 37
  • Inscrit(e) : 16-juillet 19

Posté 19 août 2019 - 14:59

Hello,

Petite question, c'est quoi le propertyname de "Sommet X" et "Sommet Y" ?
0

#10 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11291
  • Inscrit(e) : 02-septembre 05

Posté 19 août 2019 - 15:16

Voir le messageAzRoDoRzA, le 19 août 2019 - 14:59 , dit :

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 -
Développements sur mesure pour AutoCAD
Image IPB
0

#11 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 37
  • Inscrit(e) : 16-juillet 19

Posté 19 août 2019 - 15:23

Voir le message(gile), le 19 août 2019 - 15:16 , dit :

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/ountcj
Je 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)
0

#12 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11291
  • Inscrit(e) : 02-septembre 05

Posté 19 août 2019 - 17:17

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 -
Développements sur mesure pour AutoCAD
Image IPB
0

#13 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 37
  • Inscrit(e) : 16-juillet 19

Posté 20 août 2019 - 08:27

Voir le message(gile), le 19 août 2019 - 17:17 , dit :

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!
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)