Реклама / ООО «ИЗОЛПРОЕКТ» / ИНН: 7725566484 | ERID: 2Vtzqx6kV7S
IPB IPB
Проектирование, монтаж, наладка, сервис


Здравствуйте, гость ( Вход | Регистрация )

- Стандарт НП «АВОК» 7.11-2024
«Рекомендации по проектированию инженерных систем
дошкольных образовательных организаций»

АВОК в соц. сетях
ИНН: 7714824045 | erid: 2VtzqwzKQiU
> Создание спецификации автоматически (Дубль2), Рассматриваются технология и ее реализация по автоматическому создани
Гость_Supermax_*
сообщение 14.3.2007, 12:19
Сообщение #1





Guest Forum






Внимание! Все сообщения в данной теме должны строго соответствовать предмету обсуждения.
Вопросы справочного харрактера, не влияющие на ход рассуждений по данной проблеме и ответы на такие вопросы, существуют только на последней странице! Сообщения эмоционального харрактера, разговорного обмена репликами, и т.п, также существуют только на последней странице.



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


И так. На данный момент мною создается программный продукт (макрос к программе AutoCAD), позволяющий при определенных условиях, обрабатывать чертежи, или модели в DWG формате с последующим автоматическим созданием листов спецификаций и заполнением листа ресурсов программы Microsoft Project.

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

Предшествующая версия макроса, позволяющая производить подсчет блоков по их имени, а также подсчет общего колличества длин, площадей и объемов с переводом в метры, метры2 и метры3 представлена ниже. Результаты данного подсчета транслируются автоматически в Word или Excel.

Размер файла 151 КБ

Сообщение отредактировал Supermax - 2.7.2007, 11:07
Прикрепленные файлы
Прикрепленный файл  Prop.rar ( 38,86 килобайт ) Кол-во скачиваний: 1128
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
20 страниц V  « < 3 4 5 6 7 > »   
Открыть тему
Ответов (120 - 149)
kpblc
сообщение 26.6.2007, 14:48
Сообщение #121


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Ты не увидел главного:
Цитата
По-моему, вы идете не с той стороны.

Ладно, аллах с ним. Допустим (подчеркиваю - допустим!) ты получил все хендлы всех примитивов (и не только их - еще захватишь и словари, и стили, и прочую неграфическую информацию) своей функцией. Дальше что будешь делать? Ты, извиняюсь, едешь в из Питера Москву через Баку, захватывая Магадан и Калининград.
Для справки: получить указатели на все примитивы файла, включая подпримитивы блоков и внешних ссылок:
Код
(defun _kpblc-get-all-entitites-with-sub (/ res)
  (vl-load-com)
  (vlax-for blk_def
            (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
    (setq res (cons blk_def res))
    (vlax-for subent blk_def
      (setq res (cons subent res))
      );_ end of vlax-for
    );_ end of vlax-for
  res
  );_ end of defun

Ради интересу проверни на одном и том же файле свою функцию и мою. Разницу по спискам вычисли уж сам и покажи, какого типа у тебя объекты там остались. Я думаю, останется то, что особо-то не требуется. Я сознательно исключил из своей обработки текстовые, размерные стили, слои, наборы и т.п.
---
Добавлено: пока колошматил ответ, Supermax меня ухитрился опередить smile.gif
Цитата
Kpblc, это ты ко мне во множественном числе?

Там был еще пост от Litvinov'a, я к обоим и обращался wink.gif
Цитата
А мне интересен принцип определения номера метки. Там сплошные пробелы, как сито, но постоянно одни и теже начальные условия записи. Вот и анализирую. Щас списочек составлю, закономерность вычислю и обнародую.

Я когда разговаривал с Эдуардом (известен под никами Эдуард и Эдуард Смолянка), он мне сказал, что закон формирования хендлов достаточно сложная штука. Например, при описании блока на него (то бишь описание) количество и закономерность распределения хендлов закону поддается, но, как бы это сказать... В общем, своему закону. Простому смертному его не понять.
---
Добавлено 2:
Если честно, то DXF нужен в нескольких строго определенных случаях - например, работать с ENDBLOCK. А получать доступ в ENDBLOCK надо только если приходится модифицировать там 8 группу. Этот баг требовалось фиксить руками только в 2002 версии, начиная с 2005 он уже на уровне ядра решен, насколько я знаю (по крайней мере при работе по созданию блоков через vla вопросов не возникало). Если же DXF 8 в ENDBLOCK не "0", то это вина того программера, который так писал софт создания блоков.

Сообщение отредактировал kpblc - 26.6.2007, 16:41
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 26.6.2007, 16:49
Сообщение #122





Guest Forum






Ну наконец-то! А тоя уже грешил, думал не хорошее. Щас подломаю чуть-чуть, и в дело воткну. Результаты варварского отношения к чужим функциям показывать?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 26.6.2007, 18:21
Сообщение #123





Guest Forum






Спасибо тебе kpblc, огромное, но не катит. Да, и не все блоки и внешние ссылки выбрало, да и не из того источника. Мне имена вхождений нужны, а не базовые свойства. В частности в список почему-то не попала самая верхняя ссылка. Та, которую можно пошевелить мышкой на экране. Может плохо смотрел? Но я фильтровал список ...? Щас еще покапаюсь.
Так, нашлась в ModelSpace.
Еще прикол: (entget (nth 0 (nth 0 (reverse (setq rezultat (nentsel "Укажи блок:")))))) метки, полученные вот так, к прмеру (5 . “10094”) не работают ни так (vla-HandleToObject (vla-get-ActiveDocument (vlax-get-acad-object)) "10094")
ни так (handent "10094"). DXF код 5 видим, а от куда он такой не понятно.

Сообщение отредактировал Supermax - 26.6.2007, 20:40
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 26.6.2007, 21:50
Сообщение #124


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Цитата
Да, и не все блоки и внешние ссылки выбрало, да и не из того источника

Мой код проходит целиком по файлу, ему на все плевать. Специально сделал излишнюю информативность, как ты любишь.
Цитата
Мне имена вхождений нужны, а не базовые свойства.

А я тебе что предоставляю :?: Именно указатели на примитивы, а что ты там с ними делаешь - это уже твоя епархия.
Цитата
В частности в список почему-то не попала самая верхняя ссылка. Та, которую можно пошевелить мышкой на экране. Может плохо смотрел?
Скорее всего, поскольку она там быть должна. Вводи фильтрацию результата, удаляй "не внешние ссылки" и теде. Чего отказался от очевидного пути - я не понимаю.
Цитата
Так, нашлась в ModelSpace.

Ессно, а где ж ей еще быть-то?
Цитата
DXF код 5 видим, а от куда он такой не понятно.

Потому что этот DXF на самом деле принадлежит пространству ссылки, а не текущего документа. vla-handletoobject и handent работают с пространством хендлов только текущего документа, насколько я знаю. Хендлы могут быть незаменимы в других случаях, и, к сожалению (счастью?) подсчет примитивов для спецификации точно в эти случаи не входит.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 9:56
Сообщение #125





Guest Forum






Ну ладно, будем подходить к вопросу с формальной стороны.
Между этим выражением (твой лисп):
Код
(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))

и этим (моя ну, скажем временная переделка):
Код
(vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object)))

есть разница и утверждать, что твой лисп дает все элементы - наглая ... неточность.
Элементы "верхних" ссылок лежат именно в ней. А в коллекции "blocks" их нет и не может быть. Как не попадут туда и другие элементы, лежащие прямо в модели.
Элементы коллекции "Layouts" можно найти только в этой коллекции. И вообще коллекций не 3 и не 4, а больше. В каждй лежат принадлежащие ей объекты.
Ну, это, сам понимаешь, не для тебя. Ты любишь публику развлекать и натаскивать, так я тебе подигрываю.

То, что эта метка не от объекта (потому и не работают с ней функции, которые по метке находят указатели на объект) я понял еще вчера по дороге домой. Лежат они в словаре "ACAD_XDICTIONARY" в коде 360 на него дан указатель. Щас я его буду потрошить.
И добавлю, поэтому и не меняются от одного открытия файла к другому. Вот только что открыл, а метка попрежнему "10094".

Сообщение отредактировал Supermax - 27.6.2007, 10:21
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 10:05
Сообщение #126





Guest Forum






К стати, чтобы пройти по ModelSpace, вторую половину твоего лиспа надо заблокировать. Погружаться в подпримитивы в этой коллекции немоги.
Хочу еще немного добавить. Знаешь, включение ручек у элементов, скажем, чтобы не путаться с коллекциями, чертежа - вещь сама по себе очень нужная, и не только для специфицирования. Даже если с этими элементами вручную ничего сделать нельзя, свойства им менять можно. Проверено. _refedit полезна еще и тем, что по желанию пользователя может не сохранять внесенные изменения в ссылку, а может и сохранить. Например вентиляционщики прорубили в стене, которую наваял архитектор, дыру, и эта дыра должна попасть на чертежи всех остальных групп проектировщиков. Ссылка должна подгружаться не с компа архитектора, а с сервера. Вдруг архитектор заболеет и не выйдет на работу? Кто его комп без него включет? Все сразу увидят реакцию.
Так, что битва продолжается. Даещь включенные ручки!

Сообщение отредактировал Supermax - 27.6.2007, 10:32
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 27.6.2007, 10:35
Сообщение #127


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Гидрит твою перекись...
Запускай лисп:
Код
(defun test (/ line_model line_paper)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    );_ end of vla-StartUndoMark
  (setq line_model
                   (vla-addline
                     (vla-get-modelspace adoc)
                     (vlax-3d-point '(0. 0. 0.))
                     (vlax-3d-point '(100. 100. 100.))
                     );_ end of vla-addline
        line_paper (vla-addline
                     (vla-get-paperspace adoc)
                     (vlax-3d-point '(0. 0. 0.))
                     (vlax-3d-point '(100. 0. 0.))
                     );_ end of vla-addline
        );_ end of setq
  (vla-endundomark adoc)
  (princ)
  );_ end of defun

Теперь пройдись по файлу твоим и моим лиспом.
Твой вариант (как я предполагаю):
Код
(defun try01 (/ res)
  (vlax-for ent
            (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
    (setq res (cons ent res))
    );_ end of vlax-for
  res
  );_ end of defun

Вернет нечто типа
Код
_$ (try01)
(#<VLA-OBJECT IAcadLine 0ea3df14>)

Мой вариант:
Код
_$ (_kpblc-get-all-entitites-with-sub)
(#<VLA-OBJECT IAcadLine 0ea3ddd4> #<VLA-OBJECT IAcadPaperSpace3 0ea3deb4> #<VLA-OBJECT IAcadLine 0ea3df14> #<VLA-OBJECT IAcadModelSpace3 0e9c0fa4>)
Ты хотел излишней информативности? Ты ее получил. И теперь еще и недоволен.
Теперь в тот же файл вставляем в пространство модели внешней ссылкой source2.dwg, в котором в свою очередь внешней ссылкой вставлен source1.dwg.
Твой (все еще в моем предположении, ты ж код не показываешь):
Код
_$ (try01)
(#<VLA-OBJECT IAcadExternalReference2 0ea33164> #<VLA-OBJECT IAcadLine 0ea3df14>)

Мой: посмотришь сам. Для справки:
Код
_$ (LENGTH (try01))
2
_$ (LENGTH (_kpblc-get-all-entitites-with-sub))
4328

Файлы прилагаются.
---
Добавлено: Если внешнюю ссылку вставить в пространство листа, твой (предполжительно) вариант ее не учтет.

Сообщение отредактировал kpblc - 27.6.2007, 10:53
Прикрепленные файлы
Прикрепленный файл  abok___Standard.zip ( 264,93 килобайт ) Кол-во скачиваний: 89
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 27.6.2007, 10:42
Сообщение #128


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Цитата(Supermax @ 27.6.2007, 11:05) *
К стати, чтобы пройти по ModelSpace, вторую половину твоего лиспа надо заблокировать. Погружаться в подпримитивы в этой коллекции немоги.
Хочу еще немного добавить. Знаешь, включение ручек у элементов, скажем, чтобы не путаться с коллекциями, чертежа - вещь сама по себе очень нужная, и не только для специфицирования. Даже если с этими элементами вручную ничего сделать нельзя, свойства им менять можно. Проверено. _refedit полезна еще и тем, что по желанию пользователя может не сохранять внесенные изменения в ссылку, а может и сохранить. Например вентиляционщики прорубили в стене, которую наваял архитектор, дыру, и эта дыра должна попасть на чертежи всех остальных групп проектировщиков. Ссылка должна подгружаться не с компа архитектора, а с сервера. Вдруг архитектор заболеет и не выйдет на работу? Кто его комп без него включет? Все сразу увидят реакцию.
Так, что битва продолжается. Даещь включенные ручки!

Я тебе лиспом без влюченных ручек для любого примитива все что угодно (ну или почти все) сделаю. В том числе и цвет / тип линии / вес линии / слой поменяю. Дашь мне указатель на него - и пжалста. Ручки - инденрнах, как поет Rammstain.
Внешние ссылки подобным образом обновлять я не буду из принципа. Надо поменять - нехай пользователь входит в редактирование ссылки и по новой запускает команду / функцию. Но ответственность за это должен нести он, а не я.
---
Добавлено:
Если тебя устроит ручная регистрация dll, то могу попробовать собрать кусок для подсчета примитивов, включая внешние ссылки. Результат выводится в многострочный текст.

Сообщение отредактировал kpblc - 27.6.2007, 10:43
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 11:01
Сообщение #129





Guest Forum






Та, доволен я, доволен. А информативность тут совсем не причем. Ну нарисовал ты пару линий, одну в модели, другую в layout-е ну и что? Твой макрос правильный, выгребает элементы по всему файлу, но только пренадлежащие к конкретной коллекции, которую надо сменять вручную. Ну и что? Да не напрягайся ты, новый макрос на эту тему строчить. Надо искать источник информации "10094". Отвлекаемся.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 11:11
Сообщение #130





Guest Forum






Погоди малость. От твоего предложения (но только от его кусочка)
Цитата
могу попробовать собрать кусок для подсчета примитивов, включая внешние ссылки

я, упаси меня бог, не откажусь. И даже выводить никуда не надо. Так, сегмент общего целого. Только сейчас у меня охотничий азарт бушует и я не могу адекватно реагировать на происходящие события.
Как это так, я nentsel-ом могу ручку включить, а программно нет? Я не лох, чтобы на такие вещи не обращать внимания. Коль в этом угле все в паутине, значит сюда мало народу ходит, а значит может быть что-нибудь припрятано (детский инстинкт).
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 27.6.2007, 11:15
Сообщение #131


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Теперь часть дцатая.
Загружаешь лисп:
Код
(defun test2 (/ adoc blk pline vert pt)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    );_ end of vla-StartUndoMark
  (if (not (tblobjname "blocks" "myblock"))
    (progn
      (setq
        blk   (vla-add (vla-get-blocks adoc)
                       (vlax-3d-point '(0. 0. 0.))
                       "myblock"
                       );_ end of vla-add
        vert  '(-10. -10. -10. 10. 10. 10. 10. -10.)
        pline (vla-addlightweightpolyline
                blk
                (vlax-make-variant
                  (vlax-safearray-fill
                    (vlax-make-safearray
                      vlax-vbdouble
                      (cons 0
                            (1- (length vert))
                            );_ end of vlax-make-safearray
                      );_ end of vlax-make-safearray
                    vert
                    );_ end of vlax-safearray-fill
                  );_ end of vlax-make-variant
                );_ end of vla-addlightweightpolyline
        );_ end of setq
      (foreach prop (list '("color" . 0)
                          '("layer" . "0")
                          (cons "lineweight" aclnwtbyblock)
                          (cons "linetype" "byblock")
                          (cons "closed" :vlax-true)
                          (cons "normal" (vlax-3d-point '(0. 0. 1.)))
                          );_ end of list
        (vl-catch-all-apply
          '(lambda () (vlax-put-property pline (car prop) (cdr prop)))
          );_ end of VL-CATCH-ALL-APPLY
        );_ end of foreach
      );_ end of progn
    (setq blk (vla-item (vla-get-blocks adoc) "myblock"))
    );_ end of if
  (while
    (and (not (vl-catch-all-error-p
                (vl-catch-all-apply
                  '(lambda ()
                     (setq pt (getpoint "\nУкажи точку вставки <Отмена> : "))
                     );_ end of LAMBDA
                  );_ end of VL-CATCH-ALL-APPLY
                );_ end of VL-CATCH-ALL-ERROR-P
              );_ end of not
         pt
         );_ end of and
     (vla-insertblock
       (if (and (zerop (vla-get-activespace adoc))
                (= :vlax-false (vla-get-mspace adoc))
                );_ end of and
         (vla-get-paperspace adoc)
         (vla-get-modelspace adoc)
         );_ end of if
       (vlax-3d-point pt)
       "myblock"
       1.
       1.
       1.
       0.
       );_ end of vla-InsertBlock
     );_ end of while
  (vla-endundomark adoc)
  (princ)
  );_ end of defun

И выполняешь его на чистом файле сначала в модели, потом в листе1, потом в листе 2. В каждом пространстве раза по 2-3 будет достаточно. Сравни результаты своего и моего кодов. И наконец выложи свой вариант.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 11:29
Сообщение #132





Guest Forum






А, я понял, это ты пытаешся меня отвлечь и сбить с верного пути?
Прекрати строчить функции! У меня их ковырять не то состояние. Говорю же ясно - напал на след, ушел в нирвану, вернусь, как только наступит облом или полное просветление. Тебе разве не хочется уметь ручки включать? Ну и что, что ты можешь в базовых свойсвах хипиш навести? Лучше попробуй откорректированную вставку внешней ссылки прописать новым файлом и таким образом закрепить изменение в этой конкретной вставке. Загляни в свой ящик на этом форуме.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 27.6.2007, 12:13
Сообщение #133


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Цитата
А, я понял, это ты пытаешся меня отвлечь и сбить с верного пути?

Наоборот вообще-то...
Цитата
Прекрати строчить функции! У меня их ковырять не то состояние.
А я не прошу их "ковырять". Я прошу их запустить и показать результат.
Цитата
Тебе разве не хочется уметь ручки включать?

Не-а, не хочется. Зачем?
Цитата
Лучше попробуй откорректированную вставку внешней ссылки прописать новым файлом и таким образом закрепить изменение в этой конкретной вставке.

И не подумаю. О причинах см. выше.
Прочитать данные - да, запросто. Менять и сохранять? Нет. Я уж лучше тогда в пользовательские свойства файла или в словари полезу и в них буду ковыряться. И то не факт.
Ха! Кстати, один момент!
Смотри, пользователь №1 открывает файл с внешней ссылкой src.dwg. Пользователь №2 - Открывает просто файл src.dwg. №2 получает полный доступ к файлу и блокирует его. В это время пользователь №1 (по твоей логике) пытается чего-то там поменять и сохранить. Он получает ошибку, а ты - головняк. Я такое отследить точно не смогу. Да и не захочу smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 13:08
Сообщение #134





Guest Forum






Тогда я сейчас поднапрягусь и легко стану круче тебя.
По поводу конфликтов открытия - не все так пасмурно, как ты рисуешь. Пользователь подгрузил файл внешней ссылки, разве он его открыл? - нет. Кто-то открыл этот файл и курочит. В это время пользователь хочет сохранить свои данные, что происходит? - правильно комп отвечает, что документ уже открыт и занят другим приложением. Машине по барабану пользователи, она приложениями оперирует. Она может тебе открыть еще раз этот файл, или подгрузить как внешнюю ссылку, но только для чтения. Вообще, процесс подгрузки файла как ссылки - чистой воды его читание. Извини за коверканье русского языка. Изменить этот файл машина сможет только после того, как его освободят. Операционные системы эти перехлесты давным давно обрабатывают и не допускают сбоев. А в Лиспе куча функций для этого сделана. И проверка на занятость, и на доступ и т.п. Я вообще-то не из детского сада. Лет так 15 назад писал на Assembler-е и сам прошивал ПЗУ. Разрабатывал спецпроцессоры и имею два авторских свидетельства. Так что ЭТИ напряги и не напряги вовсе, а так, разминка затекших суставов головного мозга.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 13:26
Сообщение #135





Guest Forum






Да, ты был прав, помимо того, что ссылка из корня есть в ModelSpace, она есть и в Blocks.
Только вот незадача. Она #<VLA-OBJECT IAcadExternalReference2 05ed4354>) а проверка на вшивость,
Код
(= (vla-get-IsXRef blk_def) :vlax-true)

выдает, что не внешняя ссылка.

Код

(defun _kpblc-get-all-entitites-with-sub ( / )
(vl-load-com)
(setq res nil)
(vlax-for blk_def
(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if (and
(= (vlax-get-property blk_def 'ObjectName) "AcDbBlockReference")
;(= (vla-get-IsXRef blk_def) :vlax-true)
)
(setq res (cons blk_def res)))
(vlax-for subent blk_def
(if (and
(= (vlax-get-property subent 'ObjectName) "AcDbBlockReference")
;(= (vla-get-IsXref blk_def) :vlax-true)
) (setq res (cons subent res)))
);_ end of vlax-for
);_ end of vlax-for
;res
);_ end of defun


Как такое может быть?
Я специально забил эту проверку, чтобы проверить этот факт.

Сообщение отредактировал Supermax - 27.6.2007, 13:27
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 27.6.2007, 13:27
Сообщение #136


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Цитата
Тогда я сейчас поднапрягусь и легко стану круче тебя.

Да чтоб я спорил!
Цитата
В это время пользователь хочет сохранить свои данные, что происходит? - правильно комп отвечает, что документ уже открыт и занят другим приложением.

Ага. А функция-то твоя не сработала. Какие будут действия?
Флаг занятости файла лиспом просто так не прочитать, я уже проходил через это - надо использовать либо танцы с бубном, либо vl-расширение.
Цитата
Я вообще-то не из детского сада. Лет так 15 назад писал на Assembler-е и сам прошивал ПЗУ. Разрабатывал спецпроцессоры и имею два авторских свидетельства. Так что ЭТИ напряги и не напряги вовсе, а так, разминка затекших суставов головного мозга.

И?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 13:39
Сообщение #137





Guest Forum






Лисп файл не занимает. Файл занимает приложение, тобиш программа AutoCAD (в нашем случае). При чтении файла с винчестера, операционная система не разрешает его редактировать. Никогда. Прочесть файл можно, и записать прочитанное в свободную область памяти. Там эту запись куроч, как душе угодно. А когда прийдет черед записать (точнее заменить старую запись файла на новую) - если файл не открыт другим приложением, то пожалуйста. Если открыт, то в очередь. Архитектор вносит свои зменения, сохраняет их на сервере, ты их отправляешь сразу как только он закроет файл в корзину и вместо этого файла вставляешь старую версию, но со своими изменениями. Никаких конфликтов не вижу. Это примерно одно и тоже, что два пользователя на одном компьютере.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 13:54
Сообщение #138





Guest Forum






Успел, не успел, не знаю. Продолжу.
Даже такую, чисто административную задачу можно легко решить автоматически.
Любой файл имеет признаки, по которым можно определить, менялся он за прошедшее время или нет. Дата и время поледнего изменения, контрольная сумма и пр. При открытии файла с внешними ссылками, эти признаки надо слизать (если только они уже не слизаны и лежат где-нибудь в словаре) и при сохранении своих изменений с начала надо бы проверить, а не изменился ли файл. Если изменился, то вот тут и надо программно сделать следующее: Во первых надо как-то записать что прибавилось к этому документу, и что изьято. То, что прибавилось - прибавить, а то, что изьято (например, кусок стены) проверить на наличе и изъять. Если интересно продолжим, а если нет, то +.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 15:49
Сообщение #139





Guest Forum






Так, новые приколы.
Твой лисп с моим фильтром:
Код
(defun _kpblc-get-all-entitites-with-sub ( / )
(vl-load-com)
(setq res nil)
(vlax-for blk_def
(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if (and
(= (vlax-get-property blk_def 'ObjectName) "AcDbBlockReference")
(= (vla-get-Name blk_def) "2-е вложение")
)
(setq res (cons blk_def res)))
(vlax-for subent blk_def
(if (and
(= (vlax-get-property subent 'ObjectName) "AcDbBlockReference")
(= (vla-get-name subent) "2-е вложение")
) (setq res (cons subent res)))
);_ end of vlax-for
);_ end of vlax-for
res
);_ end of defun


Справка:
"2-е вложение" - это объект внешней ссылки, тот, который не хочет проходить проверку на принадлежность к ссылкам. Лежит прямо в корне модели и его можно "пошевелить" мышкой. "Корневой" короче.

Запускаем: (_KPBLC-GET-ALL-ENTITITES-WITH-SUB)
Получаем: (#<VLA-OBJECT IAcadExternalReference2 05ed4354>)

Ну она у меня всего одна, как и у тебя.

Запомнили.
Теперь получаем этот же объект через vla-Item
Код
(setq obj (vla-Item (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-get-Name (vlax-ename->vla-object (car (entsel))))))


Справка:
(vla-get-Name (vlax-ename->vla-object (car (entsel)))) - возвращает "2-е вложение"

А код возвращает:
#<VLA-OBJECT IAcadBlock3 061af734>
Сравниваем:
#<VLA-OBJECT IAcadExternalReference2 05ed4354>
и офигиваем.

Как из одного и того же источника, в частности (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
можно получить два разных объекта одного и того же?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 16:04
Сообщение #140





Guest Forum






Так, в коллекции Blocks два элемента с таким именем один AcDbBlockTableRecord, который и находит моя (а точнее Полищука) прибамбасина, а у тебя я с начала фильтрую на предмет AcDbBlockReference.
Разобрался, но не до конца. Почему Item нашла именно таблицу, а не блок?
А, разобрался, потому, что AcDbBlockReference не поддерживает метод Item.

Сообщение отредактировал Supermax - 27.6.2007, 16:06
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
mmax
сообщение 27.6.2007, 16:20
Сообщение #141





Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568



Цитата(Supermax @ 27.6.2007, 12:49) *
Теперь получаем этот же объект через vla-Item
Код
(setq obj (vla-Item (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-get-Name (vlax-ename->vla-object (car (entsel))))))


Справка:
(vla-get-Name (vlax-ename->vla-object (car (entsel)))) - возвращает "2-е вложение"

А код возвращает:
#<VLA-OBJECT IAcadBlock3 061af734>
Сравниваем:
#<VLA-OBJECT IAcadExternalReference2 05ed4354>
и офигиваем.

Как из одного и того же источника, в частности (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
можно получить два разных объекта одного и того же?

Этоже объэктная модель. MODEL(PAPER)SPACE и BLOKS это совершенно разные вещи потому и объекты разные.

Досихпор копаетесь в заднице, проктологи.
Сыылка есть другой документ и пользователь может спокойно его открыть и поковырять. Зчем же вам все через выхлопную трубу делать?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 27.6.2007, 17:19
Сообщение #142





Guest Forum






Ну, поживешь еще малость, геморрой заработаешь, так будешь проктологам кланяться и бабки платить, чтобы помогли значит.
Не делать всегда проще, чем делать. А когда сделано, обычно говорят "а, фигня, чего столько было шуметь?".
А объекты, внимательный ты наш, взяты из одного и того же источника. Через строчку читаете товарищи! Только их два, один - таблица, другой - внешняя ссылка. Один Item поддерживает (таблица), Другой - нет (ссылка). Вот и весь базар.
Ссылку можно открыть и отдельно, только вот все, как бы это сказать, окружающие эту ссылку в файле общей сборки модели детали видны не будут и корректировать, например делать в стене дыру, не видя воздуховод, будет мягко говоря - затруднительно. Создавать кучу моделей, где ссылками указаны другие работы кроме твоей, а у соседа своя модель, где уже ты ссылка, я думаю можно не продолжать? Комплексная модель - это один файл для всех. Как сборочный чертеж. Верхушка пирамиды так сказать. А вот редактировать внешнюю ссылку открыванием ее файла - и есть, через одно место.
Тут такая ситуация может (а скорее всего абязательно будет) возникнуть, что в этой модели, откорректировав ссылку, ее надо будет сохранять отдельным файлом и это уже будет не копия ссылки типового этажа, а типовой этаж с изменениями, необходимыми, скажем для оборудования теплопункта или венткамеры, или еще чего нибудь.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
mmax
сообщение 27.6.2007, 19:31
Сообщение #143





Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568



В объектной модели сидит такая шишка
есть объект BLOKS он является контейлером для объектов BLOCK. В BLOCK можно добавлять графические объекты(линии окружности итп) в BLOKS нельзя. при этом BLOCK это есть то самое что мы вставляем командой INSERT после чего в модели получается объект блокреференс. Тоесть BLOCK это еще есть неграфический примитив, если графическими считать только то что можно видеть на экране.

А уж Model(paper)space содержать такие примитивы как BLOKS и BLOCK просто не может в ней могут быть только референсы на объект BLOCK, тоесть только те которые мы видим на экране. Эитим и объясняется тот факт что вы ищете в семействах блоков референсы а находите таблицы, или описания.

Вот и вся мазута про объектную модель.

При этом добавлю еще что BLOKS и Model(paper)space являются объектами документца который в свою очередь является объектом аппликашиона.

А если вас заставляют работать по "нашему" и пользовать только ссылки стронних разработчиков, то всегда можно послать всех на. И работать по своему.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 27.6.2007, 21:57
Сообщение #144


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Только что добрался до железки, так что по пунктам и постам smile.gif
Цитата
Лисп файл не занимает. Файл занимает приложение, тобиш программа AutoCAD (в нашем случае). При чтении файла с винчестера, операционная система не разрешает его редактировать. Никогда. Прочесть файл можно, и записать прочитанное в свободную область памяти. Там эту запись куроч, как душе угодно. А когда прийдет черед записать (точнее заменить старую запись файла на новую) - если файл не открыт другим приложением, то пожалуйста. Если открыт, то в очередь. Архитектор вносит свои зменения, сохраняет их на сервере, ты их отправляешь сразу как только он закроет файл в корзину и вместо этого файла вставляешь старую версию, но со своими изменениями. Никаких конфликтов не вижу. Это примерно одно и тоже, что два пользователя на одном компьютере.

Я это знаю. Проблема в том, что для чтения файла (не текстового, а dwg) (добавлено: естественно, я говорю про файл, открытый другой сессией AutoCAD'a) надо поизвращаться. Хотя бы потому, что простой (open file "r") или vla-open без указания последнего флага вернет ошибку; ObjectDBX вернет ошибку независимо ни от чего. И через это я проходил. И, кстати, как ты собираешься отслеживать очередь сохранения изменений? Vault писать "на коленках" лично я не согласный.
> #140 :
Ты путаешь описания блока и его вхождения. Со всеми вытекающими wink.gif
> #142: mmax, я согласен быть проктологом-иллюзионистом. Только очень недолго.
> #143: Это вопрос схемы совместной работы через внешние ссылки, на dwg.ru как-то обсуждался. В принципе есть 2 схемы - "Кольцо" и "Звезда". Лично я больше склоняюсь к "звездочной" схеме (в силу различных причин, и не последняя - это система работы ADT). Хотя и кольцевая более чем имеет смысл. Я пока писал ответ, разыскал ссылку http://dwg.ru/forum/viewtopic.php?t=630&start=10000 - думаю, будет небезынтересно.
---
Добавлено: Во, чего обещал (придумывать дальше пока что лениво). Берите, тестируйте. Вызывать как (_kpblc-count-and-report). Перед вызовом вручную зарегистрировать dll (там ненужного полно, мне вычищать там будет слишком долго). О багах прошу сообщать.
Если что - пишите в личку, по мере возможности буду доделывать.
---
Добавлено 2: P.S. При работе с неоткрытыми файлами их внешние ссылки не обрабатываются. По крайней мере пока.
---
Добавлено 3: После некоторого тестирования, нашел небольшую ошибку в формировании текста ("имя компьютера" показывалось "не то"). Исключил. Во вложении - исправленный вариант.
---
Добавлено 4: обнаружено еще 1 мелкая ошибка и забытая функция. Исправлено, приаттачено.
---
Добавлено 5: добавил readme.txt, объясняющий, как зарегистрировать (и при необходимости разрегистрировать) dll.

Сообщение отредактировал kpblc - 28.6.2007, 15:30
Прикрепленные файлы
Прикрепленный файл  kpblc_count_2007_06_28_16_17.rar ( 290,82 килобайт ) Кол-во скачиваний: 88
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 28.6.2007, 9:39
Сообщение #145





Guest Forum






ВСЕ! Включаются ручки!
УРА-А-А!!!

Вчера в половине одинадцатого, наконец-то включил. До конца еще не успел все отлизать. Сейчас этим займусь.

Kpblc, твой ник увековечиваю в функции с применением vlax-for какое бы нутро в ней не было.
mmax, тебя тоже не забуду, в тексте себя найдешь. Общение, и даже некоторая порция адреналина у меня в крови сделали свое "черное" дело. Благодарю!
Все, абсолютно все, подробно распишу и сюда выложу.
Я до сих пор работал только с наборами, создаваемыми из пространства модели, теперь я могу и в базе рыться.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 28.6.2007, 9:50
Сообщение #146


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Спасибо, конечно smile.gif

Сообщение отредактировал kpblc - 28.6.2007, 9:55
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 28.6.2007, 11:21
Сообщение #147





Guest Forum






И так, продвинаемся дальше.
В присоединенном файле .rar следующие файлы:
Вложение1.dwg - 2-я от верха глубина
Вложение2.dwg - 1-я от верха глубина
Вложение3.dwg - тот файл, который надо открывать.
Фильтр ФМФ Водоприбор Ду 65.dwg - простой файл с блоком (самый низкий уровень вложенности)
Окно.bmp - вид дерева вложений, которое должно быть и у вас. (И у тебя, kpblc, в частности)
Книга1.xls - сранение свойсв внешних ссылок: "Корневой" - "Вложение2" и "погруженной" в ее нутро "Вложение1"
Вложение3.dwg - тот файл, который надо открывать.

Еще раз повторюсь - смотрите Окно.bmp

1. Сраниваем объекты, полученные из ModelSpace и Blocks, на предмет возможности их открытия _-refedit.

- Получение "корневой" ссылки с именем "Вложение2" из ModelSpace:
Код
(defun _kpblc-get-all-AcDbBlockReference-with-ModelSpace ( / )
(vl-load-com)
(setq res3 nil)
(vlax-for blk_def
(vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object)))
(if (and
(= (vlax-get-property blk_def 'ObjectName) "AcDbBlockReference")
)
(setq res3 (cons blk_def res3)))
);_ end of vlax-for
);_ end of defun. В переменной res3 - результат в виде списка vla-объектов


Оговорюсь, поскольку у нас в "корне" только один объект -"Вложение2", то это оно и есть. Можно было и не делать проверку на "AcDbBlockReference", все равно один только объект лежит на столе, но это так, перекочевало из предидущей версии.

Запускаем функцию - (_kpblc-get-all-AcDbBlockReference-with-ModelSpace)
Создаем пустой набор ss1 - (setq ss1 (ssadd)); или этим же самым обнуляем существующий
Добавляем в набор первый элемент из списка res3 - (ssadd (vlax-vla-object->ename (car res3)) ss1)
Включаем ручку - (sssetfirst nil ss1)
Запускаем -refedit - (command "_-refedit" "O" "A" "N")
Смотрим на экран и убеждаемся, что мы "тама". Появится панель "Refedit".
Нажимаем на ней значек выхода и сваливаем.

Далее: Находим тоже самое в коллекции Blocks
Код
(defun _kpblc-get-all-AcDbBlockReference-with-blocks ( / )
(vl-load-com)
(setq res nil)
(vlax-for blk_def
(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if (and
(= (vlax-get-property blk_def 'ObjectName) "AcDbBlockReference")
(= (vla-get-Name blk_def) "Вложение2")
)
(setq res (cons blk_def res)))
(vlax-for subent blk_def
(if (and
(= (vlax-get-property subent 'ObjectName) "AcDbBlockReference")
(= (vla-get-name subent) "Вложение2")
) (setq res (cons subent res)))
);_ end of vlax-for
);_ end of vlax-for
res
);_ end of defun; в переменной res в виде списка одно единственное значение, удовлетворяющее обеим требованиям.


Фильтр настроен на "Вложение2" в последующем надо будет 2 исправить на 1. см. далее.

Повторяем цикл запуска refedit:
Запускаем функцию - (_kpblc-get-all-AcDbBlockReference-with-blocks)
Создаем пустой набор ss1 - (setq ss1 (ssadd)); или этим же самым обнуляем существующий
Добавляем в набор первый элемент из списка res3 - (ssadd (vlax-vla-object->ename (car res3)) ss1)
Включаем ручку - (sssetfirst nil ss1)
Запускаем -refedit - (command "_-refedit" "O" "A" "N")
Смотрим на экран и убеждаемся, что мы "тама". Появится панель "Refedit".
Нажимаем на ней значек выхода и сваливаем.

Выводы:
И из Blocks, и из ModelSpace "корневые" ссылки прекрасно запускаются refedit.
Правда есть одна "козявочка" свойство, которого на самом деле нет, (см. dump) - IsXRef, эти "корневые" ссылки в упор не видит. Системная переменная "REFEDITNAME" если ее читать при ручном запуске _-refedit - показывает имя ссылки, которое сейчас будет редактироваться. Ну вместо того, чтобы отвечать на запросы типа Да/Нет ввести в строку запроса лисп выражение (getvar "REFEDITNAME") и в свойство InsUnits (RO) = "Millimeters"

Все остальные ссылки - ручки включаются, Переменная "REFEDITNAME" показывает при ручном запуске _-refedit - пустую строку "", свойство InsUnits (RO) = "Unitless" Но, проверка на значение свойства IsXRef - показывает, что объект является внешней ссылкой. У меня есть сильное подозрение, что это не проверка на свойство, а проверка на принадлежность к ссылке или блоку. Надо будет попробовать на простом примитиве.
Да, и самое главное, Refedit запускается, проходит все стадии диалога и выкидывает *Сancel*. Если запускать без дефиса, ссылка появляется в окне диалога, но дальше этого диалога процесс не катит.
Системная переменная "XEDIT" всегда в 1.

В файле Excel сравнены свойства двух ссылок "Вложение1" (первый столбец) и "Вложение2"

У кого есть какие идеи?

Сообщение отредактировал Supermax - 28.6.2007, 12:38
Прикрепленные файлы
Прикрепленный файл  AutoCAD_DWG.rar ( 147,18 килобайт ) Кол-во скачиваний: 77
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 28.6.2007, 11:38
Сообщение #148


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Во-первых, приятного.
Во-вторых, когда появишься, попробуй мои последние варианты. Вдруг покатят?
---
Добавлено: запускаю (_kpblc-count-and-report), в многострочнике получаю:
Цитата
Код
Подсчет элементов
Формирование отчета начато 28.06.2007 в 12:52:32 и окончено в 28.06.2007 в 12:52:38
Файл на момент подсчета не сохранен
В формировании отчета используются следующие настройки:
    Выбор:
        выполняется пользователем. Результат умножен на 1
Внешние ссылки  учитываются
Состав блоков копирования-вставки  не  учитывается
    Домен компьютера: <...>
    Логин пользователя: <...>
***

Учитываются элементы : блоки; дин.блоки; тексты;
***

Отчет в файл не экспортировался
***
Наименование : Фильтр ФМФ Водоприбор Ду 65    Кол.: 2

P.S. Кстати, в своем Excel'ном файлике ты пропустил еще и разницу по следующим свойства: Document; Handle; Hyperlinks; InsertionPoint; InsUntis; Name (ну, это понятно); ObjectID; OwnerID; Path; TrueColor. Хотя на фига оно надо, я не очень понимаю.

Сообщение отредактировал kpblc - 28.6.2007, 12:31
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 28.6.2007, 12:46
Сообщение #149





Guest Forum






Так, с "REFEDITNAME" все ясно, она всегда показывает пустую строку, аж пока не ответил на последний вопрос и не нажал самую большую кнопень. И только войдя в ссылку, уже появляется в ней имя.
Теперь с Units-ами разбираюсь.

Я разницу, там где она очевидно должна быть, типа имена и координаты вставки не считаю разницей. А вот единица измерения - другое дело. Когда файл создавался, в нем все было в миллиметрах, а тут перескочило. Подозрительно однако.

Сообщение отредактировал Supermax - 28.6.2007, 12:49
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 28.6.2007, 13:08
Сообщение #150





Guest Forum






** _kpblc-comserver-countoptions ERROR #93: bad argument type: VLA-OBJECT nil
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

20 страниц V  « < 3 4 5 6 7 > » 
Добавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Реклама
ООО «Арктика групп» ИНН: 7713634274




Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqvWgxEU

ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqvybpdW

Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx
Последние сообщения Форума






RSS Текстовая версия Сейчас: 4.8.2025, 11:36
Политика ООО ИИП «АВОК-ПРЕСС» в отношении обработки персональных данных