Aller au contenu

[Résolu] Commande SCU OBJET dans l'exécution d'un LISP


Messages recommandés

Posté(e)

Bonjour,

 

Je souhaite créer un LISP me permettant d'orienter deux textes selon une direction.

L'idée est de créer un texte "HsPt :" et un texte issu d'une soustraction (effectuée dans la fonction AutoLISP) alignés entre eux et orientés selon une direction commune (différente de celle du SCU courant).

 

Ex :

post-34094-0-06272300-1363019997_thumb.jpg

 

Pour y arriver, j'appelle la commande AutoCAD dans le LISP :

(command "SCU" "OBJET")

.

Ensuite j'écris tout le tintoin concernant la création des textes, leur dimension, leur couleur, etc ...

Et je termine, pour revenir au SCU précédent, en rappelant la commande AutoCAD :

(command "SCU" "P")

 

Seulement la fonction ne dépasse pas l'étape du SCU-Objet (c'est con : c'est seulement la première étape).

 

Je la supprime donc de mon code mais conserve l'étape me permettant de revenir au SCU précédent.

Alors, je passe -via la ligne de commande- en SCU-Objet, j'appelle mon LISP et HOP! tout fonctionne (y compris le retour au SCU précédent).

 

Mes questions sont donc :


  •  
  • Pourquoi le passage en SCU-Objet, lorsqu’il est intégré à mon code, ne fonctionne-t-il pas ?
  • Et pourquoi le retour au SCU précédent fonctionne-t-il lui correctement ? Est-ce parce qu'il est la dernière commande du LISP ?
  • Est-ce le changement de SCU qui perturbe AutoCAD lors de l'exécution de la commande ?
  • Y a-t-il une variable à renseigner ?

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

Posté(e)

Bonsoir MrWoolf,

 

La commande SCU avec l'option objet exige le choix d'un objet pour fonction.

Avec (command "SCU" "OBJET") tu ferme la commande avant cette sélection. Essaye avec ceci par exemple (command "scu" "objet" (car (entsel)))

Olivier

  • Upvote 1
Posté(e)

Bonjour -Olivier-,

 

Merci pour ton bout de code : en effet, cela fonctionne (à peu près) et cela m'a permis de mieux comprendre comment fonctionne le langage LISP (c'est mon 4ème jour dessus).

 

J'ai écrit "à peu près" car l'orientation ne se fait pas selon l'origine choisie.

L'aide "AutoCAD" indique concernant le SCU-Objet :

"Pour la plupart des objets, l'origine du nouveau SCU est située au sommet le plus proche de l'endroit où vous sélectionnez l'objet et l'axe X est aligné sur une arête ou est tangent à une arête. Pour les objets planaires, le plan XY du SCU est aligné sur le plan contenant l'objet. Dans le cas des objets complexes, l'origine est déplacée, mais l'orientation courante des axes est conservée."

Seulement peu importe la position de mon point de sélection sur l'objet, l'orientation du SCU sera la même. A savoir celle dans laquelle est orienté l'objet dans le SCG.

 

 

Mes questions :


  •  
  • Est-ce normal ?
  • Puis-je y faire quelque chose ?

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

Posté(e)

Bonjour (Gile),

 

Je ne pensais pas que cette commande pouvait fonctionner uniquement avec les coordonnées d'un point. L'invite réclamant un objet cela me semble pas logique. :mellow:

Olivier

Posté(e)

Bonjour Olivier,

 

Je ne pensais pas que cette commande pouvait fonctionner uniquement avec les coordonnées d'un point. L'invite réclamant un objet cela me semble pas logique. :mellow:

Olivier

 

C’est un classique de la programmation avec la fonction command, dans ce cas la commande réclame de façon "implicite" une sélection d’objet par point, lorsque l’on utilise la fonction command avec le symbole pause, la saisie est toujours au format voulu et l’on passe souvent à côté de cette subtilité que l’on découvre avec certaines commandes AutoCAD lorsque l’on passe des paramètres par variable.

 

Dans l’aide, regarde la section suivante :

http://docs.autodesk.com/ACD/2011/ENU/filesALG/WS73099cc142f4875516d84be10ebc87a53f-79f5.htm

C'est mentionné au sujet des commandes TRIM, EXTEND, et FILLET, c’est le même principe que pour le scu objet

 

A+

  • Upvote 1

Apprendre => Prendre => Rendre

Posté(e)

Bonjour à tous,

 

D'abord merci pour vos réponses.

En effet, avec le code de (gile), j'arrive à mes fins.

 

Par contre, je ne comprends pas son fonctionnement.

 

La fonction cadr permet d'extraire le deuxième élément de la liste contenant les données de définition de l'objet sélectionné pour le SCU.

Pour une ligne, cette liste des données est :

((-1 . <Nom d'entité: -147cc8>) (0 . "LINE") (330 . <Nom d'entité: -154338>) (5 
. "861F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "HSPT") (100 . 
"AcDbLine") (10 1005.01 500.243 0.0) (11 1005.25 498.858 0.0) (210 0.0 0.0 1.0))

-1 correspond au nom de l'entité -soit la ligne-, 0 correspond au type d'entité et 330 correspond à l'identificateur de pointeur logiciel.

 

Mes questions :


  •  
  • Pourquoi extrait-on la deuxième donnée alors que c'est la troisième qui est utilisée ?
  • L'identificateur de pointeur logiciel (si je reprends mon bouquin : de code 330 à code 339) est-il orienté ? Comment un point peut-il posséder une orientation ? Est-ce parce qu'il est défini dans le SCO ?

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

Posté(e)

Bonjour

 

Quand tu utilise (entsel), il te retourne une liste du genre:

(<Nom d'entité: -41234d40> (242.162 -64.6885 0.0))

 

où le 1er élément est le nom de l'entité et le second est le point de sélection.

 

Donc un (cadr (entsel)) te retourne essentiellement le point de sélection et pas la définition de l'objet sélectionné.

 

Tu fais une confusion avec la liste retourné par un (entget (car (entsel)))

 

NB: ATTENTION le point retourné par (cadr (entsel)) n'appartient pas à l'objet, c'est plutôt le point centre de la cible de sélection, donc proche de l'objet.

Suivant le degré de zoom ce point peut ne plus être valide ultérieurement dans le code. On peut contourner ce problème avec la fonction (osnap (cadr (entsel)) "_near") pour obtenir un point situé exactement sur l'objet.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Bonjour bonuscad,

 

Et merci.

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité