Цитата
** _kpblc-comserver-countoptions ERROR #93: bad argument type: VLA-OBJECT nil
А dll зарегистрирована в системе?
Supermax
28.6.2007, 13:17
Еще одна особенность внешних ссылок.
Если вы копируете в текущем чертеже внешнюю ссылку, то копируется только ее "верхушка" содержание же этой внешней ссылки остается в базе в единственном числе. Не смотря на то, что refedit при не программном его запуске (или ее?) дает возможность выбора пространства редактирования, изменения происходят по всем представлениям этого элемента базы в рисунке.
Я тебе открою страшную тайну. Ты только не пугайся. Хотя ты уже большой.
(шепотом) Аналогичное происходит и при работе с блоками. Только тссс!!!
Supermax
28.6.2007, 13:33
Запустил, выделил 1 блок, посчитало все нутро. Хотя в сообщении сказало, что найден 1, а в результате выдало 2.
Я щас эту ссылку попробую своей NameEdit тряхнуть.
Насосов сколько отображается? Два. Ну вот и...
Supermax
28.6.2007, 14:17
Срочно! Функцию на предмет возможности редактирования выделенного объекта. Книга Полещука очень толстая зараза.
Переведи плиз. Потому как теоретически достаточно проверить состояние слоя, на котором лежит элемент, неудаленность элемента и доступность его (элемента) редактирования. И все.
Supermax
28.6.2007, 14:59
Слоев всего два 0 и Defpoints. Оба включены и доступны.
Есть функция, мелькала недавно, проверка на возможность редактирования любого оюъекта.
Ручного редактирования, что ли? Я просто вопроса понять не могу
Supermax
28.6.2007, 15:06
Кажется я напал на след. Все дело в команде, не команде, в в результате выполнения команды Select. Включаются не только ручки, а еще и подсвечивается примитив. Точнее не подсвечивается, а пунктирится. Если включать ручки у этих "коренных" ссылок, автоматически они сразу пунктирятся. А если у "внутренних" - нет. При нормальном вхождении Refedit, при переборе внутренних ссылок, на экране пунктиризация бегает с одного элемента на другой. А тут как это сделать? Ручку врубил, а теперь надо запунктирить.
Чувствую себя странно... Ощущение, что мы с тобой говорим о принципиально разных вещах и задачах.
Подсветка примитива - (vla-highlight) либо пропущенный параметр в (sssetfirst).
Цитата
При нормальном вхождении Refedit, при переборе внутренних ссылок, на экране пунктиризация бегает с одного элемента на другой.
А чего ж у меня-то не бегает? Или тебе мой вариант не годится напрочь?
Supermax
28.6.2007, 15:45
Твой вариант у меня в частности директивы черные такие показывает, что там в этх черных полосах видно не всегда и то еле-еле. Могу скрин показать. Во вторых, я могу тебе свой входной скрин показать, но в fas его перекачивать пока некогда, хотя могу и перекачать.
Вот уж чего-чего, а этого точно не ожидал. Дома или завтра попробую на виртуальной машине провернуть. Скорее всего, еще одна dll-ка потребуется.
Supermax
28.6.2007, 16:13
Подсветка функцией vla-Highlight внешней ссылки и даже попробовал подсветить в ней фильтр (деталь) - ничего не дала. В смысле вернула nil, но это так и положено, а подсветить не подсветила.
Может вопрос уже сдесь обсуждался.
Чтобы покопаться в потрохах ссылки надо вспомнить сначала, что она является другим реальным документом без которого она и существовать не будет.
И еще стоит вспомнить, что любой документ можно вставить как блок в текущий документ, При этом вам этот документ будет доступен с потрохами. И после получения необходимых примитивов, его можно удалить до самого последнего уровня. Вот только во вставляемом документе не должно быть блоков с именами равными имени файла тк вновь вставленный блок будет иметь имя файла и получится совпадение имен и будет ошибка.
Код
;получение активного пространства листа или модели
;если активен видовой экран, то АП=Modelspace
(defun activ-space-samocad ()
(if (= (getvar "cvport") 1)
(vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object)))
(vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
)
)
;Функция вставки блока имеющегося в документе или из файла
(defun insertblock-indocument-vla-samocad (block_pathfile_str / b1)
(setq b1 (vla-InsertBlock (activ-space-samocad) (vlax-3d-point 0 0 0) block_pathfile_str 1.0 1.0 1.0 0.0 ))
(vla-delete b1)
(princ)
)
;(insertblock-indocument-vla-samocad "C:\\SamoCAD.dwg")
;в файле SamoCAD.dwg не должно быть блоков с именем SamoCAD.
Цитата(Supermax @ 28.6.2007, 16:45)

Твой вариант у меня в частности директивы черные такие показывает, что там в этх черных полосах видно не всегда и то еле-еле. Могу скрин показать. Во вторых, я могу тебе свой входной скрин показать, но в fas его перекачивать пока некогда, хотя могу и перекачать.
Только что проверил. "Чистая" Windows XP Pro+SP2, AutoCAD 2005 Eng, AutoCAD 2006 Eng, AutoCAD 2006 Rus, AutoCAD 2007 Eng - все показывают одно и то же (см.картинку, на примере 2005). Проблема явно не в dll, а у тебя в системе.
В файле 3 скрина. 2006, 2007 и 2008 кадов. У меня два монитора, поэтому скрин такой широкий. С права узнаеш свой пост, с которого я слизывал строку запуска. Я не исключаю возможность, что регистрация твоей Dll прошла не гладко. Могу попробовать ее перерегистрировать. Только под твоим чутким руководством, чтобы ты был уверен, что все шаги были сделаны так, как надо.
Для mmax-а:
До изменения политики конструктивизма модели, дело пока не дошло. Еще не все способы перепробовали. Не исключено, что к предлагаемому варианту вставки "чужих" творений мы еще вернемся. И скорее всего, такой способ тоже надо "обсасать". Только рот пока занят внешними ссылками.
Вот сижу и с нуля пробую подсвечивать, объединять в блок и опять подсвечивать.
Написал Полещуку письмо - молчит пока. Наверное утонуло в спаме.
Спам хорошая штука, каждый день заставляет проверять почту и чистить почтовый ящик. Дисциплинирует однако. Но если пару - несколько дней туда не зайдешь - все, кранты. Тысячи раз нажимать на мышь, никто не сможет. Проще все грохнуть. Что и происходит у великих мира всего, периодически.
Supermax
29.6.2007, 12:03
К стати, элементы находящиеся во внешних ссылках не подсвечиваются. Ни примитивы, ни блоки, ни все скопом.
Возвращаясь к вопросу о регистрации dll и неверном отображении формы. Полдня сегодня потратил, но сделал-таки видео.
Тестовая система: Windows XP Rus + SP2 (интегрированный); AutoCAD 2006 Rus + SP1, AutoCAD 2007 Rus + SP1, AutoCAD 2008 Eng. Больше на машине ничего не установлено.
Видео лежит по адресу (сюда отказалось прикладываться напрочь):
http://rapidshare.com/files/40039945/dll_2...06_29-17-54.rarВо вложении - кодек, необходимый для проигрывания avi-файла. Также его можно взять по адресу
http://rapidshare.com/files/40040064/tscc_...06_29-17-02.rar (если сюда опять откажется приаттачиваться).
> mmax : Извини, конечно, но при таком подходе, во-первых, напрочь теряется смысл внешних ссылок и удобства работы с ними. Во-вторых, ну вставил ты блок (точнее, его описание), а дальше-то что?
И вот еще - критику кода примешь?
Цитата(kpblc @ 29.6.2007, 17:31)

И вот еще - критику кода примешь?
Не понялл вопроса.
В данный момент не могу протестить все имеющиеся здесь функции. Работы много.
Здесь я пока просто отдыхаю.
Или может меня уже самого гдето критикуют? покажите где.
Про документ-блок я имел ввиду, что ненадо заставлять пользователя вместо ссылки ставить блок. Я имел ввиду, что анализируя ссылку программа определяет откуда ссылка взялась, вплоть до запроса файла у пользователя, потом быстренько вставляет блок, анализирует, и удаляет. Если так прикинуть, то все кто не блоки будут входить в состав блока с именем = имени файла, а блоки уже будут иметь вполне конкретные описания.
Тебя никто и нигде не критикует, да и я критиковать (а на самом деле рассказать о тех трудностях, с которыми можно столкнуться) собирался именно твой последний код

Цитата
Про документ-блок я имел ввиду, что ненадо заставлять пользователя вместо ссылки ставить блок. Я имел ввиду, что анализируя ссылку программа определяет откуда ссылка взялась, вплоть до запроса файла у пользователя, потом быстренько вставляет блок, анализирует, и удаляет. Если так прикинуть, то все кто не блоки будут входить в состав блока с именем = имени файла, а блоки уже будут иметь вполне конкретные описания.
Я вот тут ничего не понял из того, что ты написал.
"Не надо пользователя заставлять..." - а разве его кто-то заставляет?
Цитата
анализируя ссылку программа определяет откуда ссылка взялась, вплоть до запроса файла у пользователя, потом быстренько вставляет блок, анализирует, и удаляет.
Ээээ... А зачем? Зачем вставлять блок? Если и без этого добраться до состава внешней ссылки никаких трудностей не представляет?
Дальше для меня смысл высказывания как-то... Ускользает он от меня, короче

(Кстати, я уже тоже отдыхаю - я сделал все что мог, рабочий вариант показал, теперь в ожидании "добра" от заказчика на публикацию кода.)
Цитата
о тех трудностях, с которыми можно столкнуться) собирался именно твой последний код
Надеюсь что это высказывание не про активный space. Про блок я и сам молчу
Да я уже сам более склоняюсь к тому что несу чушь какуюто.
Хотя с помощью ССЫЛРЕД и можно получить примитивы, но после ССЫЛЗАКР они превратятся в простые символы
Цитата(Supermax @ 29.6.2007, 10:59)

Написал Полещуку письмо - молчит пока. Наверное утонуло в спаме.
Спам хорошая штука, каждый день заставляет проверять почту и чистить почтовый ящик. Дисциплинирует однако. Но если пару - несколько дней туда не зайдешь - все, кранты. Тысячи раз нажимать на мышь, никто не сможет. Проще все грохнуть. Что и происходит у великих мира всего, периодически.
А вы знаете чем Николай Николаевич отличается от Владимира Владимировича?
Владимир Владимирович по закону обязан рассматривать обращения граждан и реагировать на них. (прошу этот факт не оспаривать)
Николай Николаевич по закону не обязан ничего рассматривать и реагировать. По всем параметрам он тоже президент в стране АвтоЛИСПа на территории России. А эта страна немаленькая и в ней тоже много недовольных желающих обратиться в высшую инстанцию. Инаврядли президент непризнанной страны станет рассматривать обращения отдельных граждан. Тут надо коллективную жалобу.
Ну, если честно, то именно с получением активного пространства у тебя и есть первая проблема.
Насчет остального: полностью согласен
Supermax
29.6.2007, 21:50
Mmax вообще-то толкнул не слабую идею. Что такое внешняя ссылка? - отдельный файл, который загружается в твой файл как блок в момент открытия оного. То есть, размер хранящегося файла экономится, но размер пространства оперативной памяти, занимаемого базой после загрузки всех ссылок в память компьютера , тот же, если бы скажем мы все файлы слили в один и открыли. Ссылки не экономят оперативную память. Крутить объект также трудно, как если бы он был закачен из одного файла.
Ну чтож. Проглотим.
А теперь вернемся к идее mmax-са. Допустим есть программа, которая всегда, после запуска открывает чистый файл и по записанным где-нибудь ориентировкам начинает по очереди открывать в отдельном окне другие файлы, все элементы которых объединять в блок и вставлять в открытый только-что документ. Ясен пень она блоки не в файл вставляет, а в память. Да и элементы объединять в блоки не надо. Надо просто всю эту кучу поварачивать и слегка смещать по осям, как внешнюю ссылку.
То есть мы имеем в пространстве оперативной памяти собранную модель из отдельных деталей, которые загружены из разных файлов. Если надо внести изменения, то либо надо все таки блоки делать и в них вносить, либо указывать каждой детальке, от какого она файла. Ну это не трудно. Главное, что после работы никакого общего файла не создается, все изменения переносятся в файлы - родители. Ну просто блок сохраняется в тот файл, от куда взят. А файл, где было проведено это шоу - удаляется.
Так, это я оставлю на закуску.
Supermax
29.6.2007, 22:07
Да, точно. Внешние ссылки тоже так построены. Имя слоя из двух частей - имя файла, и имя слоя в этом файле. Все. Макрос просто примитивный будет. Читать имена слоев и разбрасывать в разные файлы с пересчитанными точками вставки. Включаем автокад, он открывается с читым файлом, мы запускаем макрос, и он собирает модель. Макрос не выключается, и при каждом появлени новых элементов запрашивает в какой слой их вставить. Не дает вставлять в 0 и этот, как его дефпоинт вроде. Если нажать на сейв, то он производит пересохранение всех слоев в свои файлы. А настоящий сейв при этом заблокирован.
Макрос не будет примитивным - это я практически гарантирую. Сразу, чтоб не расслабляться, делай внешние ссылки 2 уровней вложенности. Заодно попробуй заменить _save и _qsave.
Макрос написан на VBA?
Supermax
30.6.2007, 10:46
Нет не написан. Да дело уже не в макросах, а в не корректной работе -refedit. Вот сижу и пишу письмо по англицки в Autodesk. Посмотрим, что они мне ответят.
Supermax
30.6.2007, 11:32
Ребята, не в моих принципах бросать начатое. Пока я четко не пойму что и почему, я не отсутплюсь. Я эту -refedit раздену до исподнего, но получу ответ, я лох и что-то не так делаю, или это лох тот дядя, которому поручили написать код в Autodesk.
Теперь я ничего не понимаю.
вобщем еще раз мое мнение.
Есть такие понятия: эквивалент, прототип и тому подобное.
Эквивалентом внешней ссылки является блок.
Попробуйте перетащить из проводника или папки Windows, любой двг. Потом на этотже двг вставить ссылку. полученные результаты сравнить.
Теперь что делает программа:
1.Определяет откуда ссылка(любым способом вплоть до запроса файла у пользователя), Имя файла определяется по коду 2, если файл имеет имя FILE.DWG, то код ссылки будет (2 . "FILE").
2.Отстает от ссылки. И вставляет этот файл как блок(набросок функции вставки блока в сообщении 166), временно, только для анализа.
2.2 В программе должен быть макрос(лисп)-ловушка для временных объектов.
3. Применяет к новоявленному блоку метод (vla-explode)
3.3 И и теперь она имеет массив со всеми примитивами блокового документа. Ябы сказал что она теперь имеет полную копию документа в том виде в каком он есть, со всеми блоками и ссылками, которые будут доступны без всяких ограничений любым макросам и программам.
4 Анализирует новоявленные примитивы. Специфицирует их.
5. Так как все это были временные объекты, то их надо удалить. Результат взрыва в массиве. Документ-блок на экране. Описание документа-блока гдето в базе. Вместе с Документом-блоком импортируются слои, тесктовые размерные стили. При совпадении имен блоки переопределяются это тоже надо учесть.
Благо что здесь можно применить команду UNDO.
Вобщем если комуто чтото непонятно то перетащите в графический экран анализируемый DWG на который имеется ссылка(такой способ можно сделать программно). И полученный блок будет не чемто таким особенным, а всеголишь эквивалентом внешней ссылки, который программа будет анализировать ВМЕСТО внешней ссылки. Таким образом мы получим неограниченный доступ к эквивалентам всех примитивов документа на который вставлена ссылка.
Supermax
30.6.2007, 13:17
Mmax, я усе твои мысли внимательно изучу, но пока я копаюсь в Autodesk-e на форуме про Refedit
Код
http://discussion.autodesk.com/search.jspa?q=_-Refedit&objID=f149&numResults=25&rankBy=10001&source=viewforum%7C149&start=0
Не оторваться!
Supermax
30.6.2007, 14:13
Чесно говоря, я от напряга уже совсем отупел. На форуме Autodesk-a зарегистрировался и свою тему про -refedt создал. Если у кого напряг с английским, повторяю супер пупер клевую прибамбасину.
http://pereklad.online.ua/ Заходите, устанавливаете с какого языка на какой переводить, копируете текст в окно и давите "Перекласти" то есть перевести. Можно выбрать кроме "загальной" то есть общей лексики, еще и кучу технических расширений словаря.
В любом сайте мира можно общаться, даже латвийском.
Supermax, попробуй всетаки поглядеть на мой метод эквивалентов. Он всетаки более реальный, там не надо копать ссылку, там ты будешь копать ее эквивалент. И чтобы зажечь руку и ручки отдельных элементов, достаточно будет наложить эквивалент и включить все что душа пожелает.
> mmax: все, что ты говоришь, проворачивать совершенно необязательно.
P.S. Я так понял, что (судя по количеству скачиваний) мой вариант не катит и никому нафиг не интересен?
Хорошо Kpblc, давай покритикуем твой вариант "считалки". Не в плане ее недоделанности, то есть отсутствие разных всяких возможностей, типа вывода на печать в отдельном формате. Это можно присабачить когда угодно. А в плане общей концепции.
Проектировщуку что нужно? - Две вещи.
1. Считать элементы для своих нужд, текущих, не окончательных. Чтобы можно было получить ответ, на какой-нибудь количественный вопрос.
2. Создать документ, где все элементы а) - отфильтрованы б) - сгруппированы в) - посчитаны г) - укомплектованы сопровождающей их атрибутикой д) - распечатаны в требуемом для проектировщика формате документа.
Первую часть задачи решает и мой VBA-шный макрос и твой. В своем ты даже немного попытался расширить пространство выбора типов элементов. К стати он не смотря на лажу с полосами - работает.
Вторую часть, чтобы решить надо иметь очень разветвленный диалог, либо в начале работы, либо в конце. Я например поставил в начало, поскольку результат такого диалога дает даные фильтрации, необходимые для выбора элементов, а заодно и их группирования.
Мне, например, как проетировщику, твоя шапка, перед результатом подсчета никчему. Как говорится не рыба и не мясо. Отчет как таковой - дело весьма редкое и попахивает психиатрической больницей. Всем начальникам подавай спецификации и ведомости, а не отчеты. Аэти спецификации и ведомости все сплош таблицы. А как только начинаешь связываться с таблицами, начинаешь понимать, что на всех не угодишь. Вот я и придумал, как от них избавится. И тебе советую тоже нечто подобное придумать.
Без внешних ссылок и дурак посчитает чего и сколько. С внешними ссылками - все зависит от условий выбора - а что собственно считать? И зачем?
Я например, пляшу от потребностей тех, кто оплачивает строительство. Без конца одни и теже вопросы: Сколько надо денег на благоустройство? На нулевой цикл, на временное электроснабжение, на коробку здания, на электрику и т.д. и т.п.
На эти все вопросы дает ответ смета, а она строится на основе материализма. Есть там работы без материалов, но очень мало.
Материалы и их атрибуты - это деньги, которые можно тратить и есть возможность их не потерять (как в случае с работой).
Поэтому работа с элементами модели должна быть к этим нуждам приспособлена.
И еще, обращаюсь к обоим моим оппонентам.
Тема разрослась на 10 листов. Катастрофически падает ее читаемость. Надо чистить, а мы ни по одному вопросу не пришли к общему мнению. Прыгаем с одного на другое, уходим то в право, то в лево. Надо подводить итоги господа. И сокращать наши опусы. Их можно переделывать, и обобщать. Всякие вопросы друг к другу - превращать в разъяснения в случае не понимания того-то и тоо-то. Иначе нам самим все это надоест.
Так мой итог:
Я забрел сюда в момент попытки зажигания ручки у внешней ссылки.
Удалось выяснить, что ручку можно зажечь и получить указатель на объект, но только после выполнения команды REFEDIT, как только прозвучала команда REFCLOSE все падает в nil.
Возник спор по поводу кода (2 . “*”). Вопервых ссылка это какойто файл, поэтому былобы разумнее для операций со ссылками запрашивать у пользователя имя файла и программа будет искать ссылку по имени (ssget “_X” (list(cons 2 “file”))).
Вовторых мне удалось выяснить, что если в работающем файле есть блок «Чертеж1», то ссылка с именем файла Чертеж1.dwg просто не вставится изза совпадения имен. Даже если этот файл сам является ссылкой в ссылке в любом поколении.
Далее я случайно подумал что ссылке можно придумать аналог или эквивалент виде блока. Но теперь нельзя вставить файл-блок так как на него есть ссылка.
Вобщем я так ничего путнего не предложил.
kpbls чтото придумал, но я с этим так и не ознакомился. Правда доверять приложению без исходного кода ………
Если вопрос еще актуален то я сейчас всетаки попробую испытать метод эквивалентов.
Начну в обратном порядке

> mmax : По идее не сегодня-завтра я получу окончательный ответ по вопросу публикации кода (тьфу-тьфу-тьфу, чтоб не сглазить). Будем надеяться, что все будет гуд

> Supermax :
Цитата
Проектировщуку что нужно? - Две вещи.
1. Считать элементы для своих нужд, текущих, не окончательных. Чтобы можно было получить ответ, на какой-нибудь количественный вопрос.
2. Создать документ, где все элементы а) - отфильтрованы б) - сгруппированы в) - посчитаны г) - укомплектованы сопровождающей их атрибутикой д) - распечатаны в требуемом для проектировщика формате документа.
А разве ты ответ на количественный вопрос не получаешь? Это раз

Два. "отфильтровать-сгруппировать-объединить" можно достаточно подробные данные. Обратную операцию, как правило, провернуть практически невозможно. Данные подсчитаны, а вот с распечаткой уж думайте сами. Мне, например, в пятницу вечером было дано задание "оставить вывод в текст в AutoCAD'e как есть, поменяв формат вывода в файл".
Цитата
В своем ты даже немного попытался расширить пространство выбора типов элементов.
Ну, если доступ к стороннему файлу без его открытия - это "немного"...

Цитата
К стати он не смотря на лажу с полосами - работает.
Было у меня подозрение еще на одну библиотеку, но после того, как в виртуальной машине все было нормально показано, мои подозрения развеялись как дым под ветром. Поскольку лично мне ситуацию повторить не удалось, рецепта дать не могу физически.
Цитата
Мне, например, как проектировщику, твоя шапка, перед результатом подсчета никчему. Как говорится не рыба и не мясо. Отчет как таковой - дело весьма редкое и попахивает психиатрической больницей.
Ага, пока "не сохраненный файл не пытаются подставить как окончательный вариант". У тебя не было такого? У меня - было. Потом же концов не найти. Вот и вставил. Так сказать, обставил пятую точку быками.
Цитата
Всем начальникам подавай спецификации и ведомости, а не отчеты.
У меня начальникам как раз интересны отчеты, как правило. Спецификации интересны тем, кто с ними работает

Возможно, у меня контора такая уникальная.
Цитата
А эти спецификации и ведомости все сплошь таблицы. А как только начинаешь связываться с таблицами, начинаешь понимать, что на всех не угодишь. Вот я и придумал, как от них избавится. И тебе советую тоже нечто подобное придумать.
Продумываю. Только с другой стороны подхожу к проблеме. Кто из нас прав - я не знаю.
Цитата
Без внешних ссылок и дурак посчитает чего и сколько. С внешними ссылками - все зависит от условий выбора - а что собственно считать? И зачем?
Честно говоря, не вижу принципиальной разницы - считать по выбору или по внешним ссылкам.
Про смету можно мне не рассказывать - у меня жена сметчица, так что их проблемы я более-менее представляю. И нужны им совершенно другие данные, чем в спецификациях (по крайней мере это не редкость).
---
Добавлено:
P.S. Попытки найти исходный dvb-проект на машине успеха не имели, а скачать его не удается (похоже, последствия падения форума). Так что посмотреть его по новой я не могу
А вот и мое творение по эквивалентам. Временное пока.
Данный подход полразумевает исследование любого файла, и необязателно даже чтобы на него была ссылка.
Можно работать даже из чистого документа.
Такой подход даже более универсален.
При желании его можно завязать на внешние ссылки.
Как я говорил выше если зажечь ручку у ссылки то имя файла можно получить по коду 2. Если файл ссылки лежит черттегде, то гдето этот путь должен быть прописан. либо файл лежит в этомже каталоге, далее если узнали где файл, то работаем с его эквивалентом.
Код
;получение активного пространства листа или модели
;если активен видовой экран в любом листе, то АП=Modelspace
(defun activ-space-samocad ()
(if (= (getvar "cvport") 1)
(vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object)))
(vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
)
);библиотечная
(defun c:test ()
(setq path (vla-get-path(vla-get-ActiveDocument(vlax-get-acad-object))))
(setq blkfilename (getfiled "Укажите файл на который есть ссылка"
""
"dwg"
16))
(vl-file-copy blkfilename (setq fileblk (strcat path "\\" "SamoCADTemp.dwg")))
(vla-startundomark (vla-get-ActiveDocument(vlax-get-acad-object)))
(setq fileblkobj (vla-InsertBlock (activ-space-samocad) (vlax-3d-point 0 0 0) fileblk 1.0 1.0 1.0 0.0 ))
(setq variantobj (vla-explode fileblkobj))
(vla-endundomark (vla-get-ActiveDocument(vlax-get-acad-object)))
;;;#<VLA-OBJECT IAcadBlockReference 076db7a4> #<VLA-OBJECT IAcadExternalReference 076db6d4>
(setq listobj (vlax-safearray->list (vlax-variant-value variantobj)))
;;;Переменная listobj содержит список всех примитивов иследуемого файла
;;;с ними можно делать все что угодно
;;; Правда надо не забыть что при совпадении имен блоков все вставляемые будут переопределены
;;;Дальнейший код уже не так важен просто для примера
(setq strlstobj (mapcar (function(lambda (a) (vl-prin1-to-string a))) listobj))
(setq strlstobj (mapcar (function(lambda (a) (vl-string-left-trim "#<VLA-OBJECT " a))) strlstobj))
(setq strlstobj (mapcar (function(lambda (a) (vl-prin1-to-string (read a)))) strlstobj))
(setq strlstobjblok (mapcar (function(lambda (a) (eq (strcase "IAcadBlockReference") a))) strlstobj))
(setq kolichblk (length (vl-remove nil strlstobjblok)))
(setq strlstobjxref (mapcar (function(lambda (a) (eq (strcase "IAcadExternalReference") a))) strlstobj))
(setq kolichxref (length (vl-remove nil strlstobjxref)))
(vl-file-delete fileblk)
(alert (strcat
"\nВ ииследуемом файле найдено"
"\nВхождений блоков " (vl-prin1-to-string kolichblk)
"\nВнешних ссылок " (vl-prin1-to-string kolichxref)))
(command "_.UNDO" "")
(princ)
)
>>kpblc и всетаки я не могу найти косяков в функции получения активного пространства. По замыслу она должна возвращать МОДЕЛ если активным является лист но у него активен видовой экран или вьюпорт, тоесть открыта дыра в модель. Если видовые экраны закрыты, то возвращает лист. во всех листах все проходит нормально.
Оказывается, раньше можно было класть любые файлы, не только архивные. Теперь принимает только архивированные. Но эта надстройка поломала и выкачку. Все файлы, которые не .arj не скачиваются, хотя имеют не большие размеры.
Файл первого макроса обновлен.
Mmax, -refedit сваливается в *Cancel* даже не входя во вложенную ссылку. До REFCLOSE дело даже не доходит.
Ручку включаю, -refedit запускаю, диалог прохожу, и как только все выполнено - *Cancel*. И такое только на вложенных ссылках. На "коренных" все ОК! Если просто refedit запускать, без дефиса, то все дерево показывает, дает возможность по нему походить, кнопки понажимать и как только давиш на ОК - получаеш *Cancel*. Вот зараза!
> mmax : если максимизировать окно ВЭ, находясь на вкладке "Лист" и перейдя в "Модель", у тебя твой вариант функции вернет "не то". Рабочий вариант см.
LISP. Получение активного пространства. Две версии
Так, я хочу попросить прощения у Supermax'a - проблема с отображением черных полей, как выяснилось, на данный момент нерешаема. Корни проблемы кроются в схемах Windows. При классической схеме все нормально отображается. Стоит взять Windows XP, как получается ситуация, описанная им. Еще раз прошу прощения.
Прощенья просят, только тогда, когда обидели. Ты меня обижал? Что-то я не заметил. А вот у меня DCL создается программно, ведь содержание панели зависит от содержания xls-файла. И после выхода из панели - уничтожается. Поэтому наверное я на такую кучу и не наступил.
Мужики, гляньте. Что это может быть и где это взять?
Цитата
Дорогой Джим W -, чтобы исправить эту проблему загружают файл сценария refix.scr с autocad.customer-files группы обсуждений. AUTOCAD 2000-ые, управляющие данных государства слоя, получили от Инструмента Экспресса Менеджера (LMAN) Слоя может заставить ошибку произойти.
Чтобы исправить это специфическое падение, вы можете использовать refix.scr сценарий, чтобы переместить данные государства слоя, восстанавливая способность к REFEDIT рисунки в вопросе. Этот сценарий должен управляться на всем внешне ссылается на рисунки (и в большинстве случаев базовые рисунки) а затем рисунки должны быть сохранены. После использования Менеджера Слоя, сценарий нужно управлять снова, если Refedit должен использоваться с внешней ссылкой.
Вы могли также использовать ScriptPro Инструмент Миграции, чтобы управлять этим сценарием против собраний рисунков. Если вы делаете так, последнюю линию сценария ((тревога ...)) нужно удалить для действий партии.
Это по тарабарски, но что такое refix.scr сценарий я его попытался там найти - и не смог.
> Supermax : Ну я посчитал что обидел. Возможно, я параноик

> # 195 : А ссылку на оргинал не подскажешь? Это не
http://discussion.autodesk.com/thread.jspa?messageID=182868 часом?
Честно говоря, то, что я проглядел по
http://discussion.autodesk.com, показывает, что этот скрипт ориентирован на решение проблемы сохранения таблицы слоев (и вызвано попытками сохранения таблицы слоев) в AutoCAD версии 2000(i).
Добавлено: точнее, статуса слоев через Layer State Manager И к _-refedit, похоже, отношение имеет достаточно слабое.
Так, сегодня в 23:19 наконец пришло сообщение от заказчика следующего содержания:
Цитата
Алексей!
Вы можете опубликовать Ваш код <остальное неинтересно>
Отсюда мораль - ловите, если интересно. Лично у меня только одна просьба - указывайте все же автора исходного варианта...
P.S. Кстати, для неиндексированных свойств дин.блоков у меня там вываливает ошибку. Пока не исправлял в этом коде. Вариант можно посмотреть на
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=36637zq
Да, это то сообщение. На мой опус пока ответа не получил.
Этот скрипт у них на сайте грохнули, похоже. На других форумах (в том числе cadalyst, augi, theswamp) про него тоже тишина...
Так что, думаю, этот код получить практически нереально.
Завтра в 21-00 уезжаю в Анапу. День буду в пути. Ноутбук с собой. Приеду свяжусь.
Вот мой опус на сайте Автодеска:
Код
http://discussion.autodesk.com/thread.jspa?threadID=588205
Посматривай, может кто нибудь среагирует.
Попробую. У меня с дома инет очень медленный, поочччтти финннский, но что смогу

P.S. Кстати, там тэги
[code
] и
[/code
] нормально срабатывают, по-моему.
Купил книгу: Владимир Свет "AutoCAD Язык макрокоманд и создание кнопок". Надо мыть пол, поскольку завтра отъезд, но не могу оторваться. Теперь мои лиспы, не возможно будет понять тем, кто не знаком с языком DIESEL и языком Script. Пол книги, да что там пол? - Вся книга о файлах *.scr, этих языках и их использовании. Файлы *.cui написаны именно на них. Куча примеров и текстов этих самых *.scr. В магазинах в Москве ее нет. Только в Интернет-магазинах. Где собственно я ее и купил. Всем, кто пишет на Lisp-ах рекомендую.
Эти языки полностью можно применять прямо в выражениях Lisp-a. Да и в lsp-файлах. Очень сильно расширяет возможности.