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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Аналог записной книжки для часто используемого текста

Аналог записной книжки для часто используемого текста

Ответ
Поиск в этой теме
Непрочитано 13.07.2022, 18:02 1 | #1
Аналог записной книжки для часто используемого текста
Lex75
 
Регистрация: 20.05.2010
Сообщений: 18

Здравствуйте. В СПДС от CS Graphics есть обалденная штука - записная книжка. Я использую ее во многих случаях, один из них - при построении выносок. Прямо из меню выноски можно провалиться в записную книжку, где уже заготовлены шаблны на все случаи жизни, остается только выбрать и вставить в выноску. Нет ли чего-то подобного отдельно? Что вы используете для вставки заготовок?
Просмотров: 3725
 
Непрочитано 13.07.2022, 20:22
#2
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,224



Autodesk - недосуг заниматься разной фигнёй, это пользователи сами должны изобретать для себя всякие там...!
VitalyAF вне форума  
 
Непрочитано 14.07.2022, 14:37
#3
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,006


Благо в API акада это все есть. Например, в контекстном меню мультивыноски добавить пункт "Заготовки текста"

Код:
[Выделить все]
 
// Windows
using System;

// AutoCAD
using aps = Autodesk.AutoCAD.ApplicationServices;
using dbs = Autodesk.AutoCAD.DatabaseServices;
using edi = Autodesk.AutoCAD.EditorInput;
using rtm = Autodesk.AutoCAD.Runtime;
using aws = Autodesk.AutoCAD.Windows;


namespace NotesFromMLeader
{
    public class Commands : rtm.IExtensionApplication
    {
        private static void OnInsertTemplateTextInML(object aObj, EventArgs aArgs)
        {
            aps.Document lDoc = aps.Application.DocumentManager.MdiActiveDocument;
            dbs.Database lDb = lDoc.Database;
            edi.Editor lEd = lDoc.Editor;
            try
            {
                edi.PromptSelectionResult lPSR = lEd.GetSelection();
                if (lPSR.Status == edi.PromptStatus.OK)
                {
                    edi.SelectionSet lSS = lPSR.Value;
                    if (lSS.Count > 1)
                    {
                        lEd.WriteMessage("\nВыделено более одной мультивыноски!\n");
                    }
                    else
                    {
                        // Здесь диалог выбора текста, с поиском, блекджеком и прочим
                        string lTML = "Типа выбранный в диалоге текст";

                        using (aps.DocumentLock lDL = lDoc.LockDocument())
                        {
                            using (dbs.Transaction lTr = lDb.TransactionManager.StartTransaction())
                            {
                                dbs.MLeader lML = (dbs.MLeader)lTr.GetObject(lSS[0].ObjectId, dbs.OpenMode.ForWrite);
                                if (lML.ContentType == dbs.ContentType.MTextContent)
                                {
                                    dbs.MText lMT = (lTr.GetObject(lML.MLeaderStyle, dbs.OpenMode.ForRead)
                                        as dbs.MLeaderStyle).DefaultMText.Clone() as dbs.MText;
                                    if (lMT != null)
                                    {
                                        lMT.SetContentsRtf(lTML);
                                        lML.MText = lMT;
                                    }
                                }
                                lTr.Commit();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                lEd.WriteMessage("\nПроизошла ошибка: {0}\n", ex.Message);
            }
        }


        private static void AttachCMToMLeader()
        {
            aws.ContextMenuExtension lCMEx = new aws.ContextMenuExtension();
            aws.MenuItem lMI = new aws.MenuItem("Заготовки текста");
            lMI.Click += new EventHandler(OnInsertTemplateTextInML);
            lCMEx.MenuItems.Add(lMI);
            aps.Application.AddObjectContextMenuExtension(dbs.Entity.GetClass(typeof(dbs.MLeader)), lCMEx); 
        }


        public void Initialize()
        {
            AttachCMToMLeader();
            // И тут подгружаете БД заготовок текстов (XML, бинарный поток, текстовой файл, внешняя БД и т.д.)

        }

        public void Terminate()
        {
            // Здесь содержимое БД заготовок текстов можно сохранить
        }

    }
}

если не хотите тратиться на СПДС)
Сергей812 вне форума  
 
Автор темы   Непрочитано 14.07.2022, 15:17
#4
Lex75


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Благо в API акада это все есть. Например, в контекстном меню мультивыноски добавить пункт "Заготовки текста"
Еще бы разобраться, как и куда его вставить...
Lex75 вне форума  
 
Непрочитано 14.07.2022, 15:38
#5
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Lex75 Посмотреть сообщение
Еще бы разобраться, как и куда его вставить...
Так это программированием надо заниматься. Причем не очень сложным и возможны варианты. И даже без API Автокада.

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

Введенную строку можно добавить в Словарь.
Миниатюры
Нажмите на изображение для увеличения
Название: dlg_get_string.png
Просмотров: 141
Размер:	55.8 Кб
ID:	248648  
ShaggyDoc вне форума  
 
Непрочитано 14.07.2022, 18:20
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,006


Цитата:
Сообщение от Lex75 Посмотреть сообщение
Еще бы разобраться, как и куда его вставить...
1. Скачать среду разработки, например.
2. Создать проект библиотеки классов, выбрав при этом соответствующую версию фреймворка в зависимости от версии акада и назвав как хотите (к примеру, у меня в примере NotesFromMLeader).
3. Находите в дереве проекта пункт "Ссылки" и там в контекстном меню: Добавить ссылку и выбрать из папки акада (где лежит сам acad.exe) файлы: accoremgd.dll, Acdbmgd.dll и Acmgd.dll. ВАЖНО: в свойствах у добавленных файлов обязательно задать: Копировать локально: False.
4. В том же дерева проекта переименовать Class1 в Commands, а далее просто тупо снести содержимое этого файла в основном окне редактора. И потом вставить мой код. Рабочая заготовка для взаимодействия с акадом готова.
5. А потом выбрать - на основе какой технологии интерфейс диалога делать: старый добрый WinForms или тот же WPF. Вот тут и начнется само программирование

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Так это программированием надо заниматься.
и это будет уже другая ветка форума)
Сергей812 вне форума  
 
Непрочитано 14.07.2022, 21:22
#7
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,224


А не легче будет новый СПДС прикрутить от CSoft...?
Да и вообще, советуют от акада отвыкать постепенно... ))
VitalyAF вне форума  
 
Автор темы   Непрочитано 14.07.2022, 21:30
#8
Lex75


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


Цитата:
Сообщение от VitalyAF Посмотреть сообщение
А не легче будет новый СПДС прикрутить от CSoft...?
В этом СПДС от CS Soft пользуюсь только выносками (они там шикарны!) вкупе с записной книжкой и созданными шаблонами. Как-то думаю это не стоит 70 тыс.
Lex75 вне форума  
 
Непрочитано 14.07.2022, 22:12
#9
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Lex75 Посмотреть сообщение
В этом СПДС от CS Soft пользуюсь только выносками (они там шикарны!) вкупе с записной книжкой и созданными шаблонами. Как-то думаю это не стоит 70 тыс.
Просто не умеешь его готовить..
В плане юзабилити нанокад уже делает автокад как бык овцу..
с СПДС.. автокад как пайнт против фотошопа..
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 14.07.2022, 22:36
| 1 #10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Offtop:
Цитата:
Сообщение от doctorraz Посмотреть сообщение
Просто не умеешь его готовить..
В плане юзабилити нанокад уже делает автокад как бык овцу..
с СПДС.. автокад как пайнт против фотошопа..
Вот тут я бы поспорил...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.07.2022, 00:59
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,006


Цитата:
Сообщение от Lex75 Посмотреть сообщение
этом СПДС от CS Soft пользуюсь только выносками (они там шикарны!) вкупе с записной книжкой и созданными шаблонами. Как-то думаю это не стоит 70 тыс.
ну врятли разработчик согласится выделить функционал выносок в отдельный продукт с меньшей стоимостью. Так как по факту многие пользователи СПДС только оформительскими функциями и пользуются, т.е. упадут продажи "полновесных" комплектов ПО.
Сергей812 вне форума  
 
Непрочитано 15.07.2022, 05:42
#12
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну врятли разработчик согласится выделить функционал выносок в отдельный продукт с меньшей стоимостью
Уже выделили..
Нано платформа, наноснавесками и СПДС для автокад
Проверить легко, посмотреть цены и функционал

----- добавлено через ~3 мин. -----
По вопросу ТС, есть такая прога keynote
Записная книжка, та же древовидная структура, умеет поверх всех
Единственное придется копипастить
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 15.07.2022, 15:14
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,006


На худой конец можно хранить заготовки текста в экселе, а вставлять в мультивыноску двойным кликом посредством простейшего макроса в листе книги

Код:
[Выделить все]
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Cancel = True
  On Error GoTo ErrSTML
  Dim lAcadApp As Object: Set lAcadApp = GetObject(, "AutoCAD.Application")
  If (lAcadApp.GetAcadState.IsQuiescent) Then
    Dim lCurrDoc As Object: Set lCurrDoc = lAcadApp.ActiveDocument
    Dim lSS As Object: Set lSS = lCurrDoc.PickfirstSelectionSet
    If (lSS.Count = 1) Then
      Dim lAcadEnt As Object: Set lAcadEnt = lSS(0)
      If (lAcadEnt.ObjectName = "AcDbMLeader") Then
        If (lAcadEnt.ContentType = 2) Then
          lAcadEnt.TextString = CStr(Target.Value2)
          lAcadEnt.Update
        End If
      End If
    End If
  End If
  Exit Sub
ErrSTML:
  MsgBox "Упс, не получилось!", vbCritical + vbOKOnly, "Ошибка"
End Sub


правда при этом пропадает возможность редактирования ячейки листа двойным кликом - издержки бюджетной автоматизации Хотя опять же ничто не мешает в закрепленной области вверху листа сделать выпадающий список проверки значений из двух значений и в макросе перед безусловным отказом редактирования (Cancel = True) проверять значение ячейки выпадающего списка и сразу вываливаться из обработчика события, если включен режим редактирования списка.

Если в ячейке экселя через Alt+Enter формируете перенос строк - в тексте мультивыноски тоже учитывается.
Сергей812 вне форума  
 
Непрочитано 16.07.2022, 10:20
| 1 #14
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,224


Offtop: У меня в Autocad MEP и книжки были, и аннотации, и выноски, и свойства со скриптами... кабельный журнал...
А функционала всё равно не хватало и из-за этого всё равно впахивали и за себя и за того парня... Вечно не успевали и ... огребали.
А в голом акаде книжка - что мёртвому припарок... я т.д.
VitalyAF вне форума  
 
Непрочитано 16.07.2022, 11:22
#15
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,006


Ну у людей разный сложившийся подход в проектировании, даже не вижу смысла вникать в это, пока нет личного интереса)

Но ТС сам ничего не хочет делать, судя по его реакции.. Ну, как говорится - фантазии бесплатны, платят за их реализацию)
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.07.2022, 11:08
#16
Lex75


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Но ТС сам ничего не хочет делать, судя по его реакции.. Ну, как говорится - фантазии бесплатны, платят за их реализацию)
Просто для меня это сложно, я не программист и сейчас в отпуске. Выйду на работу, буду кумекать, благо хороший программист есть) . С экселем вариант не подходит, хочу привязать какую-нибудь записную книжку с древовидной структурой, наподобие того, какая встроена в СПДС от CS, например notebook.

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Благо в API акада это все есть. Например, в контекстном меню мультивыноски добавить пункт "Заготовки текста"
А сами заготовки текста в вашем примере где находятся?
Lex75 вне форума  
 
Непрочитано 17.07.2022, 12:04
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,006


Цитата:
Сообщение от Lex75 Посмотреть сообщение
А сами заготовки текста в вашем примере где находятся?
нигде не находятся) Это лишь кусок кода, отвечающий за взаимодействие с акадом - контекстное меню для существующей мультивыноски и собственно вставка текста в нее же (по аналогии можно и для того же мультитекста сделать и т.п.). А создание диалогов - это уже чистый .Net без привязки к самому акаду, и это уже сами реализуете как удобно. Кода там будет на порядок больше, чем в моем куске кода - но все это разжёвано в интернете. В результате вызова вашего диалога в переменной lTML должен появиться выбранный текст и далее он будет вставлен в выноску. И все это (коды, диалоги) в конечном итоге будет скомпилировано в один файл *.dll, загружаемый через команду NetLoad вручную или через методы автозагрузки акада.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от Lex75 Посмотреть сообщение
С экселем вариант не подходит,
ну так написал же
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
На худой конец можно хранить заготовки текста в экселе
там вообще все готово, только код вставить в редакторе по Alt+F11 и сохранить как книгу с макросами.
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.07.2022, 13:15
#18
Lex75


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
там вообще все готово, только код вставить в редакторе по Alt+F11 и сохранить как книгу с макросами.
Создал новый лист в Эксель. Открыл редактор по Alt+F11. Сделал Insert +Module, вставил ваш код. Сохранил как книгу с макросом. Не понял как должно работать. Двойной клик на ячейку в экселе открывает редактирование этой ячейки. А должно улетать в мультивыноску по задумке?
Lex75 вне форума  
 
Непрочитано 17.07.2022, 14:13
#19
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,006


Цитата:
Сообщение от Lex75 Посмотреть сообщение
Сделал Insert +Module, вставил ваш код.
промахнулись. Там по умолчанию в редакторе VBA должно быть открыто дерево проекта (если нет - хоткей Ctrl+R). И в дереве будет %Имя вашего листа% - дважды по нему щелкаете и туда код вставляете. А в модуле обработчик события листа книги, мягко говоря, бесполезен)
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.07.2022, 14:22
#20
Lex75


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
дважды по нему щелкаете и туда код вставляете
Я так и сделал. Как должно работать? Выпоняю в акаде мультивыноску, появляется курсор в строке будущего текста. Затем перехожу в эксель с макросом, дважды кликаю на ячейке с текстом и содержимое ячейки должно появиться в строке мультивыноски?
Lex75 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Аналог записной книжки для часто используемого текста

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос VBA Excel для извлечения таблиц из линий, полилиний, текста из DWG файлов в Excel с помощью NanoCAD/AutoCAD JZY Готовые программы 8 14.07.2016 06:31
Что такое объект аналог? Tokio Прочее. Архитектура и строительство 19 12.02.2015 19:42
Выравнивание текста по элементу чертежа roman56 Программирование 4 20.03.2010 22:07
как редактировать contents в свойствах текста? как привязать размер текста атрибута к размеру блока? p-sm AutoCAD 3 13.08.2009 18:08
Как добавит часто используемые символы или слова в мтекст? Red Nova AutoCAD 12 05.03.2008 10:48