Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

Pensez-vous qu'il soit possible de quelques manières que ce soit de créer une palette personnalisée DANS les palettes d'outils reprenant l'ensemble des onglets des présentations sous forme de liste ? J'ai déjà plusieurs palettes d'outils (gabarit texte, cote, lignes de repère, Lisp, Panneaux de signa, blocs divers, etc.), et ce que je cherche, c'est une nouvelle palette avec les présentations nommées, cliquables pour passer de l'une à l'autre et qui se mettrait à jour automatiquement à jour tant pour les dénominations que l'ordre.

Je sais, qu'il y a divers lisp qui traine ici ou là avec des boites de dialogues plus ou moins complète (exemple ONG de Patrick_35 ou ICI), ou que certains proposent des prog spécifique (exemple ICI et ICI) permettant de faire plein de chose. Moi je cherche quelque chose de très simple pour visualiser les noms des présentations et de passer de l'une à l'autre, car la zone d'onglets est parfois un peu petite.

Ci-dessous un grossier photo montage pour illustrer.

image.png.61d583f940b96a442279fe837e1e1dc8.png

 

Merci à vous.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.3d
Pisser sous la douche ne suffira pas
  • 2 ans après...
Invité Miss Dlys
Posté(e)

Bonjour, je déterre un peu le sujet car travaillant en permanence en jonglant sur 250 présentations c'est vite une galère.

Avez vous trouvé une (des) solutions ?

En Lisp, Macro, ahk, peu importe, j'achète 😛

Posté(e)

Bonjour,

Il me semble que c'est trop lourd de créer / mettre à jours une palette à chaque dessin ouvert ou spécialement pour certain.

Il y a le menu burger (4 lignes à gauche de l'onglet objet) qui assure de pouvoir accéder aux autres onglets.

Cordialement

Posté(e)

Hello

Et si je me souviens bien, on peut dépasser les 255 Presentations / Layouts par la Génération d Atlas automatique de MAP (ou CIVIL) !?

Bye, lecrabe 

 

Autodesk Expert Elite Team

Posté(e)

Salut,

Il m'a semblé que la question pouvait être un bon exemple pour une palette C#/WPF.

Télécharger LayoutPaletteSetup.msi.
Débloquer le fichier et lancer l'installation.
La commande LAYOUTS affiche la palette (compatible toutes versions d'AutoCAD pleines ou verticales depuis 2013).

Pour ceux que ça intéresse, le code (de plus amples explications à propos des interfaces utilisateur en .NET sur cette page).

La classe CustomPaletteSet définit un jeu de palette.

using Autodesk.AutoCAD.Windows;

using System;

using AcCoreAp = Autodesk.AutoCAD.ApplicationServices.Core.Application;

namespace LayoutPaletteNetCore
{
    internal class CustomPaletteSet : PaletteSet
    {
        static bool wasVisible;

        public CustomPaletteSet()
            : base("Layouts", "LAYOUTS", new Guid("{92007042-8476-48DB-9003-AD5AA0E47C98}"))
        {
            Style =
                PaletteSetStyles.ShowAutoHideButton |
                PaletteSetStyles.ShowCloseButton |
                PaletteSetStyles.ShowPropertiesMenu;
            MinimumSize = new System.Drawing.Size(150, 450);
            AddVisual("Layouts", new LayoutControl());

            var docs = AcCoreAp.DocumentManager;
            docs.DocumentBecameCurrent += (s, e) =>
                Visible = e.Document != null && wasVisible;
            docs.DocumentCreated += (s, e) =>
                Visible = wasVisible;
            docs.DocumentToBeDeactivated += (s, e) =>
                wasVisible = Visible;
            docs.DocumentToBeDestroyed += (s, e) =>
            {
                wasVisible = Visible;
                if (docs.Count == 1)
                    Visible = false;
            };
        }
    }
}

Le fichier PaletteControl.xaml définit le contrôle WPF (palette)

<UserControl x:Class="LayoutPaletteNetCore.LayoutControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:LayoutPaletteNetCore"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid Background="WhiteSmoke">
        <ListBox Margin="5" ItemsSource="{Binding LayoutList}" SelectionMode="Single" SelectedItem="{Binding CurrentLayout}"/>
    </Grid>
</UserControl>

Le fichier PaletteControl.xaml.cs définit la logique d'interaction du contrôle

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;

using System.Collections;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Controls;

using AcCoreAp = Autodesk.AutoCAD.ApplicationServices.Core.Application;

namespace LayoutPaletteNetCore
{
    public partial class LayoutControl : UserControl, INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected void NotifyPropertyChanged(string propertyName) =>
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

        private string currentLayout;

        public ObservableCollection<string> LayoutList { get; private set; }

        public string CurrentLayout
        {
            get { return currentLayout; }
            set
            {
                currentLayout = value;
                SetCurrentLayout();
                NotifyPropertyChanged(nameof(CurrentLayout));
            }
        }

        public LayoutControl()
        {
            InitializeComponent();
            DataContext = this;
            LayoutList = new ObservableCollection<string>();
            AcCoreAp.DocumentManager.DocumentActivated += OnDocumentActivated;
            var doc = AcCoreAp.DocumentManager.MdiActiveDocument;
            if (doc != null)
            {
                UpdateLayouts();
                HandleEvents(LayoutManager.Current);
            }
        }

        private async void SetCurrentLayout()
        {
            var docs = AcCoreAp.DocumentManager;
            await docs.ExecuteInCommandContextAsync(
                (_) =>
                {
                    LayoutManager.Current.CurrentLayout = CurrentLayout;
                    return Task.CompletedTask;
                },
                null);
        }

        private void OnDocumentActivated(object sender, DocumentCollectionEventArgs e)
        {
            UpdateLayouts();
            HandleEvents(LayoutManager.Current);
        }

        private void HandleEvents(LayoutManager layoutManager)
        {
            layoutManager.LayoutCopied += (_, _1) => UpdateLayouts();
            layoutManager.LayoutCreated += (_, _1) => UpdateLayouts();
            layoutManager.LayoutRemoved += (_, _1) => UpdateLayouts();
            layoutManager.LayoutRenamed += (_, _1) => UpdateLayouts();
            layoutManager.LayoutsReordered += (_, _1) => UpdateLayouts();
            layoutManager.LayoutSwitched += (_, _1) => CurrentLayout = layoutManager.CurrentLayout;
        }

        private void UpdateLayouts()
        {
            var db = HostApplicationServices.WorkingDatabase;
            using (var tr = new OpenCloseTransaction())
            {
                LayoutList.Clear();
                var layouts = ((DBDictionary)tr.GetObject(db.LayoutDictionaryId, OpenMode.ForRead))
                    .Cast<DictionaryEntry>()
                    .Select(e => (Layout)tr.GetObject((ObjectId)e.Value, OpenMode.ForRead))
                    .OrderBy(l => l.TabOrder)
                    .Select(l => l.LayoutName);
                foreach (string layoutName in layouts)
                {
                    LayoutList.Add(layoutName);
                }
                CurrentLayout = LayoutManager.Current.CurrentLayout;
            }
        }
    }
}

La commande pour afficher la palette.

using Autodesk.AutoCAD.Runtime;

[assembly: CommandClass(typeof(LayoutPaletteNetCore.Commands))]

namespace LayoutPaletteNetCore
{
    public class Commands
    {
        static CustomPaletteSet palette;

        [CommandMethod("LAYOUTS")]
        public static void ShowLayoutsPalette()
        {
            if (palette == null)
            {
                palette = new CustomPaletteSet();
            }
            palette.Visible = true;
        }
    }
}

 

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour

Je ressort mon inénarrable Jeu de Feuille qui permet d'avoir dans une palette tes présentations, de plusieurs fichier DWG dans un seul JDF, de les nommer, classer, tracer, etransmiter selon ton envie ...

Jovialement
Vincent P.

Lispeur éternel débutant!
Autocad Map3D 2023
Covadis-Autopist 18.2

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é