Перейти к содержимому


переименование всех листов

#лист

Сообщений в теме: 16

#1 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 288 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 31 Май 2018 - 13:43

нужно переменовать все листы . написал на JS.
почему скрипт не отрабатывает на всех листах?
с первого прохода через один лист отрабатывает.
что то не так с Enumerator делаю?
пример во вложении
помогите допилить скрипт , чтобы с первого прохода все скобки менялись на нижнее подчеркивание
// Layouts rename. replace '(' and ')' to "_"
var allLayouts = ThisDrawing.Layouts;
var conter = allLayouts.Count
ThisDrawing.Utility.Prompt(conter);
fc = new Enumerator(allLayouts);
fc.moveFirst();
while (fc.atEnd() == false)
{
   var oneLayout = fc.item();
   if(oneLayout.Name != "Model")
   {
	ThisDrawing.Utility.Prompt(oneLayout.Name);
	var lName = oneLayout.Name;
	tmp = lName.replace(/[\(\)]/gim,'_');
	oneLayout.Name = tmp;
	ThisDrawing.Utility.Prompt(oneLayout.Name);
	ThisDrawing.Utility.Prompt("_______");	  
   }
   fc.moveNext();  
}

Прикрепленные файлы


"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#2 ISL

    Клуб разработчиков

  • nanoSoft
  • PipPipPipPip
  • 364 сообщений
  • Пол:Мужчина
  • Город:Москва
  • Интересы:Разработка САПР

Отправлено 31 Май 2018 - 13:50

Просто проход по всем листам без переименования даёт все листы? Или тоже через один?
Пишешь приложения под САПР на С++, .NET, COM, Lisp? Вступай в Клуб разработчиков nanoCAD.

#3 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 288 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 31 Май 2018 - 13:53

Просмотр сообщенияISL (31 Май 2018 - 13:50) писал:

Просто проход по всем листам без переименования даёт все листы? Или тоже через один?
count листов верный. просто проход не пробовал(.
вторым проходом отрабатывает , но не все опять же . видимо надо какой то regen или еще чего после rename делать?
"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#4 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 288 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 31 Май 2018 - 17:54

Просмотр сообщенияISL (31 Май 2018 - 13:50) писал:

Просто проход по всем листам без переименования даёт все листы? Или тоже через один?
да просто проход по листам , с выводом имени листа дает нормальный результат. значит дело в моменте переименования, некая проблема..
"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#5 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 360 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 31 Май 2018 - 22:33

Просмотр сообщенияIvanco (31 Май 2018 - 17:54) писал:

Просмотр сообщенияISL (31 Май 2018 - 13:50) писал:

Просто проход по всем листам без переименования даёт все листы? Или тоже через один?
да просто проход по листам , с выводом имени листа дает нормальный результат. значит дело в моменте переименования, некая проблема..
С конца попробуйте пролистать коллекцию.

#6 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 288 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 01 Июнь 2018 - 09:43

Цитата

С конца попробуйте пролистать коллекцию.
та же ерунда.
"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#7 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 360 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 01 Июнь 2018 - 09:49

совпадения имен не происходит?

#8 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 288 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 01 Июнь 2018 - 09:52

Просмотр сообщенияRobink (01 Июнь 2018 - 09:49) писал:

совпадения имен не происходит?
сам Enumerator нормально работает, насколько я понимаю. т.е. если просто выводить имена листов - все норм. что сначала что с конца.
или что имелось ввиду под "совпадением имен" ? имена листов у всех разные..
"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#9 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 360 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 01 Июнь 2018 - 10:00

ну допусти листы были 1, 2, 3. Переименовываются в 2, 3, 4. При переименовании 1 листа, его новое имя совпадет с именем 2 листа.

#10 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 288 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 01 Июнь 2018 - 10:04

Просмотр сообщенияRobink (01 Июнь 2018 - 10:00) писал:

ну допусти листы были 1, 2, 3. Переименовываются в 2, 3, 4. При переименовании 1 листа, его новое имя совпадет с именем 2 листа.
не...я гоняю пример который в первом посте.
"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#11 Kreator

    Активист

  • Пользователи
  • PipPipPipPip
  • 708 сообщений
  • Пол:Мужчина
  • Город:Краснодар

Отправлено 01 Июнь 2018 - 10:15

Вообще чудеса какие-то происходят. Судя по журналу, он сначала проходит каждый второй лист, а затем ещё раз каждый второй лист. То есть, суммарно он проходит 9 листов + 1 модель, но почему-то перепрыгивает каждый второй... А что по поводу дебаггера? Я в JS не писал никогда. Его в реальном времени можно просматривать? Например, состояние коллекции, перечислителя?
Скрытый текст

Полховский А.В. Проектирование железнодорожных путей
nanoCAD Plus 10.1.4493.2427; MultiCAD.NET

#12 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 288 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 01 Июнь 2018 - 10:30

Просмотр сообщенияKreator (01 Июнь 2018 - 10:15) писал:

А что по поводу дебаггера? Я в JS не писал никогда. Его в реальном времени можно просматривать? Например, состояние коллекции, перечислителя?
м.б. и можно, незнаю я JS только в браузере писал) там все норм. а не знаете в MultiCAD есть средства переименования листов?
на MultiCAD можно заморочаться, но долго это ппц. задача то пустяковая.
"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#13 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 360 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 01 Июнь 2018 - 10:57

MultiCAD можно. Из Excel на VBA можно с отладчиком попробовать.

#14 Kreator

    Активист

  • Пользователи
  • PipPipPipPip
  • 708 сообщений
  • Пол:Мужчина
  • Город:Краснодар

Отправлено 01 Июнь 2018 - 11:03

В MC можно всё :)
Вот нарыл тут же на форуме:
   McDocument doc = McDocumentsManager.GetActiveDoc();
   //Получаем список всех layout
   List<mcobjectid> sheetsId = refDoc.GetSheets();
   foreach (McObjectId idSheet in sheetsId)
   {
	    //находим Model
	    McDocument sheet = idSheet.GetObject();
	    if(sheet.IsModel){
		 modelSpace = sheet;
		 break;
	    }
   ...
   }
С собой ничего нет, в т.ч. IDE, поэтому не подскажу, чем их там переименовывать.
Полховский А.В. Проектирование железнодорожных путей
nanoCAD Plus 10.1.4493.2427; MultiCAD.NET

#15 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 288 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 02 Июнь 2018 - 17:25

да что ж такое то)
что не так делаю?
почему переименование написанное как ниже не работает?
Скрытый текст

Сообщение отредактировал Ivanco: 02 Июнь 2018 - 17:27

"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET

#16 ISL

    Клуб разработчиков

  • nanoSoft
  • PipPipPipPip
  • 364 сообщений
  • Пол:Мужчина
  • Город:Москва
  • Интересы:Разработка САПР

Отправлено 04 Июнь 2018 - 16:58

llist();
echo("-------------------------");

// A4 -> A(4), это переименование работает
for_each(ThisDrawing.Layouts, function (layout) { res = layout.Name.match(/(A)([0-9]+)/); if (res != null) layout.Name = res[1] + "(" + res[2] + ")"; });
llist();
echo("-------------------------");

// A(4) -> A_4_, а это переименование вызывает рассинхронизацию словаря листов и итератора по листам
// for_each(ThisDrawing.Layouts, function (layout) { res = layout.Name.replace(/[\(\)]/gim, '_'); if (res != layout.Name) layout.Name = res; });

// поэтому, сперва запоминаем что будем переименовывать, а потом переименовываем
var reps = [];
for_each(ThisDrawing.Layouts, function (layout) { res = layout.Name.replace(/[\(\)]/gim, '_'); if (res != layout.Name) reps[layout.Name] = res; });
for (var n in reps) ThisDrawing.Layouts(n).Name = reps[n];
llist();

function llist() { for_each(ThisDrawing.Layouts, function (l) { echo(l.Name); }); }
function for_each(col, fn) { for (var enu = new Enumerator(col) ; !enu.atEnd() ; enu.moveNext()) fn(enu.item()); }
function echo(msg) {ThisDrawing.Utility.Prompt(msg);}

Пишешь приложения под САПР на С++, .NET, COM, Lisp? Вступай в Клуб разработчиков nanoCAD.

#17 Ivanco

    Дилер

  • Дилеры
  • PipPipPipPip
  • 288 сообщений
  • Пол:Мужчина
  • Город:Красноярск
  • Интересы:САПР

Отправлено 04 Июнь 2018 - 17:24

ISL спасибо. то что нужно, вопрос закрыт.
кстати гляньте пример из первого сообщения. там листы именованные типа "(КР-55)" вообще в нане не открываются. видимо из за скобок. причем если они первые. я собственно поэтому я взялся переименовывать.

Сообщение отредактировал Ivanco: 04 Июнь 2018 - 17:25

"ИнфоИндастри" г.Красноярск,г.Иркутск,г.Владивосток-официальный дилер Нанософт
YouTube,GitHub - Ivanco21, using:C#/MultiCAD.NET





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей