VtKp
Membres-
Compteur de contenus
88 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par VtKp
-
Bonjour a tous, J'ai de nombreuses macro Excel qui me permettent d'importer, d'exporter et de dessiner des entites d'AutoCad. Je suis dans Le cas ou Excel pilote AutoCAD. Si Vba est ammene a disparaitre d'AutoCAD, mes macros ne marcheront plus normal Mais comment en vb net et surtout Quel logiciel de programmation gratuit dois Je utiliser pour Developper des applications avec une interface UserForm pour les remplacer. Par contre, rassurez moi, Vba ne va pas disparaitre d'Excel car ce serait vraiment la galere la. J'ai Vu qu'Autodesk conseille de migrer vers Le vb. Net Mais il y a tres peu d'exemples sur les codes Autocad en vb. net. Mais peut on en vb.net piloter Excel et Autocad avec une seule interface ? Merci par avance de vos eclaircissement. John
-
Bonjour a tous, J'ai de nombreuses macro Excel qui me permettent d'importer, d'exporter et de dessiner des entites d'AutoCad. Je suis dans Le cas ou Excel pilote AutoCAD. Si Vba est ammene a disparaitre d'AutoCAD, mes macros ne marcheront plus normal Mais comment en vb net et surtout Quel logiciel de programmation gratuit dois Je utiliser pour Developper des applications avec une interface UserForm pour les remplacer. Par contre, rassurez moi, Vba ne va pas disparaitre d'Excel car ce serait vraiment la galere la. J'ai Vu qu'Autodesk conseille de migrer vers Le vb. Net Mais il y a tres peu d'exemples sur les codes Autocad en vb. net. Mais peut on en vb.net piloter Excel et Autocad avec une seule interface ? Merci par avance de vos eclaircissement. John
-
Bonjour Fraid, Avec une transformation d'Helmert, les résultats sont tous à faits satisfaisant. Voici une ligne de commande DOS pour CirceBatch en modefichier, à toi de l'adapter selon tes besoins "C:\CirceBatchDos\CirceBatch.exe" -init "Circe.ini" -mode 1 -type 2 -sys1 997 -sys2 547 -alt 2 019 -typcoor1 3 150 -typcoor2 3 149 -f1 1 "C:\TMP\SEMIS_COR.txt" -f2 1 "C:\TMP\SEMIS_FIN.txt" Cette ligne est dans un fichier bat accessible directement depuis C:/ et dans mon lisp, j'ai (command "sh" "c:/TMP/LAMBERTII-RGF93.bat") qui correspond au nom de mon fichier. Quand je dis 15min, c'est pour un nombre de points supérieurs à 300 000. Sinon pour 1000 à 3000 points environ, le lisp tourne 2-3min. J'ai fais ca surtout (comme indiqué dans le lien que tu as mis précedent) pour pouvoir transformer des fichiers depuis n'importe quel poste sans être obligé d'avoir Covadis qui le fais très bien d'ailleurs. Voila tout, En espérant t'avoir éclairé. John
-
Bonjour a tous J'ai une liste de points sous Excel du type numéro X Y Z Comment faire pour utiliser ces points et tracer la polyligne correspondante sous Autocad par Vb net ? Je dois migrer un certain nombre de programme de Vba en Vb. Net D'ou ma question ? Et d'autre part, une autre question qui ne concerne pas ce sujet mais qui demande une réponse simple, Je lance certains de mes programmes depuis excel pour insérer des blocs, des textes et autres entites, si Vba disparait d'Autocad mais pas d'Excel dans les années futures' dois je quand même migrer toutes mes applis vers le Vb.net ? Merci par avance de vos réponses. John
-
Bonjour Fraid J'ai eu pour ma part le même probleme que toi un moment a savoir transformer un fichier d'un système a un autre via Circebatch. J'ai en ce qui me concerne fais comme suit : - exporter toutes les coordonnes possibles de mon dessin (ligne, polyligne, blocs,...) - converti le fichier d'export d'un système a l'autre avec Circebatch - reouvre le fichier résultat pour calculer une transformation d'Helmert - change par une matrice de transformation l'orientation et la position de tout mon dessin - compare les résultats obtenues avec un nouvel export des coordonnes etle fichier résultat de circé pour calcul des différences et des emq Tout ça en lisp La routine tourne pendant 15min selon le nombre de points a traiter mais les résultats sont la. Ne marche comme tu sis que sur un petit chantier par contre. Cette démarche m'a évite de nombreux problèmes car connaitre le retour d'une ligne de commande Dos avec Autocad, la je ne vois vraiment pas. En espérant t'avoir éclaire John
-
Bonjour Desole pour cette reponse tardive Mais en effete c'était ça le problem Merci encore
-
Dans Outils, References, j'ai coché toutes les dll relatives à Autocad. Désormais je n'ai plus le problème précédent mais le code vba excel plante à la ligne surligné dont je remets le code pour être sur qu'on parle bien de la même chose Private Sub CommandButton1_Click() Dim AcadApp As AutoCAD.AcadApplication Dim SelSet As AutoCAD.AcadSelectionSet Dim FilterType(0) As Integer Dim FilterData(0) As Variant Dim FiltersType, FiltersData As Variant Dim i, Row, j, Column As Integer Dim Entity As AcadEntity Dim BlocRef As AcadBlockReference Dim Attributes As Variant Dim ColumnExist As Boolean ' Efface toutes les données contenues dans la feuille Range("1:65536").ClearContents ' On demande le nom du fichier à ouvrir Dim Filename As Variant Filename = Application.GetOpenFilename("Dessins AutoCAD (*.dwg), *.dwg") If Filename = False Then Exit Sub End If Cells(1, 1).Value = Filename ' Connexion avec AutoCAD (on le lance si il n'est pas en cours d'exécution) On Error Resume Next Set AcadApp = GetObject(, "AutoCAD.Application") On Error GoTo 0 If AcadApp Is Nothing Then Set AcadApp = New AutoCAD.AcadApplication End If ' On ouvre le fichier DWG dans AutoCAD ou on l'active si il est déjà ouvert Dim Opened As Boolean Opened = False Dim Dwg As AcadDocument For Each Dwg In AcadApp.Documents If StrComp(Dwg.FullName, Cells(1, 1).Text, vbTextCompare) = 0 Then Dwg.Activate Opened = True End If Next If Not Opened Then [surligneur] AutoCAD App.Documents.Open(Cells(1, 1).Text)[/surligneur] End If ' On remets Excel au premier plan (le lancement d'AutoCAD désactive la fenêtre Excel) Application.Visible = True ' Remplissage de l'entête du tableau Cells(3, 1).Value = "Nom du bloc" Cells(3, 2).Value = "Handle" Row = 4 ' 1ère ligne du tableau ' On crée un jeu de sélection ou on le récupère si il existe déjà On Error Resume Next Set SelSet = AcadApp.ActiveDocument.SelectionSets.Add("SELSET") If Err <> 0 Then Set SelSet = AcadApp.ActiveDocument.SelectionSets.Item("SELSET") SelSet.Clear End If ' On prépare un filtre de sélection sur les insertions de bloc FilterType(0) = 0 FilterData(0) = "INSERT" FiltersType = FilterType FiltersData = FilterData ' Sélection des entités SelSet.Select acSelectionSetAll, , , FiltersType, FiltersData ' On balaye le jeu de sélection For i = 0 To SelSet.Count - 1 Set Entity = SelSet.Item(i) ' Si l'objet est une insertion de bloc If Entity.ObjectName = "AcDbBlockReference" Then ' On précise le type de l'objet pour pouvoir accéder à ses propriétés et ' ses méthodes spécifiques Set BlocRef = Entity ' Si il a des attributs If BlocRef.HasAttributes Then Cells(Row, 1).Value = BlocRef.Name Cells(Row, 2).Value = "'" & BlocRef.Handle ' On les récupére Attributes = BlocRef.GetAttributes ' On parcourt le tableau For j = LBound(Attributes) To UBound(Attributes) ' On recherche si une colonne existe déjà pour cette étiquette d'attribut Column = 3 ColumnExist = False While Not IsEmpty(Cells(3, Column)) If Cells(3, Column).Text = Attributes(j).TagString Then ' Une colonne existe, on la remplit avec la valeur de l'atribut Cells(Row, Column).Value = Attributes(j).TextString ColumnExist = True End If Column = Column + 1 ' On passe à la colonne suivante Wend If Not ColumnExist Then ' Aucune colonne n'existe, on en crée une et on la remplit Cells(3, Column).Value = Attributes(j).TagString Cells(Row, Column).Value = Attributes(j).TextString End If Next ' Attribut suivant ' PROP DYN Attributes = BlocRef.GetDynamicBlockProperties ' On parcourt le tableau For j = LBound(Attributes) To UBound(Attributes) ' On recherche si une colonne existe déjà pour cette étiquette d'attribut Column = 3 ColumnExist = False While Not IsEmpty(Cells(3, Column)) If Cells(3, Column).Text = Attributes(j).PropertyName Then ' Une colonne existe, on la remplit avec la valeur de l'atribut Cells(Row, Column).Value = Attributes(j).Value ColumnExist = True End If Column = Column + 1 ' On passe à la colonne suivante Wend If Not ColumnExist Then ' Aucune colonne n'existe, on en crée une et on la remplit Cells(3, Column).Value = Attributes(j).PropertyName Cells(Row, Column).Value = Attributes(j).Value End If Next ' Propriété dyn suivante Row = Row + 1 ' Ligne suivante End If End If Next MsgBox "Les attributs du dessin " & Cells(1, 1).Text & " ont été extraits avec succès." End Sub Et en elevant cette ligne, le code fonctionne très bien Pourquoi ? Je veux quand même le faire ce contrôle avec le IF open ? Merci par avance de votre aide
-
Bonjour à tous, Généralement habitué au lisp, j'aimerais faire marcher cette macro [surligneur] depuis Excel[/surligneur] mais le code plante à la ligne Sub EnvoyerVersAutoCAD() [surligneur] Dim AcadApp As AutoCAD.AcadApplication[/surligneur] Merci de me confirmer l'utilisation de ce code, A partir de Vba Excel, il s'agit d'extraire les attributs d'un dessin Autocad Non il faut bien copier-coller le code ci-dessus dans un vba Excel et non dans un vba Autocad De plus, ne faut-il pas avoir des Dll d'installer ou autre pour permettre la communication d'Excel à Autocad ? Ce qui expliquerai peut être l'erreur de compilation Ou sinon merci de m'indiquer la procédure pour pouvoir utiliser ce code depuis Excel avec un fichier Autocad ouvert. Merci par avance de votre aide.
-
Bonjour a tous, J'ai une Liste de points et j'aimerais connaitre Le moyen de faire une polyligne 3d a partir de cette Liste avec entmake. J'ai tout essaye Mais Je ne vois pas comment inserer les SEQUEND dans l'entmake ??? Merci par avance de votre aide. P
-
Bonjour Gile Merci pour cette réponse. Oui le but est d'empecher le quidam d'accéder aux codes sources d'un Lisp car développé pour remplacer des commandes basiques ou plus compliquée de Covadis. N'y a t-il pas moyen (je pense que c'est le plus simple) de faire un répertoire accessible que par un mot de passe et mettre tous les lisps dedans de manière à les charger à chaque démarrage d'Autocad ? Merci par avance de ton aide.
-
Merci Fraid pour ta réponse. Mais tu peux copier un fichier Fas sur n'importe quel support et le coller sur le DD d'une autre machine. Ou alors, comment peux t-on protéger un dossier dans Windows avec acces par mot de passe ? Ainsi, on chargerai le fichier Fas à chaque démarrage d'Autocad et personne ne pourrait y accéder depuis le repértoire protégé. Si vous avez des réponses, merci par avance. Vtkp
-
Bonjour Patrick Pourrais tu nous en dire plus sur la methode Que t'emploi pour Creer un executable qui t'installe tous les lisp ou du moins se charge a chaque demurrage d'Autocad via Autoload ? Merci pR avance
-
Bonjour, Ce petit bout de code non testé retourne normalement (je ne l'ai pas testé mais fait comme çà) la liste des attributs de ton bloc en insérant devant ce code un (setq ent (car (entsel))) et après (if (= (cdr (assoc 0 (entget ent))) "INSERT" ) (if (= (cdr (assoc 66 (entget ent))) 1) (progn (setq liste nil) (while (if ent (not (= (cdr (assoc 0 (entget ent))) "SEQEND"))) (if (= (cdr (assoc 0 (entget ent))) "ATTRIB") (setq liste (append liste (list (cdr (assoc 1 (entget ent))))))) (setq ent (entnext ent)) ) ) (setq liste nil) ) ) ca devrait le faire VtKp
-
Bonjour et Merci a tous pour vos reponses, Bryce Le but est de faire les plans individual des lots d'un lotissement Donc cette routine de Gile (Merci encore) me sera tres utile car des lord Je Peux zoomer et faire une presentation sur un lot donnee Merci De votre aide
-
Bonjour a tous Je pense qu'il faudrait faire une recherche texte du numero de lot Mais après Vient Le problem de Trouver la polyligne englobante et la Je ne void pas comment faire serieux ...... Merci par avance de votre aide
-
Je me casse la tete depuis une semaine sur ce probleme sans vraiment Trouver dd solution. Merci encore de votre aide [Edité le 17/4/2011 par VtKp]
-
Bonjour à tous, J'ai une question sur ce post. Je me trouve avec un fichier parcellaire ou je dois faire des présentations de certaines parcelles. Comment faire pour sélectionner la polyligne 2D fermée qui englobe par exemple un texte bien précis et par exemple la mettre en couleur ? Etant donné que mon texte est le numéro de lot par exemple. Merci par avance de votre aide.
-
Ca marche très bien Tramber avec le (dcl_ComboBox_SetProperty xd_PT1_Form_CH1_CBOX3 "cursel" i) Merci de ton aide
-
Bonjour Tramber, Désolé de te répondre tardivement mais j'étais en déplacement cette semaine. Voici mon code (defun c:ch1 (/ lst1 lst2 lst3 d i num_ch result c:xd_PT1_Form_CH1_OnInitialize c:xd_PT1_Form_CH1_TBUT1_OnClicked c:xd_PT1_Form_CH1_TBUT2_OnClicked c:xd_PT1_Form_CH1_TBUT3_OnClicked c:xd_PT1_Form_CH1_CBOX2_OnSelChanged ) (setvar "CMDECHO" 0) (command "OPENDCL") (dcl_Project_Load "C:/Users/Christophe/xd_PT1.odcl" T) (setq result 3) (setq num_ch " ") (setq d 6) (setq i 6) (setq lst1 (list "Projeté" "Existant" ")) (setq lst2 '("C1" "C2" "C3" "C4" "Inconnu")) (setq lst3 '("Dim C1" "Dim C2" "Dim C3" "Dim C4" "Inconnu")) (defun c:xd_PT1_Form_CH1_OnInitialize (/) (dcl_ComboBox_Clear xd_PT1_Form_CH1_CBOX1) (dcl_ComboBox_AddList xd_PT1_Form_CH1_CBOX1 lst1) (dcl_ComboBox_SetCurSel xd_PT1_Form_CH1_CBOX1 2) (dcl_ComboBox_Clear xd_PT1_Form_CH1_CBOX2) (dcl_ComboBox_AddList xd_PT1_Form_CH1_CBOX2 lst2) (dcl_ComboBox_SetCurSel xd_PT1_Form_CH1_CBOX2 d) (dcl_ComboBox_Clear xd_PT1_Form_CH1_CBOX3) (dcl_ComboBox_AddList xd_PT1_Form_CH1_CBOX3 lst3) (dcl_ComboBox_SetCurSel xd_PT1_Form_CH1_CBOX3 i) (dcl_ComboBox_Clear xd_PT1_Form_CH1_CBOX4) (dcl_ComboBox_AddList xd_PT1_Form_CH1_CBOX4 (list "Vrai" "Faux")) (dcl_ComboBox_SetCurSel xd_PT1_Form_CH1_CBOX4 0) (dcl_Control_SetText xd_PT1_Form_CH1_TBOX1 num_ch) (dcl_Control_SetText xd_PT1_Form_CH1_TBOX2 " ") ) (defun c:xd_PT1_Form_CH1_TBUT1_OnClicked (/ typ) (setq typ (list (dcl_ComboBox_GetEBText xd_PT1_Form_CH1_CBOX1) (dcl_ComboBox_GetEBText xd_PT1_Form_CH1_CBOX2) (dcl_ComboBox_GetEBText xd_PT1_Form_CH1_CBOX3) (dcl_Control_GetText xd_PT1_Form_CH1_TBOX1) (dcl_Control_GetText xd_PT1_Form_CH1_TBOX2) (dcl_ComboBox_GetEBText xd_PT1_Form_CH1_CBOX4) (dcl_Control_GetText xd_PT1_Form_CH1_TBOX3) (dcl_Control_GetText xd_PT1_Form_CH1_TBOX4) )) (dcl_Form_Close xd_PT1_Form_CH1) (princ "\n") (princ typ) ) (defun c:xd_PT1_Form_CH1_TBUT2_OnClicked (/) (dcl_Form_Close xd_PT1_Form_CH1) (prompt "\nAucune entité est renseignée.") ) (defun c:xd_PT1_Form_CH1_TBUT3_OnClicked (/) (setq d (dcl_ComboBox_GetCurSel xd_PT1_Form_CH1_CBOX2)) (setq i (dcl_ComboBox_GetCurSel xd_PT1_Form_CH1_CBOX3)) (dcl_Form_Close xd_PT1_Form_CH1 4)) [surligneur] (defun c:xd_PT1_Form_CH1_CBOX2_OnSelChanged (i txt/) (setq i (dcl_ComboBox_GetCurSel xd_PT1_Form_CH1_CBOX2)) (dcl_ComboBox_SetCurSel xd_PT1_Form_CH1_CBOX3 i) )[/surligneur] (while (< 2 result) (setq result (dcl_Form_Show xd_PT1_Form_CH1)) (cond ((= 4 result) (setq num_ch (SelectText)) (setq i i) (setq d d) ) ) ) (setvar "CMDECHO" 1) (princ) ) Je bloque sur la ligne surligné comme indiqué dans le message précedent. Merci aussi de m'indiquer si j'adapte la bonne méthode pour programmer en lisp en mettant le OnInitialise dans la routine principale ou si je dois l'appeler comme une fonction simple. Merci encore de ton aide.
-
Bonjour à tous, Dés fois en trop s'entêtant, la réponse est souvent sous nos yeux. Pour mon histoire de saut de ligne, Gile a donné la bonne réponse mais ca ne fonctionnait pas car j'avais coché pour le textbox onMaxText qui limite le nombre de caractères d'une chaine du coup évidemment le saut de ligne ne pouvait fonctionner. Je confirme donc qu'avec l'option Multiline String, ca fonctionne très bien. Maitenant, je suis confronté à un autre problème. J'ai deux listbox qui sont alimenter par deux listes différentes mais qui ont le même nombre d'éléments. Je souhaiterais si je modifie la valeur de la 1ere listbox en mettant par exemple la valeur sur le 3ième élement de ma première liste, la seconde listbox se change automatiquement est pointe sur le 3ième élement de ma seconde liste. Ceci ne serait valable que si je modifie la valeur de ma première listbox, mais pas dans le sens contraire, si par exemple, je modifie la valeur de ma seconde listbox, je ne veux pas qu'on modifie la première. Je veux juste le cas ou si l'utilisateur met la nième valeur de ma première listbox, la seconde listbox pointe elle aussi sur le nième élement de ma seconde liste. J'espère avoir été assez explicite. Et honnêtement, j'ai tout essayé. Avec l'option, SelChanged, SetFocus, DropDown, EditChanged mais rien n'y fait. et même en agissant avec le dcl_Form_Close en attribuant des valeurs dans une boucle mais rien...... Peut être voire surement que je m'y suis mal pris. En attendant votre aide, merci.
-
Bonjour Tramber, J'ai pas pu te répondre plus tôt car j'étais en déplacement cette semaine. J'ai essayé avec une listBox mais on ne peut éditer de texte à l'intérieur. Ou alors je ne vois pas de quoi tu parles. Merci pour tes éclaircissements
-
Bonjour Gile J'ai essaye avec la propriete Multiligne String dans Opendcl Mais ca ne marche pas. Je travaille sous Opendcl et pour les edit box il y a une function qui limite Le nombre de caracteres Mais Comment faire pour quand Le nombre maximum de caracteres est atteint on indique a l'edit box de faire un Saut de ligne. Merci par avance de votre aide
-
Ou bien si ce n'est pas possible en dcl, comment avec OpenDcl et un edit_box faire un saut de ligne ? J'ai bien essayé avec OpenDcl en limitant le nombre de carractères à 25 et avoir un saut de ligne sur le 26ième caractère mais je ne trouve pas l'option ou le control permettant de le faire. merci par avance de votre aide
-
Bonjour à tous, Ma question est je pense toute simple. Peut-on sans passer par une boite de dialogue faite avec OpenDcl paramétrer la taille d'un edit_box en DCL ? Je voudrais agrandir la taille d'une edit_box sur 2 ou 3 lignes par exemple. J'ai bien essayé les termes heigth ou fixed_heigth = true mais rien n'y fait, j'ai toujours mon edit_box dans mon dcl qui apparait sur une ligne. Je sais que l'on peut modifier le nombre de caractères entré par edit_width donc sur la largeur mais sur la hauteur ??? Merci par avance de vos réponses.
