Aller au contenu

Récupérer le système de coordonnées usager


Messages recommandés

Posté(e)

Bonjour,

 

J'aurais dû mettre ce post dans "Débuter en Lisp" - Je ne sais pas comment le déplacer... :unsure:

En lisp, comment fait-on pour récupérer le système de coordonnée usager avant l'exécution d'une routine pour le restaurer à la fin de la routine.

 

Exemple:


  •  
  • J'oriente mon dessin suivant une ligne du cadastre mais je ne sauvegarde ni la vue ni le scu puisque cet orientation n'est que temporaire.
    Je demande l'exécution d'une routine qui

    •  
    • place le scu à "général" pour l'insertion dégroupé d'un dessin

      place le scu selon un objet quelconque pour exécuter un décalage

      replace le scu à "général" ....

Je termine la routine et m'attend à revoir mon dessin dans l'orientation du départ.

 

Je ne sais pas quel variable utilisée (s'il en est une) pour l'équivalent de:

 (setq U_clayer (getvar "clayer"))
...La routine...
(setvar "clayer" U_clayer)

Posté(e)

Salut,

 

tu peux sauvegarder le scu puis le restaurer ensuite.

Par exemple:

(command "scu" "sa" "monscu")
...La routine...
(command "scu" "r" "monscu")
(command "scu" "su" "monscu"

Tu peux le faire aussi en visual lisp pour éviter l'appel à command mais je n'ai pas le code sous la main

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Posté(e)

Merci! Je cherchais trop une variable...

Puisque je suis vraiment débutante en lisp, j'irai au plus simple avec l'appel de commande.

Posté(e)

Salut

 

Ou utiliser la fonction TRANS

 

Extrait de l'aide

Translates a point (or a displacement) from one coordinate system to another

 

(trans pt from to [disp])

Arguments

 

pt

A list of three reals that can be interpreted as either a 3D point or a 3D displacement (vector).

 

from

An integer code, entity name, or 3D extrusion vector identifying the coordinate system in which pt is expressed. The integer code can be one of the following:

 

0 World (WCS)

 

1 User (current UCS)

 

2 If used with code 0 or 1, this indicates the Display Coordinate System (DCS) of the current viewport. When used with code 3, it indicates the DCS of the current model space viewport.

 

3 Paper space DCS (used only with code 2)

 

to

An integer code, entity name, or 3D extrusion vector identifying the coordinate system of the returned point. See the from argument for a list of valid integer codes.

 

disp

If present and is not nil, this argument specifies that pt is to be treated as a 3D displacement rather than as a point.

 

If you use an entity name for the from or to argument, it must be passed in the format returned by the entnext, entlast, entsel, nentsel, and ssname functions. This format lets you translate a point to and from the Object Coordinate System (OCS) of a particular object. (For some objects, the OCS is equivalent to the WCS; for these objects, conversion between OCS and WCS is a null operation.) A 3D extrusion vector (a list of three reals) is another method of converting to and from an object's OCS. However, this does not work for those objects whose OCS is equivalent to the WCS.

 

Return Values

 

A 3D point (or displacement) in the requested to coordinate system.

 

Examples

 

In the following examples, the UCS is rotated 90 degrees counterclockwise around the WCS Z axis:

 

Command: (trans '(1.0 2.0 3.0) 0 1)

 

(2.0 -1.0 3.0)

 

Command: (trans '(1.0 2.0 3.0) 1 0)

 

(-2.0 1.0 3.0)

 

The coordinate systems are discussed in greater detail in Coordinate System Transformation in the AutoLISP Developer's Guide.

 

For example, to draw a line from the insertion point of a piece of text (without using Osnap), you convert the text object's insertion point from the text object's OCS to the UCS.

 

(trans text-insert-pointtext-ename 1)

You can then pass the result to the From Point prompt.

 

Conversely, you must convert point (or displacement) values to their destination OCS before feeding them to entmod. For example, if you want to move a circle (without using the MOVE command) by the UCS-relative offset (1,2,3), you need to convert the displacement from the UCS to the circle's OCS:

 

(trans '(1 2 3) 1 circle-ename)

Then you add the resulting displacement to the circle's center point.

 

For example, if you have a point entered by the user and want to find out which end of a line it looks closer to, you convert the user's point from the UCS to the DCS.

 

(trans user-point 1 2)

Then you convert each of the line's endpoints from the OCS to the DCS.

 

(trans endpoint line-ename 2)

From there you can compute the distance between the user's point and each endpoint of the line (ignoring the Z coordinates) to determine which end looks closer.

 

The trans function can also transform 2D points. It does this by setting the Z coordinate to an appropriate value. The Z component used depends on the from coordinate system that was specified and on whether the value is to be converted as a point or as a displacement. If the value is to be converted as a displacement, the Z value is always 0.0; if the value is to be converted as a point, the filled-in Z value is determined as shown in the following table:

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é