Метод SymbolUtilityServices.ValidateSymbolName. Что делает второй параметр?

Автор Тема: Метод SymbolUtilityServices.ValidateSymbolName. Что делает второй параметр?  (Прочитано 2530 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Никак не могу разобраться, что обозначает второй параметр в этом методе? При его значении '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.  

Отмечено как Решение Дмитрий Загорулькин 21-08-2017, 12:47:36

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Цитировать
The 2nd parameter of the ValidateSymbolName() is a flag that allows or disallows the '|' symbol (so called "pipe" symbol).

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Вот ведь намудрил-то :)
Спасибо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
На всякий случай: 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.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
На всякий случай: SymbolUtilityServices.ValidateSymbolName - это обертка над функцией acdbSNValid.
Да, в ObjectARX гораздо понятнее описание. Уж лучше бы в .NET API написали что-то типа: смотри описание acdbSNValid в ObjectARX.