rom1_am Posté(e) le 2 mars 2009 Posté(e) le 2 mars 2009 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#.netwww.danialu.fr
bseb67 Posté(e) le 2 mars 2009 Posté(e) le 2 mars 2009 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 fichiervers 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...
rom1_am Posté(e) le 2 mars 2009 Auteur Posté(e) le 2 mars 2009 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#.netwww.danialu.fr
bseb67 Posté(e) le 2 mars 2009 Posté(e) le 2 mars 2009 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 autreil 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...
Patrick_35 Posté(e) le 2 mars 2009 Posté(e) le 2 mars 2009 Salut Je ne connais pas ton niveau en lisp/vlisp pour faire ce qu'indique bseb67Un 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
rom1_am Posté(e) le 3 mars 2009 Auteur Posté(e) le 3 mars 2009 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'ongletL'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#.netwww.danialu.fr
Patrick_35 Posté(e) le 3 mars 2009 Posté(e) le 3 mars 2009 Je pense comprendre ce que tu souhaites faire Pourquoi ne pas utiliser le copier/coller d'autocad, même en passant par un SendCommand @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
rom1_am Posté(e) le 3 mars 2009 Auteur Posté(e) le 3 mars 2009 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#.netwww.danialu.fr
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