Aller au contenu

Messages recommandés

Posté(e)

 

Bonjour,

 

Comment utiliser la méthode Getpoint afin de demander à l'utilisateur un point de base puis un point d'arrivée si les 2 points ne se trouvent pas dans le même onglet?

Soit pour passer d'une présentation à une autre soit d'un fichier à un autre.

 

Merci

_______________________________

R.A.

Développeur AutoCAD C#.net

www.danialu.fr

Posté(e)

Salut!

 

La distance c'est 3 625m fois le nombre de présentations entre celle de départ et d'arrivée.

Non, je déconne. mais je ne comprend pas trop ou te veux en venir ainsi... :casstet: :P

 

Pour t'aider:

Pour changer de présentation, fait une dcl qui liste les présentation et l'utilisateur devra choisir.

 

Pour passer d'un plan à un autre, utiliser vl-registry-write et read pour transférer des infos d'un fichier

vers un autre ou d'un autocad vers un autre. pense à faire un delete à la fin

 

 

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Bonjour,

 

Merci, je vais jeter un coup d'oeil à ta méthode.

 

Pour éclaircir ce que je souhaite faire:

 

J'ai fait une fonction servant à faire un copier-coller en modifiant certains attributs ou xdatas en fonction des objets sélectionnés.

Ainsi, dans la fonction, l'utilisateur doit sélectionner des objets, ensuite, je lui demande le point de base de la sélection puis le point d'insertion des objets copiés. Avec Getpoint, la fonction marche très bien si on reste dans le même onglet. Par contre, cela bug si l'utilisateur veut changer d'onglet ou de fichier entre la sélection du point de base et celui du point d'arrivée.

 

Merci

_______________________________

R.A.

Développeur AutoCAD C#.net

www.danialu.fr

Posté(e)

Là je comprend un peu mieux la chose.

 

Juste une petite précision: faire un copier dans un fichier ok, mais d'un fichier vers un autre

il faut utiliser le copier-coller windows, et là ce n'est pas toujours propre.

la solution la plus propre: créer un wbloc de l'élément a copier, puis l'insérer dans le fichier voulu.

 

En lisp ca doit être faisable, mais ca c'est déjà bien poussé.

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Salut

 

Je ne connais pas ton niveau en lisp/vlisp pour faire ce qu'indique bseb67

Un copier/coller windows est utilisable via les activex, mais le plus simple est d'utiliser _copyclip et _pasteclip.

Par contre, pour ce qui est de coller sur un fichier, pas d'autres solutions qu'Objectdbx.

 

@+

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

Posté(e)

Bonjour et merci pour vos réponses.

 

- Je m'y connais assez mal en Lisp car je réalise un programme en vba mais j'ai posté ici car j'ai récupéré une de vos fonctions Lisp (cpvl - Désolé, je ne sais plus qui je dois remercier) et je m'en suis inspiré pour faire ma fonction en vba.

 

- J'ai résolu à peu près mon problème en séparant la fonction Copier et la fonction Coller.

 

Si on reste dans le même onglet, les 2 fonctions s'enchaînent et on peut faire le copier-coller sans interruption.

 

Pour copier-coller entre 2 onglets ou fichiers, la méthode est:

-lancer la fonction Copier

-sélectionner les objets à copier, puis le point de base

-Si on change d'onglet ou de fichier, la fonction s'arrête à cause de l'erreur de la méthode GetPoint et Autocad change d'onglet

L'utilisateur lance ensuite la fonction Coller qui récupère la dernière sélection d'objets mémorisés en variables publiques.

 

Ci-dessous mon code si jamais ça vous inspire même s'il s'agit de vba:


Dim P_A                 As Variant
Dim objCollection()     As Object
Dim DOC1                As AcadDocument

Sub S_CopierAcroteres()
'**********************************************************************
'Description:  Copier-Coller d'un ou plusieurs acroteres (equipes ou non)
'Modifications:
'**********************************************************************
   Dim i               As Integer
   Dim L_col_Selection As AcadSelectionSet
 
   ' 1 - Selection de blocs
   '=============================================================
   On Error Resume Next
   ThisDrawing.SendCommand ""
   Set L_col_Selection = F_InitialiserJeuSelection("SELECTION")
   'l'utilisateur sélectionne des blocs
   L_col_Selection.SelectOnScreen
   If L_col_Selection.Count = 0 Then Exit Sub
   On Error GoTo 0
   
   'Creation d'une collection d'objets (compatible avec CopyObjects)
   ReDim objCollection(0 To L_col_Selection.Count - 1) As Object
   For i = 0 To L_col_Selection.Count - 1
       Set objCollection(i) = L_col_Selection.Item(i)
   Next i
               
   ' 2 - Point de base et appel de la fonction qui fait la copie
   '=============================================================
   P_A = ThisDrawing.Utility.GetPoint(, "Point de base:")
   Set DOC1 = ThisDrawing.Application.ActiveDocument
   Call S_CollerAcroteres

End Sub

Sub S_CollerAcroteres()
'**********************************************************************
'Description: Copie une sélection d'objets à un emplacement spécifié 
'Modifications:
'**********************************************************************
   Dim i As Integer, j As Integer
   Dim L_obj_Entite            As AcadEntity
   Dim P_B                     As Variant          'point de destination
   Dim L_var_ObjetsDupliques   As Variant          'objets retournes par la copie
 
   'Utilisation des variables publiques pour le point de base A, la collection d'objets copiés et le document d'origine
   
   Do  'Boucle tant que n'appuie pas sur Echap

       ' 1 - Gestion d'erreur
       '===========================
       GetAsyncKeyState (vbKeyEscape) 'reinitialise getasynckeystate
       On Error Resume Next
       P_B = ThisDrawing.Utility.GetPoint(P_A, "Point d'insertion: (ou Echap pour terminer)")
       
       If Err.Number <> 0 Then
           'Appui sur ECHAP : fin de la procedure
           If GetAsyncKeyState(vbKeyEscape) Then
               Exit Sub
           Else
           'Autre erreur : par exemple changement d'onglet ou de fichier
               Exit Sub
           End If
       End If
       On Error GoTo 0
       
       ' 2 - Duplique les objets et les deplace
       '==============================================================================
       'CopyObjects: retourne une collection des objets copies
       L_var_ObjetsDupliques = DOC1.CopyObjects(objCollection, ThisDrawing.PaperSpace)
       For i = 0 To UBound(L_var_ObjetsDupliques)
           Set L_obj_Entite = L_var_ObjetsDupliques(i)
           L_obj_Entite.Move P_A, P_B
       Next i
   
       ' 3 - Modifier les attributs
       '==============================================================================
       For i = 0 To UBound(L_var_ObjetsDupliques)
		'Code permettant de modifier certains attributs  en fonction des objets selectionnes
       Next i
   
   Loop    'Fin de la boucle
End Sub

_______________________________

R.A.

Développeur AutoCAD C#.net

www.danialu.fr

Posté(e)

Car dans le code de la fonction coller, j'ai supprimé les lignes de la partie 3 pour simplifier mon exemple car c'est un petit peu hors sujet.

 

Mais pour info:

Dans ma fonction, cette partie contient du code permettant de modifier certaines valeurs en xdatas ou en attributs sur différents objets regroupés en fonction d'identifiants ou de repère de pièce.

 

Ainsi, je peux faire un copier-coller d'un mur composé de plusieurs polylignes ayant un identifiant aléatoire en xdatas plus d'autres blocs de pièces qui recouvrent le mur et qui peuvent être composés de plusieurs pièces ayant un repère commun.

Ainsi, je duplique le mur et ses accessoires mais en générant de nouveaux identifiants et repères car ces identifiants me servent à regrouper les différentes pièces pour créer une nomenclature.

 

En espérant avoir été clair...

_______________________________

R.A.

Développeur AutoCAD C#.net

www.danialu.fr

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é