zoukankan      html  css  js  c++  java
  • 自定义函数实例-选择文件

    【环境】CAD2014+VS2010

      1 using System.IO;
      2 using System.Windows.Forms;
      3 using Autodesk.AutoCAD.DatabaseServices;
      4 using Autodesk.AutoCAD.EditorInput;
      5 using Autodesk.AutoCAD.Runtime;
      6 using Application = Autodesk.AutoCAD.ApplicationServices.Core.Application;
      7 using OpenFileDialog = Autodesk.AutoCAD.Windows.OpenFileDialog;
      8 using SaveFileDialog = Autodesk.AutoCAD.Windows.SaveFileDialog;
      9 using ofdFlags = Autodesk.AutoCAD.Windows.OpenFileDialog.OpenFileDialogFlags;
     10 using sfdFlags = Autodesk.AutoCAD.Windows.SaveFileDialog.SaveFileDialogFlags;
     11 
     12 namespace CGabriel
     13 {
     14     public class LispFileDialogs
     15     {
     16         public static string title;//对话框标题
     17         public static string defaultFileName;//默认路径
     18         public static string defaultExtension;//拓展名
     19         public static short flags;//
     20         //(setq dwgnm (GetOpenFileDialog "Hello" "D:\test\"  "dwg" 2))
     21         [LispFunction("GetOpenFileDialog")]
     22         public static ResultBuffer GetOpenFileDialog(ResultBuffer args)
     23         {
     24             if (!parseArguments(args)) return null;
     25 
     26             var dlgFlags = (ofdFlags) flags;
     27             if (((dlgFlags & ofdFlags.DefaultIsFolder) != 0) && Path.HasExtension(defaultFileName))
     28                 defaultFileName = Path.GetDirectoryName(defaultFileName);
     29 
     30             var dlg = new OpenFileDialog(title, defaultFileName, defaultExtension, title, dlgFlags);
     31             if (dlg.ShowDialog() != DialogResult.OK)
     32                 return null;
     33 
     34             var result = new ResultBuffer();
     35             foreach (string file in dlg.GetFilenames())
     36                 result.Add(new TypedValue((int) LispDataType.Text, file));
     37             return result;
     38         }
     39 
     40         [LispFunction("GetSaveFileDialog")]
     41         public static TypedValue GetSaveFileDialog(ResultBuffer args)
     42         {
     43             if (!parseArguments(args))
     44                 return new TypedValue((int) LispDataType.Nil, null);
     45 
     46             var dlgFlags = (sfdFlags) flags;
     47             if (((dlgFlags & sfdFlags.DefaultIsFolder) != 0) && Path.HasExtension(defaultFileName))
     48                 defaultFileName = Path.GetDirectoryName(defaultFileName);
     49 
     50             var dlg = new SaveFileDialog(title, defaultFileName, defaultExtension, title, dlgFlags);
     51             if (dlg.ShowDialog() != DialogResult.OK)
     52                 return new TypedValue((int) LispDataType.Nil, null);
     53 
     54             return new TypedValue((int) LispDataType.Text, dlg.Filename);
     55         }
     56 
     57         public static bool parseArguments(ResultBuffer args)
     58         {
     59             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
     60             if (args == null)
     61                 return notEnoughArguments(ed);
     62 
     63             ResultBufferEnumerator iter = args.GetEnumerator();
     64 
     65             iter.MoveNext();
     66             if (iter.Current.TypeCode != (short) LispDataType.Text)
     67                 return wrongArguments(ed);
     68             title = (string) iter.Current.Value;
     69 
     70             if (iter.MoveNext() == false)
     71                 return notEnoughArguments(ed);
     72             if (iter.Current.TypeCode != (short) LispDataType.Text)
     73                 return wrongArguments(ed);
     74             defaultFileName = (string) iter.Current.Value;
     75 
     76             if (iter.MoveNext() == false)
     77                 return notEnoughArguments(ed);
     78             if (iter.Current.TypeCode != (short) LispDataType.Text)
     79                 return wrongArguments(ed);
     80             defaultExtension = (string) iter.Current.Value;
     81 
     82             if (iter.MoveNext() == false)
     83                 return notEnoughArguments(ed);
     84             if (iter.Current.TypeCode != (short) LispDataType.Int16)
     85                 return wrongArguments(ed);
     86             flags = (short) iter.Current.Value;
     87 
     88             return true;
     89         }
     90 
     91         public static bool notEnoughArguments(Editor ed)
     92         {
     93             ed.WriteMessage("
    Too few arguments.");
     94             return false;
     95         }
     96 
     97         public static bool wrongArguments(Editor ed)
     98         {
     99             ed.WriteMessage("
    Expected string string string int.");
    100             return false;
    101         }
    102     }
    103 }
  • 相关阅读:
    C# FromBase64String 解码换行问题
    Func与Action
    C# 委托及各种写法
    DNS解析过程和域名收敛、域名发散、SPDY应用
    基础数据类型长度
    C#静态常量和动态常量的区别
    dynamic和var的区别
    ADO.NET中的五个主要对象
    Linux 守护进程创建原理及简易方法
    利用/dev/urandom文件创建随机数
  • 原文地址:https://www.cnblogs.com/belx/p/10102348.html
Copyright © 2011-2022 走看看