Exemple #1
0
 public override void OnDone()
 {
     if (edges.Count > 0)
     {
         IGeoObject[] affected;
         IGeoObject[] modified = Make3D.MakeFillet(edges.ToArray(), radius, out affected);
         if (affected != null && affected.Length > 0)
         {
             using (Frame.Project.Undo.UndoFrame)
             {
                 IGeoObjectOwner owner = null; // should be a solid if the affected shell is part of a solid, or owner should be the model
                 // only the edges of a single shell should be rounded!
                 for (int i = 0; i < affected.Length; ++i)
                 {
                     if (owner == null || affected[i].Owner is Model)
                     {
                         owner = affected[i].Owner;
                     }
                     affected[i].Owner.Remove(affected[i]);
                 }
                 if (owner is Model model)
                 {
                     model.Remove(affected);
                     model.Add(modified);
                 }
                 else if (owner is Solid sld)
                 {
                     Model m = sld.Owner as Model;
                     if (m != null)    // not able to round edges of Solid which is part of a Block?
                     {
                         m.Remove(sld);
                         for (int i = 0; i < modified.Length; ++i)
                         {
                             Solid rsld = Solid.Construct();
                             rsld.SetShell(modified[i] as Shell);
                             m.Add(rsld);
                         }
                     }
                 }
             }
         }
     }
     base.OnDone();
 }