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

*

Оффлайн Tsepov

  • *****
  • 218
  • Репутация: +23/-0
  • Пол: Мужской
  • LABPP

*

Оффлайн Stringer

  • ****
  • 350
  • Репутация: +16/-2
Попробовал пользоваться Labpp_Automat для создания таблицы квартир по требованию Минстроя по подготовленному скрипту. Т.к. в
программировании я профан, то двигался на ощуп по знакомым словам )
1.      У меня своя структура слоев и слой для маркеров имеет другое название, так же у меня на плане размещены общий маркер этажа и
маркер объединяющий места общего пользования
(рис. 01)
Подготовленный скрипт выбирает все маркеры. По логике названий понял что надо править файл «pso_live». Название слоя для выборки заменил и добавил правило выборки по имени объекта маркера:
// выбрать все маркеры квартир
               cout<< "старт выборки";
               string longlayername = "ИМЯ СЛОЯ";
               string sObjectName = "ИМЯ ОБЪЕКТА";
               int ires =ac_request("load_elements_list",4,"ObjectType","Layer",longlayername,"ObjectName",sObjectName,"MainFilter",2);

2.      Заметил что столбик «Этаж расположения» заполняется на 1 меньше номера этажа (по индексу этажа начиная с «0»). Прибавил
единицу к индексу этажа:
ires = ac_request("get_element_value","StoreIndex");
                               floornum= ac_getnumvalue()+1;

3.      Было нужно чтобы в столбике «Назначение» всегда писалось просто «квартира»:
ires =ac_request("get_object_property_value","TS_KVTYPE");
naznacheniye= "квартира"; //ac_request

То что было написано раньше закоментировал на всякий случай.
4.      По умолчанию столбик «номера подъезда» заполнялся из параметра маркера «номер секции».  Для логичности поменял,
все-таки, на номер подьезда:
ires = ac_request("get_object_property_value","TS_PODN");
section= ac_getnumvalue();

5.      Не нравилось что в последних столбиках по вспомогательным помещениям у каждой квартиры составляется полный список всех
возможных помещений с прочерками напротив отсутствующих. Закоментировал строки
которые за это отвечали (поначалу заменил названия на те которые использую сам):
                               //ts_table(TableDescrOthers,"add_row",1, "коридор",2, 0);
                               //ts_table(TableDescrOthers,"add_row",1, "кухня",2, 0);
                               //ts_table(TableDescrOthers,"add_row",1, "кухня-ниша", 2, 0);
                               //ts_table(TableDescrOthers,"add_row",1, "гардероб",2, 0);
                               //ts_table(TableDescrOthers,"add_row",1, "кладовая",2, 0);
                               //ts_table(TableDescrOthers,"add_row",1, "совмещенный с/у", 2, 0);
                               //ts_table(TableDescrOthers,"add_row",1, "с/у", 2, 0);
                               //ts_table(TableDescrOthers,"add_row",1, "ванная",2, 0);
                               //ts_table(TableDescrOthers,"add_row",1, "лоджия",2, 0);
                               //ts_table(TableDescrOthers,"add_row",1, "балкон",2, 0);

6.      Площадь балконов и лоджий в последнем столбце писалась без коэффициента. Чтобы площадь была с учетом коэфициента заменил
название параметра паспорта зоны по умолчанию на параметр своего паспорта зоны
с коэф. (в конце закоментированный параметр по умолчанию):
ires = ac_request("get_gdlelem_property_value","My_area"); //"ROOM_AREA"
7.      Захотел убрать из таблицы слово «секция», и заменить его словом «подъезд». Просто поиском нашел нужные слова и заменил их,
или удалил для переименовывания столбца «номер подъезда (секции)».
 
Теперь о выявленных проблемах и не решенных задачах:
(рис. 02)
8.      Условный номер комнаты берется из № зоны, и если зоны имеют одинаковый номер, то и условный номер в таблице будет одинаковый.
Жилые дома зачастую проектируются без поэтажной экспликации и только с
названиями помещений на плане, по-этому следить за номером зон не всегда
удобно. Хотелось бы чтобы условный номер присваивался независимо от № зоны,
например от большей комнаты к меньшей.
9.      Если два помещения в квартире имеют одинаковое название,  то в таблице они объединяются в одну строку. У нас экспертиза требует
чтобы если в ванной есть унитаз, она называлась «с/у», можно назвать «совмещенный
с/у», но это загромоздит план. Хотелось бы чтобы помещения с одинаковым
названием не объединялись в одну строку.
10.  Неясна логика формирования списка вспомогательных помещений квартир. Они формируются независимо от № зоны и
алфавита по названию. Иногда «кухня» на первом месте, иногда «балкон». Не
разобрался как настроить последовательность, но чтобы небыло списка всех
возможных помещений с прочерками напротив отсутствующих (так слишком громоздко
при большом кол-ве квартир).
11.  В заголовке таблицы есть название объекта, оно записано в скрипте в конце:
//excel_putstrvalue("Жилой дом  № 1 (5-ти секционный, 17-ти этажный),расположенный по адресу: Московская область, г.о. Балашиха, севернее улицы
Лукино, квартал \"Б\"");
string s = "Жилой дом  № 12, расположенный по адресу: г.Москва";

Хотелось бы увязать эту строку с автотекстом из ArchiCAD, например <PROJECTNAME>.
12.  Первый столбец с названием «Блок» хотелось бы убрать совсем,  т.к. его нет в приказе минстроя, да и таблица формируется
зачастую из файла ArchiCAD в котором один дом, а то и один подъезд дома, и
достаточно градации квартир по номеру подъезда.
13. Ещё хотелось бы чтобы какие-то основные настройки в скрипте были вынесены в отдельный файл, чтобы удобнее было настраивать под себя.

*

Оффлайн crazyASD

  • Самый главный
  • *****
  • 8467
  • Репутация: +512/-25
  • Пол: Мужской
  • iCrazy
Очень интересный опыт, спасибо за отзыв!

*

Оффлайн Tsepov

  • *****
  • 218
  • Репутация: +23/-0
  • Пол: Мужской
  • LABPP
Для получения информации о проекте можно использовать запрос:

ac_request("projectinfo", valuename1, variablename1, valuename2, variablename2, ...);

В аргументах задаются имя параметра проекта, за ним через запятую - переменная программы, куда вернуть значение.
И так далее через запятую.
Возвращает 0 при успешном выполнении. Если что-то пошло не так возвращает -1.
"projectname" название проекта
"client" заказчик
"company" компания
"street" улица
"city" город
"country" страна
"architect" архитектор
"projectstatus" статус проекта
"date" дата выпуска
"notes" комментарии
"draftsmen" исполнитель
 
Пример использования:

    string sProjectname, sArchitect;
    int res = ac_request("projectinfo","projectname",sProjectname,"architect",sArchitect);
    // вывести в окно сообщений
    cout << "Название проекта = " << sProjectname << " , архитектор=" << sArchitect << "\n"

*

Оффлайн Stringer

  • ****
  • 350
  • Репутация: +16/-2
Не могу сообразить как по вашему примеру забить адрес из архикада.
Сейчас строки имеют вид:
string s = "АДРЕС";
s = s;

Понимаю что надо вместо адрес вбить sProjectname, но мне все время выдает синтаксическую ошибку

*

Оффлайн Tsepov

  • *****
  • 218
  • Репутация: +23/-0
  • Пол: Мужской
  • LABPP
Скорее всего надо обновить плагин с сайта.

*

Оффлайн Stringer

  • ****
  • 350
  • Репутация: +16/-2
Заработало! В итоге получилось так:
   string sProjectname;
   int res = ac_request("projectinfo","projectname",sProjectname);
   string s = sProjectname;
   s = s;

*

Оффлайн Tsepov

  • *****
  • 218
  • Репутация: +23/-0
  • Пол: Мужской
  • LABPP
Отлично!
Строка
s=s;
лишняя. Можно убрать.

 

Похожие темы

  Тема / Автор