// (C) Copyright 2014 by kdub Services
//
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Windows.Documents;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
//
using Application = Autodesk.AutoCAD.ApplicationServices.Core.Application;
using Exception = System.Exception;
[assembly
: CommandClass
(typeof (LayerToggle_03
.LayerToggle))]
namespace LayerToggle_03
{
public class LayerToggle
{
[CommandMethod("MyGroup", "MyCommand", "MyCommandLocal",
CommandFlags.Modal)]
public static void LayerToggle3()
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database db = Application.DocumentManager.MdiActiveDocument.Database;
ed.WriteMessage("Hello, this Hal.");
List
<string> patternList
= new List
<string>(); patternList.Add("STH*");
patternList.Add("??5*");
ThawtoMatchPattern(db, patternList);
}
public static void ThawtoMatchPattern(
Database db,
List<string> patternList)
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
LayerTable lt =
(LayerTable) tr.GetObject(db.LayerTableId, OpenMode.ForRead);
var currentLayeriD = db.Clayer;
foreach (ObjectId obID in lt)
{
LayerTableRecord ltr =
(LayerTableRecord) tr.GetObject(obID, OpenMode.ForWrite);
foreach (var pattern in patternList)
{
var layerName = ltr.Name;
if (layerName.Matches(pattern)
&&
ltr.IsFrozen)
{
ltr.IsOff = false;
ltr.IsFrozen = false;
//break;
continue;
}
else
{
if (!obID.Equals(currentLayeriD)
||
layerName != "Defpoints")
{
ltr.IsFrozen = true;
}
}
}
}
tr.Commit();
}
}
[LispFunction("MyLispFunction", "MyLispFunctionLocal")]
public int MyLispFunction(ResultBuffer pArgs)
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database db = Application.DocumentManager.MdiActiveDocument.Database;
try
{
List<string> patternList = (from TypedValue typedValue in pArgs
where
(LispDataType)
typedValue.TypeCode ==
LispDataType.Text
select typedValue.Value.ToString())
.ToList();
ThawtoMatchPattern(db, patternList);
ed.Regen();
}
catch (System.Exception ex)
{
ed.WriteMessage(
"\nError: {0}\nStackTrace: {1}",
ex.Message,
ex.StackTrace);
}
return 1;
}
}
}