• 自定义函数实例-选择文件


    【环境】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 }
  • 相关阅读:
    Smarty学习笔记(二)
    Smarty学习笔记(一)
    MVC学习笔记(一)
    2015羊年主流手机配置什么样?
    FPGA学习笔记(一)Verilog语法基础
    FPGA学习笔记(二)模块建立及变量连接
    STM32学习笔记(一)时钟和定时器
    Win8 HTML5与JS编程学习笔记(一)
    Win8 HTML5与JS编程学习笔记(二)
    LUOGU P2831 愤怒的小鸟 (NOIP 2016)
  • 原文地址:https://www.cnblogs.com/belx/p/10102348.html
Copyright © 2020-2023  润新知