Aller au contenu

Hyppolight

Membres
  • Compteur de contenus

    35
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Hyppolight

  1. Bonjour, par script : -xref t * Commande: -xref Entrez une option [?/Lier/déTacher/Chemin/TYpechemin/Décharger/Recharger/Superposer/Attacher] <Attacher>: t Entrez le(s) nom(s) de Xréf à détacher: *
  2. Bonjour, Tout d'abord merci pour cette réponse rapide... Je pense avoir trouver une solution VB.NET plus ou moins équivalente... Après plusieurs tests je me suis rendu compte qu'il était préférable (pour ce problème de lenteur) de supprimer les records puis de les recréer que de chercher à les mettre à jour. J'ai donc utiliser la méthode suivante dans ma classe d'objet. 'Mise à jour des attributs de bloc et des données d'objets depuis les variables Public Sub MAJ_OD_from_VAR_V2(Block As BlockReference, OD_Tbl_Name As String) Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument Dim db As Database = doc.Database Dim ed As Editor = doc.Editor Dim tr As Transaction = db.TransactionManager.StartTransaction() Using tr Try Dim odTables As Tables = HostMapApplicationServices.Application.ActiveProject.ODTables Dim tbl As Autodesk.Gis.Map.ObjectData.Table = Nothing Dim recs As ObjectData.Records = Nothing Dim rec As ObjectData.Record = Nothing Dim mapVal As Autodesk.Gis.Map.Utilities.MapValue = Nothing Dim id As ObjectId = Block.ObjectId Dim dbObj As DBObject = tr.GetObject(id, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite) Select Case OD_Tbl_Name Case "00_GENERAL" tbl = odTables.Item("00_GENERAL") recs = tbl.GetObjectTableRecords(0, id, Constants.OpenMode.OpenForWrite, False) 'Suppression des anciennes informations Dim ie As IEnumerator ie = recs.GetEnumerator ie.MoveNext() recs.RemoveRecord() 'Ajout des nouvelles informations rec = ObjectData.Record.Create tbl.InitRecord(rec) mapVal = rec(0) mapVal.Assign(LOT) mapVal = rec(1) mapVal.Assign(TRONCON) mapVal = rec(2) mapVal.Assign(SEGMENT) mapVal = rec(3) mapVal.Assign(ANTENNE) mapVal = rec(4) mapVal.Assign(CLE) mapVal = rec(5) mapVal.Assign(NOM_COMM) mapVal = rec(6) mapVal.Assign(INSEE) mapVal = rec(7) mapVal.Assign(NOM_VOIE) mapVal = rec(8) mapVal.Assign(GEST_VOIE) tbl.AddRecord(rec, dbObj) 'Select case ... End Select tr.Commit() tr.Dispose() recs.Dispose() rec.Dispose() mapVal.Dispose() Catch ex As Exception ed.WriteMessage(ex.ToString & vbCr) MsgBox(ex.ToString) End Try End Using End Sub Encore merci et bon week-end.. Hyppo
  3. Bonjour, Je développe un programme (.NET) dont une partie sert à la mise de données d'objets présents dans des polylignes ou blocs. J'ai associé mes envois de commande au double-clic sur des entités (dans la partie CUI (ou IUP)): - double-clic sur une polyligne : affichage d'une boite de dialogue spécifique en fonction du calque de la polyligne - double-clic sur un bloc : affichage d'une boite de dialogue spécifique en fonction du nom du bloc Les boites de dialogues associées charge les informations (données d'objets, attributs de blocs, propriétés dynamiques de blocs) dans des textboxs, comboboxs... (principalement des comboboxs pour limiter les choix) L'utilisateur peut donc mettre à jour les informations dans la boite de dialogue Lors de la fermeture de la boite de dialogue, les informations sont mis à jour dans l'entité sélectionnée (double-cliquée) Le programme en lui-même fonctionne très bien sauf qu'il arrive certaines fois que lors de la MAJ (mise à jour) des OD (object data = données d'objets) ne se fasse pas instantanément Cela n'est pas très grave vous me direz.. sauf que, temporairement (quelques secondes), les tables de données d'objets associés normalement au fichier disparaissent (non visible dans les propriétés de l'entité sélectionnée), puis se ré affichent une fois MAJ. Ce qui entraine des erreurs en cas de demande de modification d'une entité (double-clic) qui est en train d'être mise à jour : les tables d'OD n'étant temporairement pas associées à l'entité, leur demande de chargement pour charger la boite de dialogue engendre un message d'erreur voire un plantage d'AutoCAD Map. Avez-vous déjà rencontré ce problème?
  4. Bonjour, Il n'y a donc pas d'autre méthode que la méthode avec bande buffer... Merci pour vos idées, c'est ce sur quoi j'étais parti... Le problème étant plus compliqué : toutes les communes d'un département à traiter via des scripts et développement VB.NET En tout ca merci de me confirmer qu'il n'existe pas de méthologie interne à AutoCAD. Hyppolight
  5. Bonjour, J'ai actuellement: - Un fichier de limites de communes (sur un département) - Un fichier de tracé coupé (entre autres) à toutes les limites de communes. Je cherche un moyen de requêter l'ensemble des entités présentes à l'intérieur d'une commune afin de mettre à jour leurs données d'objets. Je fais donc une requête de type "EMPLACEMENT" avec pour type de limite "POLYLIGNE" - Lorsque le type de sélection est sur "Intérieur", les polylignes ayant un point commun avec ma limite de commune ne sont pas requêtés. - Lorsque le type de sélection est sur "Intersection", les polylignes ayant un point commun avec ma limite de commune sont requêtés mais la première polyligne à l'extérieur du contour est également requêtée. Hormis la méthodologie qui consisterais à créer une 'mini' Bande buffer sur l'ensemble de mes contours de commune, existe-til une autre méthode? une variable permettant de remplacer la condition "strictement à l'intérieur" par "à l'intérieur ou sur le trajet"? Je doute qu'il y ait une solution mais au cas où.. les CadXpiens m'étonne parfois ;) Par avance merci Hyppolight
  6. Re-bonjour, Un grand merci pour la spontanéité... J'ai testé sur un petit bout du SIG que j'ai a traité et ca marche parfaitement... Merci également pour la restriction, je la connaissais mais c'est gentil de préciser.
  7. Bonjour, J'utilise depuis longtemps le lisp MAPBREAK de (gile) permettant de couper une poyligne en deux tout en conservant les données d'objets sur les 2 poylignes. (Voir fichier lisp ci-joint) Je viens de découvrir le lisp break_lw de Bonuscad permettant d'itérer sur l'ensemble des polylignes d'un dwg et de les coupés à chaque sommet. (Voir fichier lisp ci-joint) J'aurais aimé savoir s'il était possible de combiner les deux afin de pouvoir couper toutes les poylignes d'un dwg à chacun de ces sommets tout en conservant les données d'objets? Par avance merci. Hyppolight MAPBRK.lsp break_lw.lsp
  8. Bonjour, Etant retomber sur mon message en lancant une recherche google sur "ManagedMapApi" et ayant entre temps trouver la réponse je me permets de donner la solution au problème ci-dessous au cas où certains rencontreraient le même problème: - "Il existe une différence entre l'architecture de processeur du projet en cours de génération "MSIL" et l'architecture de processeur de référence "ManagedMapApi, Version=16.1.200.22, Culture=neutral, processorArchitecture=AMD64", "AMD64". Cette différence peut entraîner des problèmes de runtime. Veuillez modifier l'architecture de processeur ciblée de votre projet à l'aide du gestionnaire de configuration de façon à aligner les architectures de processeur entre votre projet et les références, ou prendre une dépendance sur les références avec une architecture de processeur correspondant à l'architecture de processeur ciblée de votre projet." Contraitement au fichier AcCoreMgd.dll, AcDbMgd.dll et AcMgd.dll qui sont compatibles en version 32 Bits (x86) et 64 Bits (x64), le fichier ManagedMapApi.dll n'est compatible qu'en version 64 Bits. Il faut donc accéder au gestionnaire de configurations : - En développant le combobox "Debug" ou "Release" à proximité du bouton démarrer et en cliquant sur "gestionnaire de configurations". Une fois à l'intérieur de la boite de dialogue, changer la valeur "Any CPU" de la plateforme pour la valeur "x64" (pour le debug et/ou pour le release en fonction du mode d'utilisation de votre programme) Attention : Penser à modifier le fullpath du dossier dans les "chemin de recherche de fichiers de support en cours d'utilisation" et éventuellement dans "Emplacement approuvés" en fonction de la version d'AutoCAD, car le fullpath du fichier dll généré a été modifé (il passe de ...\bin\Debug (ou release) en ...\bin\x64\Debug) A+
  9. Suite à plusieurs tests. Je viens de comprendre pourquoi le programme met autant de temps lors de son utilisation sur le terrain. En test, je n'utilise pas d'Xrefs alors qu'il y en a sur le terrain. Lors de l'ajout de câbles ou autre matériel, je finis par une ligne de commande "ed.regen" qui lance la régénération de l'ensemble de l'espace objet. Sans d'XREF, la régénération est quasiment instantanée alors qu'elle est beaucoup plus lente lorsqu'un XREF de type fond de plan cadastrale est inséré. Il va donc falloir régénérer le bloc et non l'espace objet.
  10. Bonjour, Tout d'abord je tiens (pour mon premier post) tenir à remercier l'ensemble des administrateurs et autres modérateurs qui consacrent du temps à répondre à l'ensemble des questions posés sur ce site (voire d'autres sites pour certains ...) Bon, après avoir essuyé ma langue (un peu de lèche ne fait pas de mal, mais il faut bien savoir se protéger...), j'en viens au vif du sujet: Je suis actuellement sur un projet de développement d'édition de blocs personnalisés. Le but principal étant de pouvoir gérer les propriétés dynamiques des blocs ainsi que leurs attributs depuis une boite de dialogue avec des menus déroulants. (Relevé et gestion du matériel sur des poteaux ERDF ou France Telecom sur tablette) L'ensemble du programme créé fonctionne parfaitement et ne pose aucun problème sur mon propre poste. Cependant, une fois la solution générée et le fichier DLL chargé sur un autre poste, je fais face à un énorme problème de lenteur. En effet, une validation ou la création d'un bloc sur mon ordinateur se fait en une fraction de secondes (environ 10ms) alors que cette même opération peu prendre plus de 20s sur un autre PC. J'ai tout d'abord pensé que ce problème pouvait venir d'un problème de performance des tablettes (Panasonic FZ-G1 avec AutoCAD Map 2014) mais j'ai ensuite utilisé l'ordinateur d'un collègue ayant les mêmes caractéritiques techniques que le mien et j'ai abouti au même résultat. Après avoir recherché des réponses à ma question sur le NET (ca fait bientôt 3 ans que j'arrive à le faire sans pourrir les forums de questions récurrentes...) je n'ai pas trouvé de solution à ce jour. Même si mes notions d'AutoCAD sont plutôt bonnes (LISP, AutoScript, CUI, FDO...), je reste un 'novice' en ce qui concerne la programmation en VB.NET et en particulier sur AutoCAD. (Formation de manière autodidacte depuis 2010 avec de bonnes connaissances VBA à la base) Liste des références utilisées: * AcCoreMdg.dll + AcDbMgb.dll + AcMgd.dll (version 19.1.0.0 avec copie locale "False" depuis "C:\Autodesk\Autodesk_ObjectARX_2014_Win_64_and_32Bit\inc") * ManagedMapApi.dll (version 16.1.200.22 copie locale "False" depuis "C:\Autodesk\Autodesk_ObjectARX_2014_Win_64_and_32Bit\inc" (mais il me semble que je l'ai personnellement copier à l'intérieur) * références .COM Microsoft + référence .NET System Problèmes rencontrés lors d'essai de signature de l'assembly: - "Il existe une différence entre l'architecture de processeur du projet en cours de génération "MSIL" et l'architecture de processeur de référence "ManagedMapApi, Version=16.1.200.22, Culture=neutral, processorArchitecture=AMD64", "AMD64". Cette différence peut entraîner des problèmes de runtime. Veuillez modifier l'architecture de processeur ciblée de votre projet à l'aide du gestionnaire de configuration de façon à aligner les architectures de processeur entre votre projet et les références, ou prendre une dépendance sur les références avec une architecture de processeur correspondant à l'architecture de processeur ciblée de votre projet." - "Impossible de créer l'assembly: L'assembly référencé 'Acdbmgd' n'a pas un nom fort." Questions : - Avez-vous déjà été confronté à ce genre de problème? (lenteur suite à la génération) - Peut-on référencé de manière forte 'Acdbmgd' sans détériorer le programme?
×
×
  • 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é