| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Объединение кусков текста в AutoCad LT (DIESEL?)

Объединение кусков текста в AutoCad LT (DIESEL?)

Ответ
Поиск в этой теме
Непрочитано 27.06.2011, 15:36 #1
Объединение кусков текста в AutoCad LT (DIESEL?)
Kirillspec
 
Расчет АМС
 
Москва
Регистрация: 11.03.2008
Сообщений: 113

Здравствуйте уважаемые специалисты!
Работаю в AutoCAD 2011 LT а по сему ограничен в возможностях по программированию.
Проблема следующая: при конвертации pdf в автокад текст разбивается на куски. Приходится потом вручную их соединять - копировать и вставлять отдельные куски в один мультитекст. Можно ли как-то это ускорить (автоматизировать)? например при помощи макрокомманд (diesel)...
Представляю я себе это примерно так:
выделил первый кусок, а затем кликая на последующие они сами вставляются в первый по очереди и удаляются.
Или выделяются сразу все куски, и после вызова команды они объединяются.

Последний раз редактировалось Kirillspec, 28.06.2011 в 10:51.
Просмотров: 16141
 
Автор темы   Непрочитано 05.07.2011, 13:48
#2
Kirillspec

Расчет АМС
 
Регистрация: 11.03.2008
Москва
Сообщений: 113


Мда, судя по количеству ответов AutoCad LT можно выкидывать на помойку(
Kirillspec вне форума  
 
Непрочитано 05.07.2011, 14:55
#3
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Нереально в нем такое сделать.
Do$ вне форума  
 
Непрочитано 06.07.2011, 11:24
#4
Сергей Богатов


 
Регистрация: 21.02.2009
Сообщений: 825



а LISP в нём совсем нет?


уже прочитал что нет...
__________________
Я-проектировщик бывший проектировщик!
Сергей Богатов вне форума  
 
Непрочитано 07.07.2011, 11:07
#5
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от Kirillspec Посмотреть сообщение
... AutoCad LT можно выкидывать на помойку(
Я тоже так думал, пока не пересел на Нанокад
kp+ вне форума  
 
Непрочитано 07.07.2011, 12:07
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от kp+ Посмотреть сообщение
Я тоже так думал, пока не пересел на Нанокад
Впечатление хуже даже чем об LT?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 07.07.2011 в 12:13.
hwd вне форума  
 
Непрочитано 07.07.2011, 14:07
#7
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Впечатления - В других ветках много сказано, не буду повторять
Короче, работать (пока) нельзя.
LT по сравнению с Nano - чудо высоких технологий (без иронии!)
kp+ вне форума  
 
Непрочитано 07.07.2011, 19:34
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Зато в нано можно попытаться сделать скрипт выполняющий, "Объединение кусков текста"...
gomer вне форума  
 
Непрочитано 08.07.2011, 01:03
#9
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от gomer Посмотреть сообщение
Зато в нано можно попытаться сделать скрипт выполняющий, "Объединение кусков текста"...
можно и в лт попытаться вызвать через ком строку внешнюю программу, которой передать выделенные тексты и в ней их объединить, а потом вставить в чертеж.
Если подумать, то и на дизеле можно попробовать это сделать - единственное препятствие - максимальный размер программы на дизеле...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 08.07.2011, 08:03
#10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
вызвать через ком строку внешнюю программу, которой передать выделенные тексты и в ней их объединить, а потом вставить в чертеж.
вызвать-то не проблема (если у LT не урезаны в этом плане возможности)... программа обработает текст и вернёт результат (к примеру выведет его на консоль или запишет в файл), но что дальше? Если у LT нет возможности программирования, как он этот результат получит и обработает?

имхо налицо противоборство: автодеск умышленно лишает пользователей возможности кодинга, а пользователи пытаются придумать способ обойти эту преграду. Однако доска в данной ситуации всегда будет "на коне" (имхо). Даже если некий энтузиаст и придумает способ кодинга в LT посредством "левых костылей", то не исключено, что если сие будет чем-то серьёзным - эту "неувязочку" автодеск в дальнейшем устранит, дабы всё было "как надо", ибо не устранить - значит терять деньги.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 08.07.2011 в 08:14.
hwd вне форума  
 
Непрочитано 08.07.2011, 08:16
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


http://www.globalcad.com/products/toolboxlt.htm
Правда есть ли поддержка 2011, не известно
gomer вне форума  
 
Непрочитано 08.07.2011, 08:35
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от gomer Посмотреть сообщение
http://www.globalcad.com/products/toolboxlt.htm
Правда есть ли поддержка 2011, не известно
Да, любопытно...
У меня есть предположение о том, как это сделано, но проверить не могу, т.к. нет LT: если у LT ядро то же, что и у AutoCAD, просто сверху "налеплено" ограничение на вызов appload/netload, то можно попробовать свою библиотеку грузить в LT через реестр, подсунув тем самым LT их для загрузки (возможно, что придётся писать в раздел Application ветки HKLM, если не сработает для HKCU). Различные ARX-библиотеки автокад и так с реестра грузит, так что для самописных arx-модулей это может и пройдёт (проверять нужно), а вот для дотнета - не уверен, но тоже смотреть нужно... При этом нужно будет не забыть и о переменной DEMANDLOAD. Если сие безобразие пройдёт на "ура" - тогда зелёный свет кодингу в LT, ибо грузить либы в автокад можно не через appload/netload, а вызывая для этого непосредственно метод, определённый в ObjectARX и стандартный метод дотнета: Assembly.LoadFrom(...) - главное загрузить своего "загрузчика", а уж остальное дело техники.

п.с. Если в LT жёстко прописан перечень arx-модулей (причём контролируются имена файлов, но не их хеши), которые он должен искать в реестре и грузить, то можно попробовать один из них подменить своим загрузчиком. LT загрузит его, а он уже загрузит тот модуль, который был им подменён и все те либы, которые нужны юзеру.

Повторюсь - это лишь предположение, которое нужно проверять. Не факт, что это пройдёт.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 08.07.2011 в 08:48.
hwd вне форума  
 
Непрочитано 09.07.2011, 11:48
#13
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
вызвать-то не проблема (если у LT не урезаны в этом плане возможности)... программа обработает текст и вернёт результат (к примеру выведет его на консоль или запишет в файл), но что дальше? Если у LT нет возможности программирования, как он этот результат получит и обработает?

имхо налицо противоборство: автодеск умышленно лишает пользователей возможности кодинга, а пользователи пытаются придумать способ обойти эту преграду. Однако доска в данной ситуации всегда будет "на коне" (имхо). Даже если некий энтузиаст и придумает способ кодинга в LT посредством "левых костылей", то не исключено, что если сие будет чем-то серьёзным - эту "неувязочку" автодеск в дальнейшем устранит, дабы всё было "как надо", ибо не устранить - значит терять деньги.
Можно же проявить чуточку фантазии...
К примеру, во внешней программе генерируем текстовый файл с текстом как примитивом в формате dxf, где нибудь в темпах и вставляем его в чертеж как блок - весь файл, потом расчленяем блок и получаем текст.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 09.07.2011, 15:17
#14
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
Можно же проявить чуточку фантазии...
С фантазией у меня плохо.

Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
К примеру, во внешней программе генерируем текстовый файл с текстом как примитивом в формате dxf, где нибудь в темпах и вставляем его в чертеж как блок - весь файл, потом расчленяем блок и получаем текст.
А у тебя похоже хорошо, но... Как предложенный тобой вариант поможет топикстартеру решить его проблему? Костыль с " внешней программой", генерирующей dxf не решит все его проблемы, поскольку автору нужно не только создать новые примитивы, но и удалить из файла уже имеющийся мусор, полученный из pdf (или ты это тоже можешь как-то через dxf обыграть?). Кроме того, обозначенную "внешнюю программу" ты предлагаешь топикстартеру самому писать?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 09.07.2011, 16:43
#15
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


я только хотел сказать, что задача в нано или лт решаются одинаково сложно. В одном случае, разработчики вообще не парились ради сторонних разработчиков, в другом сделали упрощенную версию с урезанным функционалом. Но это совершенно не значит, что в какой либо программе невозможно решить задачу. В конце концов, если заказчик требует - можно отправить файл в dxf, обработать вообще все тексты, удалить лишнее, объединить нужное и обратно вставить в нано или лайт кад...
По поводу данной темы отвечу - да, я могу решить эту задачу вообще в полном объеме для AutoCAD LT любой версии, но по затратам эта задача и все последующие могут стать значительно дороже перехода на полную версию када.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 09.07.2011, 18:58
#16
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
По поводу данной темы отвечу - да, я могу решить эту задачу вообще в полном объеме для AutoCAD LT любой версии
Елпанов Евгений, уже раскопал "потайную дверку" Акада ЛТ? Крут! Поделиться секретом не прошу, понятно, что коммерческая тайна, но хоть в каком направлении копать?
Цитата:
Можно же проявить чуточку фантазии...
К примеру, во внешней программе генерируем текстовый файл с текстом как примитивом в формате dxf, где нибудь в темпах и вставляем его в чертеж как блок - весь файл, потом расчленяем блок и получаем текст.
Надеюсь, это была шутка
kp+ вне форума  
 
Непрочитано 09.07.2011, 20:22
#17
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от kp+ Посмотреть сообщение
Елпанов Евгений, уже раскопал "потайную дверку" Акада ЛТ? Крут! Поделиться секретом не прошу, понятно, что коммерческая тайна, но хоть в каком направлении копать?
ничего я не раскопал, но я действительно уверен, что нет нерешаемых задач! Есть задачи, которые по каким либо причинам, никто пока не сделал. Для данной и многих других задач скажу - считаю бесперспективным делать программы, которые уже сделаны - для урезанного автокада это полная версия.

ps. Хотя, всякое бывает - сейчас занимаюсь повтором функционала инвентора в автокаде...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 09.07.2011, 20:58
#18
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
всякое бывает
Зачем нужна программа для использования которой нужны дополнительные программы?
gomer вне форума  
 
Непрочитано 09.07.2011, 21:12
#19
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Любопытства ради установил AutoCAD 2011 LT, зарегистрировал в реестре тестовый .net-модуль:
Код:
[Выделить все]
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD LT\R16\ACADLT-9001:419\Applications\HelloWorld]
"LOADER"="HelloWorld.dll"
"LOADCTRLS"=dword:00000002
"MANAGED"=dword:00000001
Запустил AutoCAD LT, однако в командной строке вижу это:
Код:
[Выделить все]
Выполняется регенерация модели.
Не удалось загрузить сборку. Сведения об ошибке: 
System.Security.SecurityException: Ошибка безопасности.
в 
Autodesk.AutoCAD.ApplicationServices.ExtensionLoader.ProcessA
ssembly(Assembly 
assembly)
Ошибкой завершилась сборка со следующим параметром Zone:
MyComputer
Команда: _RIBBON
Т.о. AutoCAD LT подхватил .net-модуль в автозагрузке, но отказался его грузить на основании ограничений политики безопасности. Возможно что он проверяет, подписана ли сборка сертификатом Autodesk... Я не силён по части безопасности, но думаю, что это решаемо, если поработать над этим вопросом - главное, что AutoCAD LT берётся грузить сторонний модуль... Кстати, раздел Application в ветке HKCU отсутствует, поэтому для регистрации я использовал HKLM, а библиотеку закинул в основной каталог AutoCAD LT.

Чуть позже добавлено:

У меня кое-что получилось... Значит так, если в .net-сборке я определяю класс, реализующий IExtentionApplication, то весь код, который я пропишу в методе Initialize будет выполнен в AutoCAD LT - я вывел на консоль автокада сообщение и создал в пространстве модели примитив однострочного текста. Но на этом пока все радости заканчиваются, ибо команды, которые я определяю в этом модуле AutoCAD LT не хочет выполнять. Далее показываю код примера и скрин результата:

Код:
[Выделить все]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using acad = Autodesk.AutoCAD.ApplicationServices.Application;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;

[assembly: ExtensionApplication(typeof(HelloWorld.Class1))]
[assembly: CommandClass(typeof(HelloWorld.Class1))]

namespace HelloWorld
{
    public sealed class Class1 : IExtensionApplication
    {
        [CommandMethod("bush", "test", CommandFlags.Modal)]
        public void test()
        {
            acad.DocumentManager.MdiActiveDocument.Editor.WriteMessage("Привет Мир!\n");
        }

        public void Initialize()
        {
            Document dwg = acad.DocumentManager.MdiActiveDocument;
            Editor ed = dwg.Editor;
            Database db = dwg.Database;
            ed.WriteMessage("Сборка загружена!\n");
            
            using (Transaction t = db.TransactionManager.StartTransaction())
            {                
                BlockTable bt = (BlockTable) t.GetObject(db.BlockTableId, OpenMode.ForRead);
                
                BlockTableRecord acBlkTblRec;
                acBlkTblRec = t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
                
                DBText dt = new DBText();
                dt.SetDatabaseDefaults();
                dt.Position = new Point3d(2, 2, 0);
                dt.Height = 0.5;
                dt.TextString = "Привет, мир!!!";

                acBlkTblRec.AppendEntity(dt);
                t.AddNewlyCreatedDBObject(dt, true);
                
                t.Commit();
            }

        }

        public void Terminate()
        {
            //throw new NotImplementedException();
        }
    }
}
На скрине, в окне консоли AutoCAD LT видно сообщение: "Сборка загружена!", а в пространстве модели видим текст, полученный программно. Но далее в консоли мы так же видим сообщение на тему безопасности... Т.о. разовое выполнение кода в AutoCAD LT доступно уже сейчас, а с командами придётся повозиться.

Я пытался обойти ограничение банальной обработкой события неизвестной команды:
Код:
[Выделить все]
        public void Initialize()
        {
            Document dwg = acad.DocumentManager.MdiActiveDocument;
            Editor ed = dwg.Editor;
            Database db = dwg.Database;
            ed.WriteMessage("Сборка загружена!\n");
            
            using (Transaction t = db.TransactionManager.StartTransaction())
            {                
                BlockTable bt = (BlockTable) t.GetObject(db.BlockTableId, OpenMode.ForRead);
                
                BlockTableRecord acBlkTblRec;
                acBlkTblRec = t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
                
                DBText dt = new DBText();
                dt.SetDatabaseDefaults();
                dt.Position = new Point3d(2, 2, 0);
                dt.Height = 0.5;
                dt.TextString = "Привет, мир!!!";

                acBlkTblRec.AppendEntity(dt);
                t.AddNewlyCreatedDBObject(dt, true);
                
                t.Commit();
            }
            dwg.UnknownCommand += new UnknownCommandEventHandler(dwg_UnknownCommand);
        }

        void dwg_UnknownCommand(object sender, UnknownCommandEventArgs e)
        {
            Document dwg = acad.DocumentManager.MdiActiveDocument;
            Editor ed = dwg.Editor;
            Database db = dwg.Database;
            ed.WriteMessage(string.Format("Глобальное имя: {0}\n", e.GlobalCommandName));
            if (e.GlobalCommandName.Trim().ToUpper() == "BUSH.TEST")
                test();
        }
Однако по факту этот трюк не срабатывает - вызов метода dwg_UnknownCommand не происходит (видимо в свете всё той же безопасности)... Есть один маленький положительный момент (в смысле то, что у меня получилось): если я добавляю в метод Initialize код, загружающий др модули (посредством AssemblyLoadFrom), то при наличии в этом модуле IExtensionApplication будет выполнен код и его метода Initialize, с последующим сообщением на тему безопасности. Т.е. при желании можно организовать цикл разовых выполнений кода, имеющегося в разных сборках.

Но... как говорится: "на безрыбье и лебедь щука" - пока хоть IExtentionApplication можно заюзать, всё равно лучше, чем ничего (хотя я согласен с тем, что сей способ весьма плохо пахнет)...
Миниатюры
Нажмите на изображение для увеличения
Название: LT.jpg
Просмотров: 202
Размер:	43.8 Кб
ID:	62734  
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 09.07.2011 в 22:45.
hwd вне форума  
 
Непрочитано 09.07.2011, 22:02
#20
Artem_R


 
Регистрация: 16.12.2009
Сообщений: 214


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
я только хотел сказать, что задача в нано или лт решаются одинаково сложно.
Почему это одинаково?
В LT надо придумать как обойти защиту автодеска + написать что-то, что выполняло бы эту задучу, а в нано просто написать скрипт.
Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
По поводу данной темы отвечу - да, я могу решить эту задачу вообще в полном объеме для AutoCAD LT любой версии, но по затратам эта задача и все последующие могут стать значительно дороже перехода на полную версию када.
Ничего себе одинаково!
В нано затраты будут на порядок меньше (а может на порядки).
Artem_R вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Объединение кусков текста в AutoCad LT (DIESEL?)

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Проблемы с вводом текста в AutoCad 2005 lelka AutoCAD 3 01.07.2005 10:40
Конвертирование текста из AutoCad Legin85 AutoCAD 4 05.05.2005 14:22
AUTOCAD 2006 Aragorn AutoCAD 14 01.04.2005 00:55
Что нового в AutoCAD 2005 ilka_t AutoCAD 40 19.05.2004 16:48