John-cad
Membres-
Compteur de contenus
24 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par John-cad
-
Bonjour à tous le lisp en réponse du 12 juillet 2016 ne marche plus avec acd2013 et libre office 5.1.6.2 sous windows 10 alors que sous windows7 avec les mêmes logiciels ca fonctionne très bien savez vous pourquoi ce bug ? faut-il installer un appli vba pour libre office sous windows 10 ? Merci par avance pour vos réponses John
-
Bonjour à tous désolé de ne pas avoir répondu plus tôt mais j'étais en plein déplacement professionnel l'idée de départ était en fait de connecter calc de libreoffice avec autocad version pleine n'étant pas un feru de programmation en basic ou vba, j'ai abandonné ce petit code basic et je l'ai réaliser en lisp tout court par contre, pour des besoins professionnels, j'ai dû acquérir un autocad lt acad lt ne supporte normalement ni le vba ni le lisp mais pensez vous qu'on puisse tout de même piloter acadlt à partir de calc de libre office en language basic ? et donc réaliser ce petit programme en basic de zoom au point à partir de calc j'ai essayé le code décrit par lommig mais il n'y a pas de connexion possible à priori Merci par avance de vos retours John
-
Bonjour Lommig Merci tout d'abord pour ce début de code et désolé pour ma réponse tardive j'étais débordé par le travail en effet, en utlisant ta 1ere méthode, j'arrive depuis calc de libre office à créer quand Autocad est ouvert un nouveau calque mais dès que je veux lui faire insérer un texte ca plante et bien sûr je n'ai pas moyen de voir si c'est la variable qui fait défaut ou si c'est la commande en elle-même ci-joint le bout de code que j'ai essayé Sub zoom1() Dim oleService oleService = createUnoService("com.sun.star.bridge.OleObjectFactory") Dim VBS VBS = oleService.createInstance("MSScriptControl.ScriptControl") VBS.Language = "VBScript" Dim scr as String Dim fichier as Object Dim feuil as Object Dim cell as Object Dim row as Integer Dim num as String Dim ptx as Single Dim pty as Single Dim ptz as Single fichier = ThisComponent feuil = ThisComponent.Sheets.getByName(ThisComponent.CurrentController.ActiveSheet.Name) cell = ThisComponent.CurrentSelection row = cell.CellAddress.Row cell = feuil.getCellByPosition(0,row) num = cell.Value cell = feuil.getCellByPosition(1,row) ptx = cell.Value cell = feuil.getCellByPosition(2,row) pty =cell.Value cell = feuil.getCellByPosition(3,row) ptz = cell.Value 'MsgBox num & " " & ptx & " " & pty & " " & ptz scr=scr+" Public AcadApp "+Chr(10) scr=scr+" Set AcadApp = GetObject(,""AutoCAD.Application"") "+Chr(10) scr=scr+" Set AcadPlan = AcadApp.ActiveDocument "+Chr(10) ' Création du calque d'insertion du texte zoom scr=scr+" Set Newlayer = AcadApp.ActiveDocument.Layers.Add(""$ZOOM_PT"") "+Chr(10) scr=scr+" AcadApp.ActiveDocument.SetVariable ""CECOLOR"", ""1"" "+Chr(10) scr=scr+" AcadApp.ActiveDocument.ActiveLayer = Newlayer "+Chr(10) scr=scr+" Set Ptxt = AcadApp.ActiveDocument.ModelSpace.AddText(num, point_txt, 1.25) "+Chr(10) scr=scr+" Ptxt.Alignment = acAlignmentBottomCenter "+Chr(10) scr=scr+" Ptxt.TextAlignmentPoint = point_txt "+Chr(10) scr=scr+" AcadPlan.Regen acActiveViewport "+Chr(10) VBS.ExecuteStatement(scr) End Sub je ne vois pas comment on peut définir le point_txt à partir des coordonnées lu dans calc depuis le curseur, peut être sous forme de liste comme en lisp.... je sais pas pour résumer, dans mon fichier calc, j'ai des colonnes avec dans A le numéro du point, B l'abscisse, C l'ordonnée, D l'alimétrie je voudrais pouvoir insérer dans Autocad directement depuis calc un texte (mon numéro de point en fait) aux coordonnées XYZ de mon listing de points je vais continuer à chercher de mon côté voir si je trouve quelque chose même si mes connaissances en VB sont plus que limitées merci par avance de votre aide John
-
Peut-être que ma question est débile mais j'essaye quand même Si autocad accepte le vba d'Excel Il ne doit peut-être pas accepter le basic de calc libre office Cette question car dans le module macro vba de Microsoft on sélectionne les références de programme externe et librairies Sous calc module macro en basic je n'ai pas encore trouver de sélectionner ces mêmes références Quelqu'un les à t-il déjà vu en basic sous calc libre office ? Car selon la réponse je ne continue même plus ce programme Merci de vos retours
-
Bonjour J'ai retrouvé la macro excel qui me permettait de faire un zoom en insérant un texte sous Autocad selon des coordonnées XYZ qui se trouvent dans une feuille de calcul excel je voudrai passer cette macro sous calc de libre office pour le moment j'arrive seulement à afficher un message box avec les informations d'un point Nuémro et XYZ si vous avez des solutions pour passer d'une macro vba excel à une macro basic calc libre office, voici le code en question qui marchait très bien sous vba excel Sub Zoom 'Dim AcadApp As AcadApplication 'Dim Newlayer As AcadLayer 'Dim textStyle1 As AcadTextStyle 'Dim txt As String 'Dim NomModel As String 'Dim Ptxt As AcadText Dim fichier as Object Dim feuil as Object Dim cell as Object Dim row as Integer Dim num as String Dim ptx as Single Dim pty as Single Dim ptz as Single 'Set AcadApp = GetObject(, "AutoCAD.Application") ' On Error GoTo 0 ' If AcadApp Is Nothing Then ' Set AcadApp = New AutoCAD.AcadApplication ' End If fichier = ThisComponent feuil = ThisComponent.Sheets.getByName(ThisComponent.CurrentController.ActiveSheet.Name) cell = ThisComponent.CurrentSelection row = cell.CellAddress.Row 'If cell.CellAddress.Column <> 1 Then MsgBox "Cette colonne n'est pas valide" Exit Sub cell = feuil.getCellByPosition(0,row) num = cell.Value cell = feuil.getCellByPosition(1,row) ptx = cell.Value cell = feuil.getCellByPosition(2,row) pty =cell.Value cell = feuil.getCellByPosition(3,row) ptz = cell.Value MsgBox num & " - " & "X= " & ptx & " - Y= " & pty & " - Z= " & ptz ' Contrôle si Fichier Autocad dans Espace Object 'If NomModel <> "Model" Then MsgBox "Aucun point ne sera inséré dans l'espace papier.": Exit Sub 'If NomModel = "Model" Then 'Création du calque "ZOOM_PT" si absent 'Set Newlayer = AcadApp.ActiveDocument.Layers.Add("ZOOM_PT") 'AcadApp.ActiveDocument.SetVariable "CECOLOR", "1" 'AcadApp.ActiveDocument.ActiveLayer = Newlayer 'Création du style de texte "ZOOM_PT" si absent 'Set textStyle1 = AcadApp.ActiveDocument.TextStyles.Add("ZOOM_PT") 'textStyle1.fontFile = "C:\WINDOWS\Fonts\ARIAL.TTF" 'AcadApp.ActiveDocument.ActiveTextStyle = textStyle1 'Set Ptxt = AcadApp.ActiveDocument.ModelSpace.AddText(txt, point_txt, 1.25) 'Ptxt.Alignment = acAlignmentBottomCenter 'Ptxt.TextAlignmentPoint = point_txt 'ActiveCell.Interior.ColorIndex = "3" 'End If 'End If 'i = i + 1 'Acitve la cellule suivante 'Cells(i, j).Activate 'AcadApp.Visible = True 'Centre le zoom sur le texte 'AcadApp.ZoomCenter point_txt, 15 'Libère la mémoire de la varaible AcadApp 'Set AcadApp = Nothing End Sub j'ai mis pas mal de ' devant chaque ligne car sinon le programme n'arrête pas de planter sous calc je mets en pièce jointe un exemple de fichier calc en question extension .ods Merci par avance de votre aide John
-
Merci Patrick John
-
Bonjour Patrick et vraiment un grand merci pour ton aide sur ce post je n'y serai pas arrivé pas sinon, j'ai vu le jour je préconise l'utilisation de modèle writer avec extension ott car si l'utilisateur enregistre par mégarde le document odt au lieu de faire enregistrer sous, le modèle est foutu j'ai réajusté avec (defun init-oo-writer-carrez (/ oo-des openPar) (setq oo-app (vlax-create-object "com.sun.star.ServiceManager")) (setq oo-des (vlax-invoke oo-app 'createinstance "com.sun.star.frame.Desktop")) (setq oo-doc (vlax-invoke-method oo-des 'loadComponentFromURL (decodeurl (strcat "file:///" (vl-string-translate "\\" "/" "C:\\TMP\\modele.ott"))) "_blank" 0 (vlax-make-safearray vlax-vbVariant '(0 . 0)))) ) tout marche nickel les deux commandes marchent très bien pour l'entête et le pied de page pour une ligne uniquement mais quand on a différentes lignes à insérer, c'est vite le souk dans le fichier odt Merci encore on peut clôturer ce post Thanks higher Patrick and see you soon John
-
Salut Patrick j'ai essayé de remplacer dans la fonction le terme _blank par le chemin de mon modèle.ott mais rien n'y fait (defun init-oo-writer (/ oo-des openPar) (setq oo-app (vlax-create-object "com.sun.star.ServiceManager")) (setq oo-des (vlax-invoke oo-app 'createinstance "com.sun.star.frame.Desktop")) (setq oo-doc (vlax-invoke-method oo-des 'loadComponentFromURL "private:factory/swriter" "C:\\Users\\Utilisateur\\Desktop\\modele.ott" 0 (vlax-make-safearray vlax-vbVariant '(0 . 2)))) ) si vous avez des idées Merci John
-
Salut Merci Patrick pour ces réponses j'ai mis du temps à répondre car j'étais débordé ces derniers jours j'ai terminé mon lisp de création de rapport automatique, tout marche nickel et la mise en page se fait toute seule il me manque juste de pouvoir insérer une en-tête et un pied de page ou sinon d'ouvrir à l'ouverture de swriter un document type extension .ott John
-
Merci Patrick pour ton aide précieuse je vais pouvoir finaliser mon lisp avec la mise en page automatique John
-
Merci Patrick pour ces quelques lignes, qui changent la vie et évite de tout se taper à la main comme avant n'aurais tu pas par hasard aussi la commande pour l'alignement gauche droite ou centré ? et le tableau, je vais essayer de mon côté aussi merci encore john
-
petite avancée microbienne, en recherchant un peu sur le net pour le style du cursor, il doit falloir utiliser quelque chose du style ;; pour la taille du texte (vlax-invoke-method oo-txt 'setPropertyValue oo-obj CharHeight "14") ;; pour le style de texte (vlax-invoke-method oo-txt 'setPropertyValue oo-obj CharFontName "Arial") ;; pour l'alignement du texte (vlax-invoke-method oo-txt 'setPropertyValue oo-obj Alignment "Right") ;; pour la couleur du texte (vlax-invoke-method oo-txt 'setPropertyValue oo-obj CharColor "1") si vous avez des idées, merci John
-
il fautdrait aussi si possible trouver le moyen d'ouvrir un fichier modèle au démarrage du lisp, je sais écrire quelques lignes lisp mais là ca dépasse vraiment mes compétences merci John
-
Bonjour Patrick les trois lignes de ta réponse précédentes m'ont vraiment aidé à avancer sur mon lisp le paramètre Chr10 sert pour les sauts de lignes j'ai insérer des sauts de paragraphes avec (vlax-invoke-method oo-txt 'insertControlCharacter oo-obj 0 :vlax-false) qui permet de conserver les propriétés d'un paragraphe sans modifier tout le document j'arrive à écrire ce que je veux dans mon fichier writer de libre office mais la mise en forme est à revoir je n'ai pas par exemple trouver le moyen de modifier le style de texte, la taille du texte, la couleur du texte et de pouvoir insérer un tableau par exemple de 4 lignes et de 4 colonnes pour la couleur, j'ai essayé cela sans succés (vlax-invoke-method oo-txt 'setPropertyValue oo-obj "CharColor" "255") pour le tableau, sans succès non plus (setq oo-tabl (vlax-invoke oo-doc 'createInstance( "com.sun.star.text.TextTable"))) (vlax-invoke-method oo-tabl 'initialize 4, 4) (vlax-invoke-method oo-txt 'insertTextContent oo-obj, oo-tabl :vlax-false) j'ai essayé de prendre exemples sur ton code lisp mais rien n'y fait, avec ou sans virgule.... Merci encore de ton aide John
-
Bonjour Patrick les trois lignes de ta réponse précédentes m'ont vraiment aidé à avancer sur mon lisp le paramètre Chr10 sert pour les sauts de lignes j'ai insérer des sauts de paragraphes avec (vlax-invoke-method oo-txt 'insertControlCharacter oo-obj 0 :vlax-false) qui permet de conserver les propriétés d'un paragraphe sans modifier tout le document j'arrive à écrire ce que je veux dans mon fichier writer de libre office mais la mise en forme est à revoir je n'ai pas par exemple trouver le moyen de modifier le style de texte, la taille du texte, la couleur du texte et de pouvoir insérer un tableau par exemple de 4 lignes et de 4 colonnes pour la couleur, j'ai essayé cela sans succés (vlax-invoke-method oo-txt 'setPropertyValue oo-obj "CharColor" "255") pour le tableau, sans succès non plus (setq oo-tabl (vlax-invoke oo-doc 'createInstance( "com.sun.star.text.TextTable"))) (vlax-invoke-method oo-tabl 'initialize 4, 4) (vlax-invoke-method oo-txt 'insertTextContent oo-obj, oo-tabl :vlax-false) j'ai essayé de prendre exemples sur ton code lisp mais rien n'y fait, avec ou sans virgule.... Merci encore de ton aide John
-
Bonjour Patrick gege J'étais débordé cette semaine Merci pour vos réponses Je regarderai ca avec attention samedi et vous tiens au courant au plus tot John
-
Bonjour à tous Patrick si tu me lis, j'ai cherché de mon côté à avancer, j'ai repéré aussi cette discussion pour trouver des solutions lisp pour Word en utilisant ce code, j'arrive à ouvrir un fichier writer vierge (defun init-oo-writer (/ oo-des openPar obj) (setq oo-app (vlax-create-object "com.sun.star.ServiceManager")) (setq oo-des (vl-catch-all-apply 'vlax-invoke (list oo-app 'createinstance "com.sun.star.frame.Desktop"))) (setq openPar (vlax-make-safearray vlax-vbVariant '(0 . 2))) (setq obj (vlax-invoke-method oo-des 'loadComponentFromURL "private:factory/swriter" "_blank" 0 openPar)) ) (init-oo-writer) par contre, je n'arrive pas à trouver le moyen de récupérer le curseur pour écrire les textes qui m’intéressent dans le fichier vierge, ou même la variable du nouveau document afficher à l'écran je n'arrive pas non plus à voir les méthodes associés avec la commande (vlax-dump-object xxx T) si vous avez des idées je suis preneur l'idéal serait les mêmes exemples que dans le post Word et après je me débrouille Merci par avance John
-
Bonjour à tous j'ai un problème avec un fichier de points enregistré avec calc de libre office extension ods mon fichier calc est un fichier de points classique colonné avec Numéro X Y Z j'ai fais sous calc libre office en VB une macro pour récupérer le contenu des cellules d'un fichier calc je voudrais en VB sous libre office calc par une macro insérer un texte (numéro du point) aux coordonnées de celui-ci j'avais la macro en VBA,je ne la retrouve plus et sous VB, je suis perdu le but serait dans un premier temps dans la macro trouver le fichier ouvert avec AcadApplication je crois puis d'insérer un texte avec AcadApp.ActiveDocument.ModelSpace.AddText en définissant l'index, le point d'insertion et une hauteur Si vous avez des idées, merci par avance
-
Bonjour à tous Suite à mon dernier post, peux t-on de la même facon que calc sous libre office, écrire depuis Autocad via un lisp dans writer de libre office ? je pense qu'en modifiant légérement les fonctions ci-dessous de vincentp010 (que je remercie d'ailleurs sincérement), on pourrait y arriver, ce code est utilisé pour ouvrir un fichier calc de libre office (defun init-oo (/ oo-des openPar obj feu) (setq oo-app (vlax-create-object "com.sun.star.ServiceManager")) (setq oo-des (vl-catch-all-apply 'vlax-invoke (list oo-app 'createinstance "com.sun.star.frame.Desktop"))) (setq openPar (vlax-make-safearray vlax-vbVariant '(0 . 2))) (setq obj (vlax-invoke-method oo-des 'loadComponentFromURL "private:factory/scalc" "_blank" 0 openPar)) ;liste des feuilles (setq feu (vl-catch-all-apply 'vlax-get (list obj 'sheets))) ;feuille 1 par defaut (setq tro (vlax-invoke feu 'getbyindex 0)) (vl-catch-all-apply 'vlax-invoke (list (vlax-get obj 'CurrentController) 'SetActiveSheet tro)) ) (defun write-cel (name x) (setq cel (vl-catch-all-apply 'vlax-invoke (list tro 'getCellRangeByName name))) (vl-catch-all-apply 'vlax-put (list cel (if (numberp (read x)) 'value 'string) (if (numberp (read x)) (vl-string-subst "," "." x) x) )) ) sachant qu'à l'époque j'avais déjà programmé sous Word un petit truc et j'avais utilisé la commande vlax-dump-objet je crois pour voir les différentes méthodes disponibles pour la mise en page si vous avez quelques exemples, je suis preneur le but étant de pouvoir écrire le contenu/index de plusieurs textes sous Autocad dans libre office writer directement Merci par avance pour vos réponses John
-
Patrick plus j'approfondi et plus les deux fonctions nouveau_fichier et ouvrir_fichier me posent problèmes j'ai fais plusieurs tests avec libre office calc et Autocad 2013 si le fichier existe avec extension ods, pas de problème le fichier s'ouvre en lançant depuis autocad mais on ne peut pas faire de nouveau fichier sans en préciser le nom ca me pose problème car dans un dessin, j'aurai par exemple plusieurs exports de polylignes et pas en même temps, si par mégarde, je laisse le fichier export de la 1ere polyligne ouvert, il ne veut pas m'en ouvrir un second alors qu'avec les fonctions de vincento10, je n'ai pas ce problème et utiliser plusieurs fois successivement, le lisp crée plusieurs fichiers sansnom1, sansnom2, ...sansnom10 et ca marche nickel du coup, j'ai l'impression qu'avec ta fonction nouveau_fichier et la présence de Hidden dans cet fonction, le lisp tourne mais n'affiche rien à l'écran et buge quand on veut créer un nouveau fichier ods dans mon cas, les fonctions de vincentp010 sont plus simples à utiliser par contre, il manque une fonction essentielle de vincentp10, celle de lire une cellule et là je vais utiliser tes fonctions qui sont quand même assez complètes. On peut clore ce sujet. Merci à tous de vos réponses
-
Bonjour Patrick Oui on fera un nouveau sujet avec libre office et writer je termine mes fonctions export vers libre office et je m'en occupe Merci encore pour votre aide John
-
Bonjour à tous Je confirme avec les fonctions de Patrick ca marche nickel Ceci étant dit, pour écrire sous libre office writer depuis autocad on ne peut pas utiliser les mêmes fonctions J'ai des quantités de rapport bien structuré à faire depuis autocad et je voudrais les rédiger par lisp avec writer plutôt que Word et ces bandits de Microsoft avec leurs licences mensuelles et abonnement c'est vraiment une escroquerie Word et Excel payant par mois Il serait peut-être judicieux de clôturer ce post et en ouvrir un autre ? Non ? Merci par avance de vos retours John
-
Bonjour à tous Merci pour vos réponses j'ai pu arriver à mes fins avec ce petit lisp (defun c:exp2 (/ pol lst1 i d pt) (vl-load-com) (init-oo) (write-cel "A1" "Numéro") (write-cel "B1" "X") (write-cel "C1" "Y") (write-cel "D1" "Z") (setq pol (car (entsel "\nSélectionner la polyligne 3D à exporter les sommets : "))) (setq lst1 (alrpolyt pol)) (setq i 0) (setq d 1) (repeat (length lst1) (setq pt (nth i lst1)) (write-cel(strcat "A" (rtos (1+ d) 2 0)) (rtos (1+ i) 2 0)) (write-cel (strcat "B" (rtos (1+ d) 2 0)) (rtos (car pt) 2 6)) (write-cel (strcat "C" (rtos (1+ d) 2 0)) (rtos (cadr pt) 2 6)) (write-cel (strcat "D" (rtos (1+ d) 2 0)) (rtos (caddr pt) 2 6)) (setq d (1+ d)) (setq i (1+ i)) ) (vlax-release-object oo-app) (prin1) ) la function alrpolyt (defun alrpolyt (npoly / lst_pl entpoly te coor1 x y z ptx) (setq lst_pl nil) (setq entpoly (entget npoly)) (setq te (cdr (assoc 0 entpoly))) (setq npoly (entnext npoly)) (while (/= te "SEQEND") (setq entpoly (entget npoly)) (setq coor1 (cdr (assoc 10 entpoly))) (setq x (car coor1)) (setq y (cadr coor1)) (setq z (caddr coor1)) (setq ptx (list x y z)) (setq lst_pl (cons ptx lst_pl)) (setq npoly (entnext npoly)) (setq entpoly (entget npoly)) (setq te (cdr (assoc 0 entpoly))) ) (if lst_pl (setq lst_pl (reverse lst_pl))) ) je m'en sers pas mal et ca va certainement servir Patrick j'ai essayé tes fonctions mais pas moyen de les faire marcher Dernière question vincentp010, n'aurais tu pas par hasard une fonction cette fois ci pour lire une cellule dans un fichier calc de libre office Merci par avance à vous tous John
-
Bonjour à tous Existe t-il des commandes lisp pour écrire ou lire dans un fichier calc de libre office ? J'ai pas mal de routines lisp pour exporter des infos (textes, polylignes,blocs avec attributs) dAutocad vers Excel grâce aux nombreuses fonctions de gile et Patrick Excel devenue disponible seulement à la location annuel ou mensuel, c'est vraiment du vol sérieux je veux passer toutes mes commandes lisp d'Excel à calc de libre office 5 Existe t-il donc des fonctions comme openexcel, putcell ou encore getcell pour me permettre de modifier mes lisps et migrer tout vers calc libre office? Merci par avance de votre aide John
