|
  |
Создание спецификации автоматически (Дубль2), Рассматриваются технология и ее реализация по автоматическому создани |
|
|
Гость_Supermax_*
|
9.9.2007, 18:03
|
Guest Forum

|
Я тебе сочувствую. Чес. слово. Писать проги для широкой аудитории это конечно патриотично, но не экономично. Я очень не приветствую потугов Autodesk-a разнообразить линейку кадов. Гораздо лучше бы было добавлять основному ядру руки и ноги. Так по крайней мере и уровень продвинутости AutoCAD-a вырос бы и пользователи друг друга бы лучше понимали. А так, у них там все лучшие умы разбрелись по версиям када и в результате явная накладка исполнений. Я вот давно понял, что если я не сосредоточу все свое внимание на каком-то одном продукте, то и результат будет - ни рыба, ни мясо. Все эти специализированные исполнения типа десктопов и усеченнных вариантов чес. слово баловство. У нас работает человек пять продвинутых автокадчиков, все они прошли через эти специализированные кады и выбросили их на помойку. У всех чистый AutoCAD. И ни кто их не убеждал. Сами приняли решение. Есть такой "пивной синдром". Раньше было пара-тройка сортов, люди в них разбирались, ценили. А сейчас, заходишь в магазин - уйма, до неба! И все по большей части - полный отстой. Никого уже не тянет в этом разбираться и слыть ценителем. В результате - те, кто покупал пиво чтобы получить удовольствие от вкуса - вымерли. Остались только те, которые получают удовольствие от количества. Так и в программах. Когда в проге появляется слишком много кнопок, которые можно применять, но очень редко - их удаляют из панелей и про них забывают. А работа основных команд, таких как например черчение линий - стоит на месте. Эти функции не совершенствуются (что соответствует улучшению вкуса пива), а остаются на старом уровне. Зато появляется много новых функций, что улучшает общее раскручивание продукта. Что творится при этом в теле программы догадаться не трудно. От чего и все твои проблемы с совместимостью. Могу посоветовать (извини за нескромность). Сам выбери себе лидера среди всех виденных тобой программ и пиши только для него. Пошли все эти другие проги (даже если там есть что-то интересное) куда подальше! Если не работает макрос под LT - не трудись его дорабатывать. Уважай свой труд. В жизни надо занимать твердую позицию. Сам мне говорил, что всем не угодишь. Если заказчик хочет под LT - пиши для LT. Хочет под чистый кад - это уже другой макрос и за другие деньги. А то слишком кучеряво выходит "чтобы везде работало".
|
|
|
|
Гость_OVKT_*
|
9.9.2007, 19:23
|
Guest Forum

|
Как сказали на семинаре в Русской Промышленной Компании, самый лучший Автокад - это... 2004-й.
|
|
|
|
|
9.9.2007, 20:40
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
> OVKT : Полные данные на того, кто это сказал, пожалуйста. А так... "Бездоказательно, дорогой профессор. Бездоказательно". Не верю я в это, не верю. 2004 - не самый плохой кад, но и не самый лучший. Я точно так же могу заявить, что 2006 самый крутой, или 2007. Или 2008. > Supermax : Ну есть такая фраза: "Что бы мы ни делали, а мухи летом все равно будут". Лидера-то я давно выбрал, но 22 места AutoCAD LT тоже покоя не дают. Под LT я пишу не макросы, а лиспы, вполне нормально работающие (как правило). Есть, конечно, тонкости, но их достаточно мало. То, что у тебя продвинутые выкинули вертикальные решения, показывают то, что отсутствовало какое бы то ни было сопровождение и наладка. Вопрос к продавцам софта. Читая, что Виталий Филин на autocad.ru делает в MEP, я тихо фигею - какие в нем (в софте, ессно) возможности скрыты.
Сообщение отредактировал kpblc - 9.9.2007, 20:44
|
|
|
|
Гость_Supermax_*
|
10.9.2007, 20:28
|
Guest Forum

|
О! Возможности везде есть. Люди ведь не только за бабки пашут. Интерес и личные идеи реализовывают. Но есть такая пакость как эволюция. Проги, которые имеют то, что имеют благодаря их собственной эволюции так просто с наскока не напишешь. Опыт есть опыт. AutoCAD - эволюционный продукт. Когда начинают что-то с нуля, или на базе известной платформы, то с нуля, сами понимаете, а на базе платформы про саму платформу забывают. Она перестает эволюционировать и все в целом храмает на обе (или сколько там их у нее) ноги. Проанализируйте все продукты "на платформах" и увидите то, о чем мы тут печемся. Это совсем не означает, что надо все продукты отвергать, просто не надо писать для всей линейки. Кесарю - кесарево, а слесарю - слесарево. Вот драйвера к плотерам ведь все разные. Для каждой операционки отдельно выпущены, а не адаптированы.
|
|
|
|
Гость_Supermax_*
|
10.9.2007, 22:20
|
Guest Forum

|
Спешу еще добавить, а то сейчас охранники заявятся и будут плакаться, что надо под охрану офис ставить. Отсутствует общая идеология перспектив развития проектирования. Почти во всех институтах пытаются создать хоть какое-то подобие концепции этой самой перспективы, но разработчики всяких кадов эти концепции не видят, поскольку их к их созданию не привлекают. В результате реализовывать эти концепции нечем. Не видно в AutoCAD-e следов хоть как-то организованных идеалогий. Есть некоторые детали, да только в общую картину никак не склеиваются. Как скажите развивать програмный продукт, если проектирование не развивается? Была с самого начала установка - с начала моделировать тело, а потом его в Layout-ах в разных ракурсах и разрезах показывать, так кроме железячников этим никто руководствоваться не спешит. Вот какого хрена сделали в AutoCAD-e возможность распечатывать Model? Как людей отучить теперь рамки со штампами в ней рисовать? Предлагаю сделать диверсию - написать постоянно действующий макрос, который не дает печатать из модели. Как только станет ясно как будет развиваться проектирование, сразу станет ясно что и как нам писать.
|
|
|
|
|
10.9.2007, 23:07
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну, по-моему, тут звучит "взгляд не с того конца истории". Пространство листа в AutoCAD'е же не сразу появилось. В 12-й версии под DOS его еще не было. Цитата Была с самого начала установка - с начала моделировать тело, а потом его в Layout-ах в разных ракурсах и разрезах показывать, так кроме железячников этим никто руководствоваться не спешит Почему? Архитекторы, работающие в ADT, очень широко этим пользуются. Цитата Вот какого хрена сделали в AutoCAD-e возможность распечатывать Model? Не дали, а оставили. Посмотрим, что будет в 2009  Цитата Предлагаю сделать диверсию - написать постоянно действующий макрос, который не дает печатать из модели. Я - пас. Из принципа.
|
|
|
|
|
11.9.2007, 14:50
|
Группа: Участники форума
Сообщений: 1587
Регистрация: 24.1.2005
Из: Чита
Пользователь №: 384

|
Цитата(Supermax @ 11.9.2007, 5:20) [snapback]164719[/snapback] ...Вот какого хрена сделали в AutoCAD-e возможность распечатывать Model? Как людей отучить теперь рамки со штампами в ней рисовать? Предлагаю сделать диверсию - написать постоянно действующий макрос, который не дает печатать из модели. Как только станет ясно как будет развиваться проектирование, сразу станет ясно что и как нам писать. Пардон за маааленький офф-топ. Если осуществить предлагаемую Вами диверсию, то 90% проектных контор на территории нашей необъятной Родины обанкротятся, по причине того, что не смогут распечатать свою продукцию. У Вас здесь интересный, конструктивный диалог о высоких материях, но в реальности львиная доля чертежей выполняется в модели вместе с "рамочками" и печатается оттуда же на струйных принтерах с использованием цветозависимого стиля печати по фамилии "monochrome". Это - будни проектировщиков "на местах" ("местами" эта реальность до сих пор не вышла за границы 14-й версии АвтоКАДа) и с ней (реальностью) тоже нужно считаться:-) Не смотря на все рассуждения, нужно более реально смотреть на вещи.
|
|
|
|
|
11.9.2007, 21:47
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
> Bers : К сожалению (или счастью, не знаю), но минимальная версия AutoCAD'a была ограничена практически в самом начале темы - AutoCAD 2006. В R14 не было объектной модели и VBA, насколько я слышал; также там не было до конца реализовано пространство модели, про дин.блоки и палитры инструментов там даже заикаться не след - засмеют; arx еще не был привязан к студии от MS ну и так далее. Кстати, эту "диверсию" выполнить лично мне (на моем сегодняшнем уровне знаний) невозможно априори. И кроме того, даже если она будет выполнена, я за полчаса (снести кад - очистить винт и реестр - поставить кад) эту диверсию ликвидну так, что и памяти о ней не останется.
|
|
|
|
Гость_Supermax_*
|
17.9.2007, 16:54
|
Guest Forum

|
Добавлю немного интересного. Сейчас собираю дом из отдельных кирпичей, камней Knauf и пластинок-солидов иммитирующих раствор. Все кирпичи, 2/3, половинки, четвертушки и все виды камней - блоки. Лежат в 0-ом слое. солиды раствора лежат в слое "Раствор кладочный". С начала (после первых 5-ти рядов) модель стала очень тяжелой. Объединил ряды в блоки и модель стала легче, но по окончании 1-го этажа все равно стала грузить мою нервную систему. Demontage написал макрос всего из трех кнопок "Включить все", "Оставить выделенное" и "Выключить выделенное". Все, что захочешь можно выключить не зависимо, в каком слое оно лежит. Дело стало просто кайф! Сохраняется модель с установками на выкл. и загружается тоже с выключенными элементами. Просто мгновенно! Когда включаешь все, долго рисует, но рисует исправно, без выбросов "фатала егора". Только начинаешь крутить, или работать с полностью включенными элементами - все! Рушится!. Хочу макрос переделать на включение и выключение по областям. Точка и радиус области, только не шар, а куб. Все, что в область попадает может быть выключено, или включено, а также вокруг области тоже самое. Чтобы областей было несколько, вообще, чтобы создавались по желанию сколько хочешь. А вот подсчет элементов можно делать и не включая их. От дома или этажа один только контур, а установив в нем область подсчитает все, что в ней. Зачем спрашивается их включать?.
Файл огромный, элементов в нем уйма, а работать с ним можно на любой, даже самой "недоукомплектованной" машине. Только меньше элементов надо включать. Я думаю, что даже подгрузку элементов при "включить все" надо делать лотами с диалогом типа "еще грузить?". Вот делаешь теплопункт и возишся с обвязкой теплообменника, зачем тебе все остальное в памяти, да и обзор закрывает. Чудесный одним словом макрос получился.
Сообщение отредактировал Supermax - 17.9.2007, 19:59
|
|
|
|
|
17.9.2007, 17:23
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ххе, еще раз смотрим на пост #241. Кстати, интересно было бы посмотреть на этот макрос - насколько оно совпадает с моим кодом  .
|
|
|
|
Гость_Supermax_*
|
17.9.2007, 19:38
|
Guest Forum

|
На VBA и с панелью кнопок. Скоро выложу. Я чесно говоря, на эту строчку и внимание-то не обратил. А зря, зря! Кнопки приделать к твоему макросу можно прямо кадовские, без напрягов с писанием панели. Сейчас протестирую. Все, протестировал. И Дима Demontage, тобишь, и ты на одни и теже грабли наступили. Во, оказывается болезнь-то заразная, как бы не подхватить.. Когда выделяешь объекты и командуешь "скрыть выделенное" они скрываются, НО! не дезактивируются! если после этого выделить какой-нибудь объект из оставшихся и его передвинуть, или еще хуже того - грохнуть, то и те, что скрылись, но не дезактивировались тоже сместятся или канут в небытие. Включаешь "включить все" а их и нетути! Я пол модели так грохнул, слава богу кад не выключал и назад откатил (2 часа упорного труда по восстановлению). В конец надо эскейп вставить, а то люди могут пострадать!
Свй макрос я удалил, поскольку он хуже Kpblc-овского.
Сообщение отредактировал Supermax - 18.9.2007, 19:57
|
|
|
|
|
18.9.2007, 11:11
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Работает только для пространства модели (то есть набор должен формироваться в пространстве модели). Код (defun kpblc-objects-hide (bit / *error* _kpblc-error-catch _kpblc-layer-status-restore _kpblc-layer-status-save selset selset_all msg item ) ;| * Скрытие выбранных объектов / невыбранных объектов / показ всех объектов. * Сделано в качестве попытки создания аналога ADT-шной команды Isolate objects. * Работает только в активном пространстве. * Параметры вызова: * bit что делать. 0 — показать все; 1 — скрыть выделенные; 2 — скрыть * все, кроме выделенных * Примеры вызова: (kpblc-objects-hide 0); Показать все объекты (kpblc-objects-hide 1); Скрыть выделенные объекты (kpblc-objects-hide 2); Скрыть все, кроме выделенных |;
(defun *error* (msg) (_kpblc-layer-status-restore) (vla-endundomark *kpblc-activedoc*) (princ msg) (princ) );_ end of defun
(defun _kpblc-error-catch (protected-function on-error-function / catch_error_result ) ;| *** Функция взята из книжной версии ruCAD'a без каких бы то ни было переделок, *** кроме переименования. * Оболочка отлова ошибок. * Параметры вызова: * protected-function - "защищаемая" функция * on-error-function - функция, выполняемая в случае ошибки |; (setq catch_error_result (vl-catch-all-apply protected-function)) (if (and (vl-catch-all-error-p catch_error_result) on-error-function );_ end of and (apply on-error-function (list (vl-catch-all-error-message catch_error_result)) );_ end of apply catch_error_result );_ end of if );_ end of defun
(defun _kpblc-layer-status-restore (/ item) ;| * Восстановление состояния слоев из глобального списка * *kpblc-list-layer-status* * Параметры вызова: * нет * Примеры вызова: (_kpblc-layer-status-restore) |; (if *kpblc-list-layer-status* (progn (foreach item *kpblc-list-layer-status* (_kpblc-error-catch '(lambda () (vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item)))) );_ end of LAMBDA nil );_ end of _kpblc-error-catch (_kpblc-error-catch '(lambda () (vla-put-lock (car item) (cdr (assoc "lock" (cdr item)))) );_ end of LAMBDA nil );_ end of _kpblc-error-catch );_ end of foreach );_ end of progn );_ end of if (setq *kpblc-list-layer-status* nil) );_ end of defun
(defun _kpblc-layer-status-save (layers-on / item) ;| * Разблокировка и разморозка всех слоев активного документа. Состояние * сохраняется в глобальном списке *kpblc-list-layer-status* вида * '(vla-указатель ("freeze" . :vlax-true) ("lock" . :vlax-false)) * Параметры вызова: * layers-on включать слои (t) или нет (nil) * Примеры вызова: (_kpblc-layer-status-save t) |; (vlax-for item (vla-get-layers *kpblc-activedoc*) (setq *kpblc-list-layer-status* (append *kpblc-list-layer-status* (list (list item (cons "freeze" (vla-get-freeze item)) (cons "lock" (vla-get-lock item)) );_ end of list );_ end of list );_ end of append );_ end of setq (if layers-on (progn (_kpblc-error-catch '(lambda () (vla-put-freeze item :vlax-false) );_ end of LAMBDA nil );_ end of _kpblc-error-catch (vla-put-lock item :vlax-false) );_ end of progn );_ end of if );_ end of vlax-for );_ end of defun
(vl-load-com) (or *kpblc-activedoc* (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))) );_ end of if (vla-startundomark *kpblc-activedoc*) (_kpblc-layer-status-save t) (cond ((= bit 1) (setq msg "Скрыть выделенные объекты")) ((= bit 2) (setq msg "Скрыть кроме выделенных")) );_ end of cond (if (= bit 0) (progn (foreach item (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "_A")))) );_ end of mapcar (vla-put-visible item :vlax-true) );_ end of foreach );_ end of progn (progn (setq selset (ssget "_I")) (while (not selset) (prompt msg) (setq selset (ssget)) );_ end of while (cond ((= bit 1); Скрывать выделенные (foreach item (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))) );_ end of mapcar (vla-put-visible item :vlax-false) );_ end of while ) ((= bit 2); Скрывать кроме выделенных (setq selset_all (ssget "_A")) (while (and selset_all (> (sslength selset_all) 0)) (setq item (ssname selset_all 0)) (ssdel item selset_all) (if (not (ssmemb item selset)) (vla-put-visible (vlax-ename->vla-object item) :vlax-false) );_ end of if );_ end of while ) );_ end of cond );_ end of progn );_ end of if (sssetfirst nil nil) (_kpblc-layer-status-restore) (vla-endundomark *kpblc-activedoc*) (princ) );_ end of defun
(defun c:hideobj (/ answer) (vl-load-com) (if (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (initget "Показать Выделенные Кроме Show SElected Exculde _ 0 1 2 0 1 2" );_ end of initget (setq answer (getkword "\nЧто делаем [Показать все/скрывать Выделенные/скрывать Кроме выделенных] <Отмена> : " );_ end of GETKWORD );_ end of setq );_ end of lambda );_ end of vl-catch-all-apply );_ end of vl-catch-all-error-p );_ end of not (kpblc-objects-hide (atoi answer)) );_ end of if );_ end of defun P.S. Код из #253 снес P.P.S. Загружать все, вызов с ком.строки - hideobj.
Сообщение отредактировал kpblc - 19.9.2007, 15:19
|
|
|
|
Гость_Supermax_*
|
18.9.2007, 18:24
|
Guest Forum

|
С замком стало все в порядке, вот разморозка не хочет размораживаться, да и у меня при замораживании объекты с экрана исчезают. Вообще-то я этим "холодильником" не пользуюсь может чего-то не так делаю? Ты можешь мне объяснить зачем нужен этот "Freeze"?
Предлагаю ничего не менять, а просто хелпик в макросе подтереть. Оставить только включение и выключение. И так нормально аж до визгу.
Если ты не против, то давай снесем все наши посты после твоего макроса, а то он уже рабочий, а базар после него будто он кривой.
Сообщение отредактировал Supermax - 18.9.2007, 20:01
|
|
|
|
|
18.9.2007, 20:46
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну я ж не автодеск... Глобальным Freeze я пользуюсь если надо и объекты скрыть, и защитить их от удаления (простое выключение слоя от ctrl+a не спасает). А вот внутри видовых экранов - очень полезная штука.
|
|
|
|
Гость_Supermax_*
|
19.9.2007, 14:52
|
Guest Forum

|
Kpblc, как тебе краники и прочие детали? Ты говорил, что живешь на DWG.RU. Это я только 20-30 меговые папки кидаю, а у меня еще и 300 меговые есть, да и новый диск ожидаю на днях. Очень плохо, что там только солиды, да и многие из отдельных солидов состоят (шпильки, гайки и т.п.) все не раскрашенное и без опознавательных данных. Такого понатыкаешь в монтажку, до-о-олго голову будешь ломать над тем ху-из-ху.
Консолидация мозгов и трудовых резервов в интернете не идет пока накак. Говоришь людям: "давайте все вместе, каждый по штучке" а они молчат, попрятались и ждут, когда найдуться человек 100 дураков, все сделают и им дадут на халяву. Наши производители - вообще отдельная песня. Сайты у них - без слез смотреть нельзя. Видно, что напрягаются, да только от напряжения свои извилины выпрямляют. Предложил серию ППУ труб забацать дин. блоками. Научить готов, хочу взамен 4 штуки таких, каких у меня нет. Наверное много хочу. Самое интересное, что у меня на всю серию графика готова. Осталось взять существующий блок и отредактировать. Нет, и этого оказывается много за знания. Пишут крики о помощи найти литературу по дин. блокам, а принять мое предложение слабо. ХАЛЯВЩИКИ! Как я их всех ненавижу!
|
|
|
|
|
19.9.2007, 15:14
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
ты про download тамошний? Я его не отслеживаю - и без того негрустно (хочешь, посмотри, к примеру, задачку http://dwg.ru/forum/viewtopic.php?p=174368 - у меня что-то логика зашкалила. Насчет "кто есть ху" - попробуй использовать группы, может, они тож помогут. Добавлено: Посты почистил по обсуждению кода
Сообщение отредактировал kpblc - 19.9.2007, 15:18
|
|
|
|
|
19.9.2007, 23:41
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Поробую вернуться к теме создания спецификации. Мной было замечено и случайно установлено, что В ОС Vista, если компьютор перезагружен, и после перезагрузки Excel ниразу не запускался, то при выполнении кода Код (setq excelobj (vlax-create-object "Excel.Application")) excelobj получается только если выполнить код 2-3 раза. Первый запуск будет nil 100%. тоже самое в VS2005 Код dim excelobj as object excelobj = createobject("Excel.Application", "") тут ошибка Err().Number = 429. при повторных запусках объект получается без проблем. Если же ексель запускался обычным образом, то объект формируется с первого раза Если в бейсике можно проигнорировать ошибку без проблем, добавив: Код on error resume next и до end sub все ошибки будут проигнорированы. То в лиспе вот так вот просто это сделать не получится. Есть над чем голову поломать.
|
|
|
|
|
20.9.2007, 0:21
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
В лиспе есть специальная функция (vlax-get-or-create-object), ею и пользуйся. Ведь и в VB приходится делать аналог: Код ' VB 6.0, VBA Sub Main() Dim objExcel As Object On Error Resume Next Set objExcel = GetObject("Excel.Application", "") If Err.Number <> 0 Then Err.Clear On Error GoTo 0 Set objExcel = CreateObject("Excel.Application") End If ' Ну и тут пошли операции с ним End Sub Код ' VB.NET 2002Public Function MyFunc() Dim objExcel As Object Try objExcel = GetObject(, "Excel.Application") Catch objExcel = CreateObject("Excel.Application")) End Try ' Ну и так далее End Function В .NET я не работаю (не довелось  ), так что там могут быть проблемы.
|
|
|
|
|
20.9.2007, 17:22
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Ты так ничего и не понял. GETobject, не даст объекта, даже с сотого запуска, если ексель в данный момент не запущен. CREATEobject дает объект даже если приложение НЕ запущено, если приложение запущено, то она запустит его в отдельном процессе. Это делаеца одинаково что в VS что в LISP. Тут ситуация другая: в ос Windows Vista нужна функция create-or-create-object если я ВКЛЮЧИЛ компьютор, и сразу запустил программу взаимодействующую с екселем, НЕ запуская ексель обычными способами, то функция CREATEobject не даст объекта, с первого раза. пару раз замечалось, что объект получается только с третьего раза. если я ВКЛЮЧИЛ компьютор, и запустил Ексель из меню пуск, а потом закрыл его. Или пользовался программами которые используют объектную модель екселя то CREATEobject сработает сразу. Тоесть получается вывод, если в процессе работы компьютора, с момента его включения, к екселю не было обращений, то функция CREATEobject возвратит объект только если ее запустить не менее 3х раз, причем это самое количество раз окончательно не установлено. Если в автокаде выполнить 1раз (vlax-create-object), то возвратится nil, а потом в VS CREATEobject, то объект получается. Тоже самое наоборот VS CREATEobject = ошибка -> (vlax-create-object)=vlaobject, тоже самое c (vlax-get-or-create-object) -- превый раз пролетаем. Моя программа не связана с автокадом, автокад я пробовал для сравнения и результат одинаковый. мне без разницы запущен ексель или нет, экспорт выполняется в один клик и при каждом клике запускается ексель с новой книгой и уже заполненой таблицей и моя программа на этом прекращает взаимодействие с екселем, сохранение и редактирование полученного документа отдаются на растерзание пользователю средствами самого екселя. для того чтобы дотучаться до объекта, пришлось сделать вот так: Код Dim eobj As Object On Error Resume Next Err().Clear() eobj = CreateObject("Excel.Application", "") MsgBox(eobj) 'если объект найден этого сообщения не будет, если не найден будет сообщение без текста
If Err().Number = 429 Then Err().Clear() eobj = CreateObject("Excel.Application", "") MsgBox(eobj) End If
If Err().Number = 429 Then Err().Clear() eobj = CreateObject("Excel.Application", "") MsgBox(eobj) End If
If Err().Number = 429 Then Err().Clear() MsgBox("Excel not found") End If Не знаю, есть ли такая проблема в XP, у меня Vista. также не установлено проблема это только с объектами офиса, или такая бодяга и с другими приложениями. У Vistы есть еще одна проблема, ЗАКРЕПЛЕННЫЕ в меню пуск ярлыки AutoCAD2008EN, Excel Word (2003), не работают вообще. А которые в ПУСК->Программы и перетащенные на рабочий стол работают. Вобщем я хочу поднять вопрос о совместимости. Если так прикинуть, то в старых программах есть средства обработки событий связанных с отсутствием чего либо и особо страшного ничего не произойдет. но вот конкретно в моей ситуации это самое "чего либо" присутствует и зарегистрировано, но при первом запуске раньше всегда получалось NOT FOUND, а потом работает нормально. Мелочь но НЕприято  . И если моя теперяшняя программа запрашивает объект три раза, и это не гарантирует положительного результата, то при использовании старой прораммы в новой ОС нас может ждать полный Not Found.
|
|
|
|
|
20.9.2007, 19:52
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну извини, я Vista не ставил - машина не потянет, да и многие вещи (в том числе и по работе) приходится делать с расчетом на Win2k, максимум на ХР. Скорее всего, у тебя в офисе не установлена поддержка .NET-программирования (это только мои подозрения, не больше). И, как следствие, у тебя идет попытка найти офисные приложения через старые API-функции и не находит. А то, что после запуска обнаруживается - ну бог его знает, по каким причинам. ЯТД, проблема в ОС. --- Добавлено: хотя на фига открывать Excel, я не очень понимаю. Учитывая тенденции некоторых контор переходить на OpenOffice, решение теряет смысл. Файл можно и так записать - хоть как xls (обычный текстовый файл, с разделением \t), хоть как xml, проанализировав тот вариант, который сделает Excel. Работка муторная, но иногда необходимая.
Сообщение отредактировал kpblc - 20.9.2007, 20:11
|
|
|
|
|
20.9.2007, 20:26
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Ну не везде так плохо. На завод врядли пустят представителей Microsoft, для проверки компов. Всетаки частная собственность, объект повышенной опасности итп, служба охраны круче ФСБ....
|
|
|
|
Гость_Supermax_*
|
21.9.2007, 10:29
|
Guest Forum

|
Kpblc, с темы в DWG.RU про маркировку я ушел. Не та тусовка. Лично тебе скажу, Свойство длинны дублировать атрибутом DLINA - глупо. Надо читать свойство (тут у нас в теме это описано), округлять значение и прописывать полученное значение этому же свойству. Элементы слегка дернуться и станут видны нахлесты, или недостача. Все *Unnn тоже подравняются и будут готовы к использованию (если то потребуется). Проставлять на плане вместо номера элемента номер позиции в спецификации, что окрестили как маркировка (хотя маркировка это присвоение марки изделию) - продукт деградации нашего проектного дела. Я не могу так маркировать элементы только по тому, что мне приходится составлять тех. карты в которых я должен описать последовательность установки изделий, даже если они все одинаковые. Вот пронумеровать их так, чтобы одна длина была описана номерами без пропусков 1, 2, 3, ....10, 11 а следующая длина была 12, 13, 14, .... 21, 22 и т.д. дело стоящее. Тогда в спецификации пишется все замечательно Длина 1 эл.ты №1-11. Длина 2 Эл.ты 12-22. Собрать все имена блоков, подравнять длины, сгруппировать, ну и посчитать заодно и промаркировать. Так, что-то мы забежали очень далеко в перед. Но концепция примерно такая.
Добавил: VVA я сюда завернул, может и пригодится.
Сообщение отредактировал Supermax - 21.9.2007, 11:02
|
|
|
|
|
21.9.2007, 13:58
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Я не в силах спорить (температурю со страшной силой), хочу только одно сказать - твой подход может оказаться неприменим в некоторых областях. Например, при проектировании навесных фасадов одинаковые элементы маркируются (им проставляются позиции) одинаково. Может, еще и в ЖБ аналогично - не помню. Я ж не зря в самом начале говорил, что надо определяться с тем, какие критерии важны. Потому что если этого не сделать, то получается нечто типа того чудовища, что я выкладывал.
|
|
|
|
Гость_Supermax_*
|
21.9.2007, 15:03
|
Guest Forum

|
Твое возражение принимаю, но замечу, что голыми цыфрами это делать нельзя. Вот чел. стойки на чертеже указал и спецификацию что, только на стойки выпустил? Интересная спецификация однако... Ладно, на том же листе табличку вставил, а проект что из одного листа состоит? В конце общую спецификацию что Бобринский делать будет? Или при заказе материалов снабженцу все чертежи перелопачивать прийдется? Чтобы на эту тему больше не болела голова, предлагаю выделить место в атрибутах и для позиции, и для номера элемента. Так будет на все случаи жизни. К стати надо не в программу вводить буквы, а читать значение в этом атрибуте и соединять с ним цифру из проги. Атрибут в блоке лежит скажем со значением "Стойка-" Чел. копирует этот блок туда, сюда, а прога все просчитав прибавляет к Стойка- цыфру 5 (к примеру) Получается Стойка-5. Так какие хочешь обозначения писать можно. И вот тогда, меняя имя блока можно нумеровать в пределах одной группы. Для длинномеров это не подойдет. Одна группа - труба ППУ ДУ-57, другая группа - Труба ППУ ДУ-159, позиции в спецификации не просто разные, в каждой группе еще и длины разные, а это значит, что в следующей группе первым номером должен стоять следующий после последнего в предидущей группе. На чертеже не укажешь в кружочке "Труба ППУ ДУ-57-номер позиции". Если оставить одни цифры например: 159-22 где 159 это Труба ППУ ДУ-159, а 22 это номер позиции, то 159-22 рядом с элементом никто с набегу понять не сможет. Тем более, что 159 может быть безусловная отметка поверхности земли и вся геоподоснова может ими быть испещрена.
Надо использовать Tolerance.
Так в принципе что-то вырисовывается, Берем и выравниваем длины всем блокам, какие нужно подравнять. Затем, выбираем все, которые надо нумеровать и позиционировать, в смысле присваивать номер позиции. Берем первое имя, анализируем массив, позиционируем и нумеруем, записываем последние значения позиции и номера, берем следующее имя и т.д.
Сообщение отредактировал Supermax - 21.9.2007, 15:11
|
|
|
|
Гость_Supermax_*
|
22.9.2007, 12:17
|
Guest Forum

|
Kpblc, как здоровье? Ты что подхватил? Тебе болеть нельзя! Ты Родине нужен! Павлов когда умирал, он заставил своих учеников стоять над ним и записывать то, что он им говорит. А он им говорил, то что с ним в данный момент происходило. Они плакали, но писали. Не помню, на чем закончилась эта экзекуция, но про то, что ноги у него перестали чувствоваться он им сообщить успел. Kpblc, можно ли программно переименовать один конкретный блок? Вот их у меня штук сто, а мне надо один изменить, тобишь создать новый с таким же именем и местоположением и заменить им старый. Понятно, что если задавать уже имеещееся имя, прога должна ругаться, но в принципе, ты с такой задачей когда-нибудь сталкивался?
|
|
|
|
|
22.9.2007, 12:24
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
если не поможет vla-put-name или еще какойнибудь vla-put*, то остается только вычистить его из документа и вставить новый з новым именем.
|
|
|
|
Гость_Supermax_*
|
22.9.2007, 12:35
|
Guest Forum

|
Ты представляешь, что такое "вставить"? В нем сотни две элементов поставленные на элементы предидущего блока, который потом выключается, а эти элементы объединяются в новый блок, потом он копируется и вот доходит до такого места, где он уже чуть-чуть не катит. Если бы его переименовать как-то, я бы его редактором открыл и детальку подвинул, а так, надо все кроме него выключать, взрывать, потом все включать, а это ого-го сколько включется. Мне столько включать не надо, потому, что может слететь. Даже если я все включу, потом выключать опять прийдется. Не, надо ничего трогать. Надо поменять блоку имя. Но как?
Ну мне понятно, что такое описание блока и описание его вхождения. Надо к существующим описаниям добавить новое, скопированное со старых и в описании вхождения старого блока стереть вхождение о котором мы говорим.
Сообщение отредактировал Supermax - 22.9.2007, 12:32
|
|
|
|
|
22.9.2007, 12:42
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Вот все работает и не надо ничего чистить. Код (vl-load-com) (setq blockref (vlax-ename->vla-object (car(entsel "\nSelect Block"))))
(setq bloks (vla-get-blocks (vla-get-activedocument(vlax-get-acad-object))))
(setq block (vla-item bloks (vla-get-name blockref)))
(vla-put-name block "MyName") соответственно переименовываются и все вставленные в модель и листы
|
|
|
|
Гость_Supermax_*
|
22.9.2007, 13:05
|
Guest Forum

|
Не-е брателло, так не пойдет. Так он всем вхождениям меняет имя, так я и через rename сделаю. Мне надо конкретное 100-ое вхождение старого блока сделать первым вхождением нового. Говорю же надо описание блока копировать.
|
|
|
|
Гость_Supermax_*
|
22.9.2007, 13:52
|
Guest Forum

|
Mmax, ты не представляешь как я это решил! Я скопировал в буфер блок, открыл новый файл, вставил туда блок с оригинальными параметрами точки вставки (последняя строчка), переименовал блок, опять скопировал в буфер, вернулся в старый файл, там грохнул существующий и вставил из буфера (опять с оригинальными точками) новый. Вуаля!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqvWgxEU
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqvybpdW
Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx
Последние сообщения Форума
|