public override void Execute()
        {
            try
            {
                var DateTimeStart = DateTime.Now;

                DsApp.AbortRunningCommand();

                CommandMessage CmdLine = DsApp.GetCommandMessage();
                if (null == CmdLine)
                {
                    return;
                }

                Document DsDoc = DsApp.GetActiveDocument();

                Model            Mdl   = DsDoc.GetModel();
                SketchManager    SkMgr = Mdl.GetSketchManager();
                SelectionManager SlMgr = DsDoc.GetSelectionManager();

                object   ObjType        = null;
                object   ObjEntites     = null;
                Int32[]  TabTypes       = null;
                object[] TabEntites     = null;
                string[] TabNomsCalques = null;


                EntityHelper dsEntityHelper = DsApp.GetEntityHelper();

                ///==============================================================================
                CmdLine.PrintLine("Suppression des gravures");
                TabNomsCalques = new string[] { "GRAVURE", "Gravure", "gravure" };
                SkMgr.GetEntities(null, TabNomsCalques, out ObjType, out ObjEntites);

                TabTypes   = (Int32[])ObjType;
                TabEntites = (object[])ObjEntites;

                foreach (var ent in TabEntites)
                {
                    dsEntityHelper.SetErased(ent, true);
                }

                TimeSpan t = DateTime.Now - DateTimeStart;
                CmdLine.PrintLine(String.Format("Executé en {0}", GetSimplestTimeSpan(t)));
            }
            catch (Exception e)
            { Log.Write(e); }
        }
Example #2
0
        public override void Execute()
        {
            try
            {
                var DateTimeStart = DateTime.Now;

                DsApp.AbortRunningCommand();

                CommandMessage CmdLine = DsApp.GetCommandMessage();
                if (null == CmdLine)
                {
                    return;
                }

                //==============================================================================
                CmdLine.PrintLine("Calque '0' actif");
                Document     DsDoc = DsApp.GetActiveDocument();
                LayerManager LyMgr = DsDoc.GetLayerManager();
                Layer        L0    = LyMgr.GetLayer("0");
                L0.Activate();

                // Creer les calques de pliage
                Color c;
                dsCreateObjectResult_e Erreur;

                //==============================================================================
                CmdLine.PrintLine("Création du claque 'LIGNES DE PLIAGE'");
                Layer LigneDePliage;
                LyMgr.CreateLayer("LIGNES DE PLIAGE", out LigneDePliage, out Erreur);
                c = LigneDePliage.Color;
                c.SetColorByIndex(252);
                LigneDePliage.Color = c;

                //==============================================================================
                CmdLine.PrintLine("Création du claque 'NOTE DE PLIAGE'");
                Layer NoteDePliage = null;
                LyMgr.CreateLayer("NOTE DE PLIAGE", out NoteDePliage, out Erreur);
                c = NoteDePliage.Color;
                c.SetColorByIndex(126);
                NoteDePliage.Color = c;


                Model            Mdl   = DsDoc.GetModel();
                SketchManager    SkMgr = Mdl.GetSketchManager();
                SelectionManager SlMgr = DsDoc.GetSelectionManager();
                SelectionFilter  SlFilter;

                object   ObjType        = null;
                object   ObjEntites     = null;
                Int32[]  TabTypes       = null;
                object[] TabEntites     = null;
                string[] TabNomsCalques = null;

                //==============================================================================
                CmdLine.PrintLine("Couleur des entité sur 'DuCalque'");
                TabNomsCalques = GetTabNomsCalques(DsDoc);
                SkMgr.GetEntities(null, TabNomsCalques, out ObjType, out ObjEntites);
                TabEntites = (object[])ObjEntites;

                EntityHelper dsEntityHelper = DsApp.GetEntityHelper();

                foreach (object entity in TabEntites)
                {
                    Color ce = dsEntityHelper.GetColor(entity);
                    ce.SetNamedColor(dsNamedColor_e.dsNamedColor_ByLayer);
                    dsEntityHelper.SetColor(entity, ce);
                }

                //==============================================================================
                CmdLine.PrintLine("Transfert des lignes et notes de pliage sur les calques correspondants");
                TabNomsCalques = new string[] { "0" };
                SkMgr.GetEntities(null, TabNomsCalques, out ObjType, out ObjEntites);

                TabTypes   = (Int32[])ObjType;
                TabEntites = (object[])ObjEntites;

                for (int i = 0; i < TabEntites.GetLength(0); i++)
                {
                    dsObjectType_e tpe = (dsObjectType_e)TabTypes[i];

                    if (tpe == dsObjectType_e.dsLineType)
                    {
                        Line L = (Line)TabEntites[i];
                        if (L.LineStyle == "SLD-Center")
                        {
                            L.Layer = LigneDePliage.Name;
                        }
                    }
                    else if (tpe == dsObjectType_e.dsNoteType)
                    {
                        Note N = (Note)TabEntites[i];
                        N.Layer = NoteDePliage.Name;
                    }
                }

                //==============================================================================
                CmdLine.PrintLine("Conversion des textes à graver en lignes");
                SlFilter = SlMgr.GetSelectionFilter();
                SlFilter.Clear();
                SlFilter.AddEntityType(dsObjectType_e.dsNoteType);
                SlFilter.Active = true;

                TabNomsCalques = new string[] { "GRAVURE" };
                SkMgr.GetEntities(SlFilter, TabNomsCalques, out ObjType, out ObjEntites);
                TabTypes   = (Int32[])ObjType;
                TabEntites = ObjEntites as object[];

                if (TabEntites != null && TabEntites.Length > 0)
                {
                    CmdLine.PrintLine(TabEntites.Length + " texte(s) convertis");
                    foreach (var Texte in TabEntites)
                    {
                        SlMgr.ClearSelections(dsSelectionSetType_e.dsSelectionSetType_Current);
                        dsEntityHelper.Select(Texte, true);
                        DsApp.RunCommand("ECLATERTEXTE\n", true);
                    }
                }

                DsApp.RunCommand("_CSICON\nP\n", true);

                //==============================================================================
                CmdLine.PrintLine("Purger le dessin");
                DsApp.RunCommand("_-CLEAN\n_All\n*\n_No\n", true);

                TimeSpan t = DateTime.Now - DateTimeStart;
                CmdLine.PrintLine(String.Format("Executé en {0}", GetSimplestTimeSpan(t)));
            }
            catch (Exception e)
            { Log.Write(e); }
        }
        public override void Execute()
        {
            try
            {
                Sm = DsApp.GetActiveDocument().GetModel().GetSketchManager();

                DsApp.AbortRunningCommand();

                CommandMessage CmdLine = DsApp.GetCommandMessage();
                if (null == CmdLine)
                {
                    return;
                }

                //Entree utilisateur
                double toleranceEcart = 0.1, toleranceAngle = 5, toleranceEcartMax = 0.1;
                bool   methodeCalcul = true, toutesLesSplines = true, supprimerOriginal = true;

                // Erreur avec le premier prompt, la commande est automatiquement annulée
                // Pour contourner le pb, on lance une commande à vide.
                {
                    String sss = "";
                    CmdLine.PromptForString(true, "", "", out sss);
                }

                string[] KeyWord = new string[] { "Oui", "Non", "Distance", "Max", "Angle", "Calcul", "SupprimerOriginal" };

                Action <string> ModifierOptions = delegate(string s)
                {
                    if (s == "Distance")
                    {
                        CmdLine.PromptForDouble("Deviation de distance par rapport à la spline ", toleranceEcart, out toleranceEcart);
                    }
                    else if (s == "Max")
                    {
                        CmdLine.PromptForDouble("Deviation de distance maximum absolue ", toleranceEcartMax, out toleranceEcartMax);
                    }
                    else if (s == "Angle")
                    {
                        CmdLine.PromptForDouble("Deviation d'angle par rapport à la spline ", toleranceAngle, out toleranceAngle);
                    }
                    else if (s == "Calcul")
                    {
                        CmdLine.PromptForBool("Deviation en pourcent de la longueur ", "Oui", "Non", methodeCalcul, out methodeCalcul);
                    }
                    else if (s == "SupprimerOriginal")
                    {
                        CmdLine.PromptForBool("Supprimer l'original ", "Oui", "Non", supprimerOriginal, out supprimerOriginal);
                    }
                };

                string Option;
                dsPromptResultType_e result;
                CmdLine.PromptExplanation = "Oui";
                do
                {
                    result = CmdLine.PromptForBoolOrKeyword("Convertir toutes les splines", "Erreur", KeyWord, KeyWord, (int)dsPromptInit_e.dsPromptInit_UsePromptExplanation, "Oui", "Non", true, out Option, out toutesLesSplines);

                    switch (result)
                    {
                    case dsPromptResultType_e.dsPromptResultType_Keyword:
                        ModifierOptions(Option);
                        break;

                    case dsPromptResultType_e.dsPromptResultType_Cancel:
                        return;

                    default:
                        break;
                    }
                } while (result != dsPromptResultType_e.dsPromptResultType_Value);

                if (result == dsPromptResultType_e.dsPromptResultType_Cancel)
                {
                    return;
                }

                Document         DsDoc = DsApp.GetActiveDocument();
                Model            Mdl   = DsDoc.GetModel();
                SketchManager    SkMgr = Mdl.GetSketchManager();
                SelectionManager SlMgr = DsDoc.GetSelectionManager();
                SelectionFilter  SlFilter;
                SlFilter = SlMgr.GetSelectionFilter();

                object[] TabEntites = null;

                CmdLine.PrintLine($"Angle : {toleranceAngle}° Dist : {toleranceEcart}mm Max : {toleranceEcartMax}mm");
                CmdLine.PrintLine($" Toutes les splines : {(toutesLesSplines ? "Oui" : "Non")} Supprimer l'original : {(supprimerOriginal?"Oui":"Non")} Calcul % : {(methodeCalcul ? "Oui" : "Non")}");

                if (toutesLesSplines)
                {
                    SlFilter.Clear();
                    SlFilter.AddEntityType(dsObjectType_e.dsSplineType);
                    SlFilter.Active = true;

                    object   ObjType        = null;
                    object   ObjEntites     = null;
                    string[] TabNomsCalques = GetTabNomsCalques(DsDoc);
                    SkMgr.GetEntities(SlFilter, TabNomsCalques, out ObjType, out ObjEntites);
                    TabEntites = ObjEntites as object[];
                }
                else
                {
                    SlFilter.Clear();
                    SlFilter.AddEntityType(dsObjectType_e.dsSplineType);
                    SlFilter.Active = true;

                    if (CmdLine.PromptForSelection(false, "Selectionnez la spline", "Ce n'est pas une spline"))
                    {
                        dsObjectType_e entityType;
                        var            count = SlMgr.GetSelectedObjectCount(dsSelectionSetType_e.dsSelectionSetType_Previous);
                        TabEntites = new object[count];

                        for (int i = 0; i < count; i++)
                        {
                            object selectedEntity = SlMgr.GetSelectedObject(dsSelectionSetType_e.dsSelectionSetType_Previous, i, out entityType);

                            if (dsObjectType_e.dsSplineType == entityType)
                            {
                                TabEntites[i] = selectedEntity;
                            }
                        }
                    }
                }

                var DateTimeStart = DateTime.Now;

                long NbArc = 0;

                Action <object> Convertir = delegate(object o)
                {
                    Spline Spline = o as Spline;
                    if (Spline == null)
                    {
                        return;
                    }

                    SplineConverter SplConverter = new SplineConverter(
                        Spline,
                        toleranceEcart,
                        toleranceAngle,
                        toleranceEcartMax,
                        methodeCalcul ? SplineConverter.eCalculTolerance.Absolu : SplineConverter.eCalculTolerance.Pourcent
                        );
                    iLine?L = SplConverter.EnLigne();
                    if (L != null)
                    {
                        var l = (iLine)L;
                        SkMgr.InsertLine(l.P1.X, l.P1.Y, l.P1.Z, l.P2.X, l.P2.Y, l.P2.Z);
                    }
                    else
                    {
                        var List = SplConverter.EnPolyligne();
                        foreach (var arc in List)
                        {
                            SkMgr.InsertArcBy3Points(arc.P1.MathPoint(), arc.P2.MathPoint(), arc.P3.MathPoint());
                        }

                        NbArc += List.Count;
                    }
                };

                if (TabEntites != null && TabEntites.Length > 0)
                {
                    CmdLine.PrintLine($"{TabEntites.Length} spline(s) selectionnées");

                    if (TabEntites.Length == 1)
                    {
                        Convertir(TabEntites[0]);
                    }
                    else
                    {
                        Parallel.ForEach(TabEntites, Convertir);
                    }

                    CmdLine.PrintLine($"{TabEntites.Length} spline(s) converties en {NbArc} arc(s)");

                    if (supprimerOriginal)
                    {
                        for (int i = 0; i < TabEntites.Length; i++)
                        {
                            Spline s = (Spline)TabEntites[i];
                            s.Erased = true;
                        }
                    }
                }

                TimeSpan t = DateTime.Now - DateTimeStart;
                CmdLine.PrintLine(String.Format("Executé en {0}", GetSimplestTimeSpan(t)));
            }
            catch (Exception e)
            { Log.Write(e); }
        }