Jump to content

Recommended Posts

10 минут назад, forgeprojects сказал:

а зачем тогда эта программа?)

Хороший вопрос!!!

Зачем микроскоп если им нельзя забивать гвозди)))

  • Like 1
Link to comment
Share on other sites

7 часов назад, Volkov сказал:

чойта???:D

На пальцы соскальзывает

Link to comment
Share on other sites

  • 2 months later...

Часто спрашивают, почему ctlSetValue передаёт в объект данные не соответствующие тому, что Видно  в таблице

Если строки сгруппированы, то нужно в выражении это учитывать и писать  sum(ctlSetValue(Cell;object property)) 

image.png.53070027fa28aee7ab1c3e1729d08438.png

 

image.thumb.png.ac81f1a2d43a508acfb648b2586f6f5a.png

sum CtlSetValue.dwg

  • Like 4
  • Thanks 1
Link to comment
Share on other sites

Очередной вопрос "Из зала"

Пользователи платформы нанокад, не имеющие возможности сделать выноску в виде универсального маркера и подключить таблицу параметров,

image.png.f8d6f09b4e0e0494689f2893a0f8ebf6.png

вынуждены записывать значения руками и одной строкой.

image.png.35cb88d5ab56d28ac5cbd853c8a660cd.png

Соответственно, при создании отчёта, нет  возможности получения данных записанных одной строкой, в качестве параметров.

Например, значение выноски %%с5 L=5000 мм придёт одной «строкой»

Для разбора такой строки и определения условия для отбора можно воспользоваться выражением:

iff(xNum(Object.String2)==Diam1;xNum(subSplit(Object.String2;"L=";2));0)

image.png.ad9fd349006301b350adb115999815e1.png

 

Object.String2 – вторая строка выноски

Diam1 – переменная (в данном случае определена на пользовательской форме) доступная в таблице в Инспекторе

subSplit – разделить строку (Object.String2) по значению "L=" и «2» оставит левую часть после аргумента деления

Так, как после удаления правой части мы получим 5000 мм, то нам нужно значение строка перевести в число функцией xNum

Дополнительно в примере: 

В чертеже нет выносок с диаметром 6 во второй строк. Соответственно, это колонка "G" будет скрыта, так как в Итоге вычисляется ширина колонки

=iff(summ(section(-1))==0;ctlSetColumnWidth(w_cell0);ctlSetColumnWidth(w_cell)) +summ(section(-1)) 

image.png.dced98d5640047bd23d5dae6d95e3c98.png

 

 

subSplit ctlSetColumnWidth.dwg

Edited by MCAD
Пример с расширенными возможностями
  • Like 2
  • Thanks 2
Link to comment
Share on other sites

В 02.07.2021 в 17:25, forgeprojects сказал:

Решил вернутся к СПДС, но опять только трачу время. Почему та неправильно считает плинтусы.

У вас в назначенной отделке стоит подсчет по Периметру, программа данным образом и считает.

Нужно переключить на Периметр (без учета дверных проемов)

Данная возможность реализована начиная с версии 20.0

2021-09-24_10-23-58.png

2021-09-24_10-26-23.png

2021-09-24_10-25-55.png

  • Like 4
Link to comment
Share on other sites

5 часов назад, Zueva сказал:

У вас в назначенной отделке стоит подсчет по Периметру, программа данным образом и считает.

Нужно переключить на Периметр (без учета дверных проемов)

Данная возможность реализована начиная с версии 20.0

2021-09-24_10-23-58.png

2021-09-24_10-26-23.png

2021-09-24_10-25-55.png

https://redmine.mcad.ru/issues/13282

  • Like 1
Link to comment
Share on other sites

  • 4 months later...

Автоматическое составление данных спецификации в голом nanocad.

Рутинная работа получения актуальных данных  с моделей давно перестала удивлять пользователей.

Однако стоит заметить, что пользователи аналога  давно и успешно используют различные средства автоматизации для  получения табличных данных используя инструмент _DATAEXTRACTION (Извлечение данных)

 

Рассмотрим аналогичную задачу в nanocad

 

В качестве исходных данных имеем чертёж, где все оборудование представлено в виде обычных блоков.

image.png.9e6f35ca2e0b08f09bc0b0daad218602.png

Все блоки имеют одинаковый  набор атрибутов, необходимый и достаточный для составления спецификации  оборудования. Нам необходимо cобрать данные с чертежа, подсчитать   количество, массу (ту, которая попадает в спецификацию) и, проставив позиции в таблице, вернуть их значение в атрибуты блоков.

 

Вставляем заготовку из базы данных или делаем нестандартную таблицу по вашим потребностям

image.png.f19c5ce18cb96c80aae457e79e08ae14.png

 

В открывшемся редакторе таблицы в пункте «Разделы» выбираем «Вставить раздел отчёта»

image.png.e46068d979aafb808cdbb15907b652b6.png

Теперь нам нужно выбрать, какие объекты будут попадать в отчёт

Нажимаем на

 image.png.78711bbbf62b5d9cc83bc31f3982fa82.png

И, выбрав  в качестве объектов «Вхождение блока», накладываем дополнительное условие,  что значение атрибута блока «Отчёт» =1

image.png.e3730dcec80a192e531c5e7d3b22cf55.png

 

Теперь в наш отчёт автоматически будут собираться все блоки, удовлетворяющие нашим условиям.

image.png.d5bf4f717e3991d7744c43c830c32d29.png

 

Дополнительно можно добавить любые доступные условия фильтрация. Например, ограничить выбор блоков только на определённом слое или по имени блока. Причём, в условие можно добавить не имя блока или слоя целиком, а только часть «строки»

image.png.b37c5c12a334a2463a6f1c8e8701a0c2.png

Теперь, собственно, переходим к получению самого отчёта (спецификации)

Для этого щёлкнем правой клавишей мышки в колонке «B» строки отчёта и выберем нужное свойство. =Object."АРТИКУЛ"

image.png.49c5f4307a060581fab0fc01b19aac33.png

 

В колонке «В» появятся все доступные свойства блоков с данным атрибутом

image.png.7aff9fefcf5b29151e5c54679aaf2887.png

 

Последовательно назначаем нужные свойства колонкам, выбрав их в контекстном меню

image.png.9bea3d4d7ae3d5095203e6ce97612433.png

 

После этого все данные атрибутов блоков отображаются в таблице и нам необходимо правильным образом и структурировать.

Для этого нажимаем «Группировать и объединять» в шапке строки отчёта

image.png.f53df2a0d3491867637cfb16ec383af2.png

 

В отрывшемся диалоге нужно мышкой перетащить нужные колонки в область «Группировки и объединения»

image.png.3abdc1bc0274c50e2af16b35f9e8fec8.png

и определить нужные действия.

 

Колонку «C» мы отсортируем по возрастанию,  а данные колонки «B» сгруппируем по одинаковым значениям

image.png.dea0754f65a1606136575ed83408c2c7.png

Добавим в колонку «А» =row. Теперь в колонке будет отображаться порядковый номер строки отчёта.

А для «F» сделаем некоторое усовершенствование.  Так как «Заказчик» не любит простых решений, то для данного конкретного случая пустая ячейка вызывает неприятие такого отчёта. 

Проверяем, что если значение атрибута МАССА не заполнено, то пишем «-», иначе указываем массу

=iff(Object."МАССА"=="";"-";Object."МАССА")

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

image.png.d02a2f378625d95c6d2086468c0703e3.png

 

Теперь наша таблица имеет вид.

image.png.99a26325c0a298004ffe2cc853bd9180.png

Как видно на экране,  данные, которые не вошли в одну ячейку,  увеличили её строку по высоте.

Что бы избежать этого,  в редакторе таблиц  для колонки  «D» назначаем «Переносить по словам» и «Добавить строки»

image.png.3623239d5dca30367ed0cc62969748b7.png

А для колонок «E, F и G»  становиться доступным флажок «Разместить внизу». Так, как нам не нужно переносить эти ячейки, то ставим "Сжать по горизонтали"

image.png.42e58837414f541eeed59273d8e36abb.png

 

Теперь строки в таблице отображаются нужным образом.

image.png.96197f1c28e5d8503e72c3543e7d5326.png

 

Щёлкнув по «Шаблону отчёта», Добавляем «Итог отчёта»

image.png.bef3b2eb4fa55abe2a020e707c159626.png

 

Теперь нам нужно вычислить полную массу всего оборудования.  Так как в колонке «Масса ед» она указана с «кг», то нам проще сделать это в скрытой колонке

Пишем в ячейке отчёта «J» =Object."МАССА"*count()

И считаем полную массу в строке «Итог»  отчёта  =summ(section(-1))

image.png.519184fc9d929caf2ad0d5d9ac9919c6.png

Так, как столбцы «C, H, I, J» у нас "скрытые", то итоговая сумма не будет видна на чертеже

image.png.d29c670b79a795f74dbc3f79ae8e495f.png

В общем случае достаточно сослаться на ячейку (= off(0;3)) и вывести полученное значение, но перфекционизм заказчика  требует сделать проверку , что если масса больше тысячи килограмм, то нужно выводить в тоннах. Да и фиг бы с ним.  Нам не трудно. В ячейке "G" "Итога" отчёта вычисляем: 

=iff(off(0;3)<1000;round(off(0;3);2)+" кг.";round(off(0;3)/1000;2)+" т.")

 

____________________________________________________________

Теперь можно сказать, что мы смогли повторить функционал _DATAEXTRACTION (Извлечение данных)не используя никаких дополнительных инструментов, а просто повторяя логику проектировщика при составлении спецификации. Собрать  в кучу, подсчитав  блоки с одинаковым именем и получив в таблице номера позиций, вернуть их в атрибут блоков. 

В колонке отчёта "I", введём =sum(ctlSetValue(off(0;-1);Object."ПОЗИЦИЯ")). Буквально это означает, что мы берём вычисленное значение из левой колонки off(0;-1)  и передаём его в атрибут блока "ПОЗИЦИЯ" 

image.png.5aa20f114eb76d8ed61d8af2faad70ae.png

 

Используя обычную выноску платформы

image.png.5c4109ddb1c5ca5de8525782b7fc3e4c.pngimage.png.085b8688e6589e8fefb5a44087d4e1af.png

мы можем указать блок и взять значение атрибута позиция.

 

image.png.cfb3275f2b37aee6b2097a4e451b74f7.png

 

Далее, используя команду платформы addCopy с опцией  <Несколько>

image.png.faea261a2734b949effd680299ce9305.png

Последовательно указываем нужные блоки и расставляя позиции (выноски) на чертеже.

Теперь, при любом изменении количества блоков, изменения массы блока (если постоянный атрибут) или изменении значения атрибута "Отчёт" на <не равно Один> Спецификация всегда будет иметь данные актуальные на для данного чертежа. 

image.png.542ce99b2fe1ec0c4528182e19ac999d.png

____________________________________________________________

PS: Не буду перегружать этот пост информацией по более полной автоматизации. Например   все это можно посмотреть в ролике.

Отдельно следует добавить, что таблица, сохранённая в базе данных, будет всегда доступна для повторного использования всеми пользователями локальной сети организации и легко импортируется  для передачи другим пользователям средствами утилиты конфигурации.

Файл примера и пошаговое описание действий моно посмотреть под роликом 

 

 

  • Like 1
  • Thanks 6
Link to comment
Share on other sites

  • 8 months later...

Очередной вопрос из зала, касающийся предварительной настройки ячейки таблицы.

Все знают, как в autocad, для конкретной ячейки сделать префикс и суффикс

 

 

В нанокад, это тоже можно сделать, более гибко, но необходимо обладать определёнными навыками и пониманием того, что вы делает.

В примере, ячейка формируется из  двух ячеек и, в зависимости от назначенных условий может по разному отображать своё значение. 

Конечно в "рабочем варианте" колонки "A" и "C" нужно сделать "скрытыми"

=iff(This."Добавить нули"==1;
Select(
	off(0;-1)>=1000;off(0;-1);
	off(0;-1)>=100&&off(0;-1)<1000;"0"+fmtText(off(0;-1));
	off(0;-1)>=10&&off(0;-1)<=100;"00"+fmtText(off(0;-1));
	off(0;-1)<10;"000"+fmtText(off(0;-1));
TRUE;"0"+fmtText(off(0;-1)));
off(0;-1))+iff(off(0;1)=="";"";"-")+
off(0;1)

 

В данном случае, можно ссылаться непосредственно на ячейку:

=iff(This."Добавить нули"==1;
Select(
	A3>=1000;A3;
	A3>=100&&A3<1000;"0"+fmtText(A3);
	A3>=10&&A3<=100;"00"+fmtText(A3);
	A3<10;"000"+fmtText(A3);
TRUE;"0"+fmtText(A3));
A3)+iff(C3=="";"";"-")+
C3

остаётся только "растянуть" ячейку на колонку и все значения будут автоматически пересчитываться.

 

PS: если нет необходимости приводить число разрядов или суффикс величина постоянная, то можно сильно упростить

= "Префикс "+ A3+ "мм."  

и так же растянуть ячейку на колонку. Получится проще и быстрее чем в autocad

 

 

 

addcopy rev002.dwg

  • Like 2
  • Thanks 2
Link to comment
Share on other sites

  • 2 weeks later...

А формы к таблицам в простом нанокаде можно прикрутить?

Очень было бы удобно.

В СПДС понятно можно, а простом нано? Или только в СПДС делать, а затем в нано с адаптером СПДС?

Link to comment
Share on other sites

Только что, Bucho сказал:

формы к таблицам в простом нанокаде можно прикрутить?

Нет

Формы таблиц, маркеров, шаблонов в платформе не работают

  • Like 1
Link to comment
Share on other sites

Я раньше пробовал в СПДС в тестовом сделать форму типа "Хело, Ворд".

и в таблицах простого нанокада с адаптером СПДС она работала из меню файл->показать форму

 

Но это не удобно.

Искать у кого есть СПДС для форм ;)

Link to comment
Share on other sites

7 минут назад, Bucho сказал:

сделать форму типа "Хело, Ворд"

Так это пожалуйста. @doctorraz любой word поприветствует подключит

и красную кнопку даже сделает

 

 

  • Haha 2
Link to comment
Share on other sites

30 минут назад, Bucho сказал:

и в таблицах простого нанокада с адаптером СПДС она работала из меню файл->показать форму

и сейчас работает

32 минуты назад, Bucho сказал:

Искать у кого есть СПДС для форм

он есть у всех начиная с нано20, адаптер механики и спдс встроен

-----------

из того жэж меню в табличном редакторе ты можешь создать форму в нанокад "с адаптером СПДС"

только вся фишка форм, что с ее помощью с таблицами в СПДС, можно работать не заходя в табличный редактор...

а  в нано с адаптером вне редактора формы не работают

  • Like 2
Link to comment
Share on other sites

Вот опять попался вопрос из серии "Старые песни о главном" (с).

"Как разбить строку по определённому знаку"

 

Пример под роликом.

Нужно:

• Разбить строку по символу «×»;

• Отсортировать по возрастанию, в каждом поддиапазоне;

• Автоматически проставить позиции;

• Определить количество одинаковых значений;

• Сформировать текстовую строку;

• Вывести на чертёж;

00:04 Открываем таблицу в «Редакторе таблиц». В таблице имеется форма для интерактивного взаимодействия при создании отчёта с обратной связью с чертежом

00:15 Вставляем раздел отчёта. В качестве источника данных выбираем «Позиционные выноски», расположенные на слое «Example». В столбце «А» отчёту будет вычисляться номер «Позиции». Для этого пишем выражение =row-I$15, где ячейка «I$15=row». В столбце «В» задаём значение первой строки «позиционной выноски» =Object.String1

00:58 Так как нам нужно будет разделить содержимое =Object.String1 по символу «×», которого не т на клавиатуре, заходим в «спец. Символы» вставляем это символ в ячейки и вырезаем его, тем самым копируя его в «буфер обмена»

01:05 В ячейке «С» строки отчёта пишем функцию subSplit , в качестве первого аргумента ссылаемся на ячейку off(0;-1), в качестве разделителя строки пишем "×", и 1 - первая группа символов. =subSplit(off(0;-1) ;"×";1). Примечание: в качестве первого аргумента можно использовать «Object.String1» или непосредственный адрес «В16». Но лучше использовать «относительный» адрес ячейки.

01:39 Для ячеек отчёта «D» и «E» пишем =subSplit(off(0;-2) ;"×";2) и =subSplit(off(0;-3) ;"×";3) соответственно.

02:07 В ячейке «F» перемножаем полученные в столбцах «C», «D» и «E» значения, вычисляя «объём»

02:26 В ячейке «G» определяем, что должно должна содержать вторая строка «Позиционной выноски». Мы хотим вывести туда позицию (столбец «А» отчёта), толщину (столбец «Е» отчёта) и суммарное количество данных записей на чертеже (count()). Сложим все вместе: ="Поз."+off(0;-6)+"(S="+off(0;-2)+"мм, "+count()+"шт.)". В «кавычках» просто текстовые константы, которые будут добавляться в нужное место строки

02:54 Теперь нам нужно просто передать вычисленное в столбце «G» значение во вторую строку «позиционной выноски» =sum(ctlsetValue(off(0;-1);Object.String2)). Функция ctlsetValue в качестве первого аргумента принимает значение «ЧТО передавать» (off(0;-1)), а второй аргумент «КУДА передавать» (Object.String2) 03:34 После закрытия диалога «Редактора таблиц» мы видим, что у четырёх «позиционных выносок», расположенных на слое «Example», появились значения во второй строке, соответствующие вычисленным в отчёте.

03:37 При переносе «Позиционных выносок» на разные слои вторая строка выносок, попавших на слой «Example», автоматически пересчитывается.

04:48 Теперь мы должны найти одинаковые «позиционные выноски». Заходим в диалог «Группировка и объединение» и создаём правила для «Объединения» , «Группировки» и «Сортировки». Задаём объединение по "С" и "D" и группировку по "Е". Теперь функция count() в колонке «G» считает нам количество сгруппированных строк. Например: Поз.2 (S=2мм, 3шт.)

04:59 Теперь расчётные данные предаются в объект. Но, при изменении условия выборки, ничего не меняется в уже установленных объектах. Так как при изменении слоя они автоматически пропадают из выборки и, соответственно, из отчёта.

05:11 Мы можем отредактировать «позиционную выноску» через диалог или через свойства платформы, но для полного счастья нам хотелось бы добиться полной автоматизации.

05:15 Заходим в диалог «Редактирование таблицы» и создаём новый отчёт. Нажимаем «Выбрать исходные объекты» и, Указав «Позиционную выноску», добавляем условие, что выбор по все слоям кроме «Example».

05:57 В любой столбец нового отчёта, кроме «А», вставляем =sum(ctlsetValue(off(0;-1);Object.String2)). Теперь, при переносе «Позиционной выноски» со слоя «Example» на любой другой слой, значение второй строки выноски будет «обнуляться»

06:20 Группируем отчёт по столбцу «А»

06:40 Проверяем работу 07:20 Воспользуемся созданным отчётом, как прототипом для работы с абсолютно другим объектом.

07:27 Для этого нам нужно поменять источник данных для отчёта на «Параметрический объект»

07:41 Изменить источник строк столбца «В» на «=Object.sPartName» и целевой параметр в столбце «Н» на =sum(ctlsetValue(off(0;-1);Object.sPoz)).

08:22 Так как слово «Поз.» уже присутствует в параметрическом объекте, мы легко можем модифицировать строку в ячейке «G» - просто удалив “Поз. “+

09:07 Редактируем "источник данных" и "строк" второго отчёта в таблице.

Проверяем работу!!!

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

День добрый! Подскажите, когда планируется осуществить вставку таблицы (.dwg) на основе связи с данными?

добавлено через 5 минут

На вопрос: "зачем (типа пользуйтесь таблицами nanoCAD, там всё очень удобно...)?" ответ простой: пользуюсь nanoCAD Электро, могу выгружать готовые спецификацию и кабельный журнал в Excel но для нормального оформления в .dwg нужна именно "связь с данными"

Link to comment
Share on other sites

15 минут назад, s_platov сказал:

в Excel но для нормального оформления в .dwg нужна именно "связь с данными"

Вроде как в нано таблицах связь с Excel есть.

Link to comment
Share on other sites

Да, есть импорт таблицы из Excel, это так. НО выполнив такой импорт получаешь несоответствующую нормам (по размерам) таблицу. Конечно, не сложно её поправить, но если данные в исходной таблице поменялись (бывает несколько раз на дню) и захочешь "обновить таблицу из внешнего источника" то всё оформление летит "в помойку"

 

добавлено через 0 минут

А если бы работала "связь с данными", этого не происходило бы

добавлено через 2 минуты

Очень не хочется часть работы делать в nanoCAD и куски доделывать в AutoCAD

Link to comment
Share on other sites

1 час назад, s_platov сказал:

пользуюсь nanoCAD Электро

Я уже хотел удивиться, что он не умеет в чертёж вставлять. Полез проверять.

image.png.7d8a14286727aecb80684cbba55d6515.png

 

Это, конечно не отменяет первоначального вопроса, но чем не устраивает собственный экспорт. Вопрос риторический, я не смогу оценить все тонкости :(

  • Like 1
Link to comment
Share on other sites

Уважаемый MCAD, если бы устраивал штатный вариант "Создать спецификацию в CAD" я бы не задавал свой вопрос. Попробовав выгрузить спецификацию в CAD Вы бы увидели, что способ выбран очень оригинальный - КЖ выполняется не в модели а в листах, редактированию "нормальными средствами" не подлежит (ни по оформлению, ни по содержанию), в подшивки тоже не особо собрать. Тем более вопрос то очень простой - Штатно при "Вставке таблицы .dwg" параметр вставки "На основе связи с данными" присутствует (как и в ACAD), НО не активен. Значит разработчики предполагали в дальнейшем этот механизм внедрить? Вот я и спрашиваю: будет ли и если будет, то когда?

добавлено через 5 минут

Или, возможно, есть способ используя "Таблицы nanoCAD" и "Импорт таблиц из Excel" сделать так, чтобы после редактирования вида (геометрию и выравнивание) таблицы nanoCAD каким-то образом "запретить изменения геометрии" при последующем "обновлении из внешнего источника"? Такой вариант тоже вполне бы устроил

Link to comment
Share on other sites

Я всё понимаю

9 минут назад, s_platov сказал:

Тем более вопрос то очень простой

Я же именно так и написал

15 часов назад, MCAD сказал:

Это, конечно не отменяет первоначального вопроса

:-(

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт? Tell a friend!

×
×
  • Create New...