Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Дмитрий Загорулькин от 21-08-2017, 12:30:41

Название: Метод SymbolUtilityServices.ValidateSymbolName. Что делает второй параметр?
Отправлено: Дмитрий Загорулькин от 21-08-2017, 12:30:41
Никак не могу разобраться, что обозначает второй параметр в этом методе? При его значении 'false' - метод работает как мне надо, т.е. пропускает практически только буквы и цифры. При 'true' - пропускает очень сомнительные строки. Например, при 'true' вот такие строки получаются валидными:
@##%RGFDGDHW
&%#$^%@@^%#^#
А вот такая - уже не валидная:
$#^%#$*&%^*&^%(%^(На мой взгляд, они все три невалидные для символьного имени. В чём тут логика?
Код для проверки:
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Runtime;
  5.  
  6. namespace AcadTest
  7. {
  8.     public class ValidateSymbolNameTest
  9.     {
  10.         [CommandMethod("ValidateSymbolNameTest")]
  11.         public void RunCmd()
  12.         {
  13.             Document adoc = Application.DocumentManager.MdiActiveDocument;
  14.             Editor ed = adoc.Editor;
  15.             Database db = adoc.Database;          
  16.  
  17.             PromptResult stringRes = ed.GetString("\nEnter symbol name: ");
  18.             if (stringRes.Status != PromptStatus.OK) return;
  19.             string value = stringRes.StringResult;          
  20.  
  21.             PromptKeywordOptions kWordOpts = new PromptKeywordOptions("\nAllow vertical bar?: ");
  22.             kWordOpts.Keywords.Add("Yes");
  23.             kWordOpts.Keywords.Add("No");
  24.             kWordOpts.Message += kWordOpts.Keywords.GetDisplayString(true);
  25.             PromptResult res = ed.GetKeywords(kWordOpts);
  26.             if (res.Status != PromptStatus.OK)
  27.                 return;
  28.  
  29.             bool allowVerticalBar = res.StringResult == "Yes";
  30.  
  31.             try
  32.             {
  33.                 SymbolUtilityServices.ValidateSymbolName(value, allowVerticalBar);
  34.                 ed.WriteMessage("\nSymbol name '{0}' is valid!", value);
  35.             }
  36.             catch
  37.             {
  38.                 ed.WriteMessage("\nSymbol name '{0}' is not valid!", value);
  39.             }
  40.         }
  41.     }
  42. }
  43.  
Название: Re: Метод SymbolUtilityServices.ValidateSymbolName. Что делает второй параметр?
Отправлено: Александр Пекшев aka Modis от 21-08-2017, 12:40:38
Цитировать
The 2nd parameter of the ValidateSymbolName() is a flag that allows or disallows the '|' symbol (so called "pipe" symbol).
Название: Re: Метод SymbolUtilityServices.ValidateSymbolName. Что делает второй параметр?
Отправлено: Дмитрий Загорулькин от 21-08-2017, 12:48:05
Вот ведь намудрил-то :)
Спасибо!
Название: Re: Метод SymbolUtilityServices.ValidateSymbolName. Что делает второй параметр?
Отправлено: Александр Ривилис от 21-08-2017, 13:22:38
На всякий случай: SymbolUtilityServices.ValidateSymbolName - это обертка над функцией acdbSNValid. Её достаточно подробное описание есть в ObjectARX SDK Docs.
По поводу запрещенных символов:
Цитировать
A symbol table name is valid if it is non-null and contains only characters allowed in Windows filenames except the comma, semicolon, accent grave, and equals sign, which are also not allowed.
Название: Re: Метод SymbolUtilityServices.ValidateSymbolName. Что делает второй параметр?
Отправлено: Дмитрий Загорулькин от 21-08-2017, 13:27:46
На всякий случай: SymbolUtilityServices.ValidateSymbolName - это обертка над функцией acdbSNValid.
Да, в ObjectARX гораздо понятнее описание. Уж лучше бы в .NET API написали что-то типа: смотри описание acdbSNValid в ObjectARX.