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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Очередная попытка опустить LISP.

Очередная попытка опустить LISP.

Закрытая тема
Поиск в этой теме
Непрочитано 02.11.2018, 11:26 #1
Очередная попытка опустить LISP.
Setvar
 
Москва
Регистрация: 10.02.2007
Сообщений: 611

Для любителей C# и .Net есть свои разделы. Нет, им надо было здесь, в разделе LISP всё обгадить.

Последний раз редактировалось Setvar, 07.11.2018 в 14:20.
Просмотров: 4752
 
Непрочитано 02.11.2018, 11:33
#2
Кулик Алексей aka kpblc
Moderator

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


Копирования куда?

----- добавлено через 23 сек. -----
В таблицу? Новый однострочный / многострочный текст?

----- добавлено через ~2 мин. -----
Что будет, если в мультивыноске используется блок, а не текст? Почему игнорируется обычная выноска?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.11.2018, 11:40
#3
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Zero

Последний раз редактировалось Setvar, 07.11.2018 в 09:22.
Setvar вне форума  
 
Непрочитано 05.11.2018, 12:29
#4
ИН}|{ЕНЕР


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


Изначально, хотелось бы, чтобы текст из мультивыноски копировался в буфер.
ИН}|{ЕНЕР вне форума  
 
Автор темы   Непрочитано 05.11.2018, 12:57
#5
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Zero

Последний раз редактировалось Setvar, 07.11.2018 в 09:22.
Setvar вне форума  
 
Непрочитано 05.11.2018, 13:51
#6
Сергей812


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


Цитата:
Сообщение от Setvar Посмотреть сообщение
В буфер обмена в самом AutoCAD'е (а не внутри встроенного редактора текста) копируется ОБЪЕКТ.
Offtop: чтож вы так, не оправдали надежд ИН}|{ЕНЕР )
Решение от Mac Lee
Сергей812 вне форума  
 
Автор темы   Непрочитано 05.11.2018, 15:52
#7
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Zero

Последний раз редактировалось Setvar, 07.11.2018 в 09:22.
Setvar вне форума  
 
Непрочитано 05.11.2018, 16:25
1 | #8
Сергей812


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


Цитата:
Сообщение от Setvar Посмотреть сообщение
Содержимое в виде МТекста записывается в буфер, однако в новую мультивыноску не вставляется.
вставить в буфер обмена Windows и вставить в мультитекст выноски - это две совершенно разные задачи)

Цитата:
Сообщение от Setvar Посмотреть сообщение
А где решение от Сергей 12? Паясничать легко.
Легко писать на "нормальных" языках, где не требуется изобретать велосипед на каждый чих. Набросал по быстрому на .Net пример копирования содержимого выделенной мультивыноски в буфер обмена Windows:

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

// AutoCAD
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.ApplicationServices;


namespace CopyTextMLeaderInClipboard
{
    public class CommandsClass
    {
        /// <summary>
        /// Копирование содержимого выделенное мультивыноски в буфер обмена 
        /// </summary>
        [CommandMethod("Копировать_текст_из_выноски_в_буфер", 
            CommandFlags.Redraw | CommandFlags.UsePickSet)]
        public void CopyTextMLeaderInClipboard()
        {
            // Получаем текущий документ, его БД и редактор
            Document lAcadDoc = Application.DocumentManager.MdiActiveDocument;
            Database lAcadDb = lAcadDoc.Database;
            Editor lAcadEd = lAcadDoc.Editor;
            // Получаем выбранные пользователем примитивы в случае их наличия
            PromptSelectionResult lPrompSelRes = lAcadEd.SelectImplied();
            // Если выборка успешна
            if (lPrompSelRes.Status == PromptStatus.OK)
            {
                // Получаем массив идентификаторов выделенных объектов
                ObjectId[] lListSelObjectIDs = lPrompSelRes.Value.GetObjectIds();
                // Если один выбранный примитив
                if (lListSelObjectIDs.Count() == 1)
                {
                    // Открываем транзакцию
                    using (Transaction lAcadTrans = lAcadDoc.TransactionManager.StartTransaction())
                    {
                        // Получаем объект по его идентификатору из БД
                        DBObject lDBObject = lAcadTrans.GetObject(
                            lListSelObjectIDs[0], OpenMode.ForRead);
                        // Пытаемся привести к типу мультивыноски
                        MLeader lMLeader = lDBObject as MLeader;
                        // Если не удалось
                        if (lMLeader == null)
                        {
                            lAcadEd.WriteMessage(
                                "\nБыла выделена не мультивыноска перед вызовом команды!\n");
                        }
                        else
                        {
                            // Если тип содержимого мультивыноски - мультитекст
                            if (lMLeader.ContentType == ContentType.MTextContent)
                            {
                                try
                                {
                                    // То копируем в буфер
                                    wf.Clipboard.SetText(lMLeader.MText.Text,
                                        wf.TextDataFormat.UnicodeText);
                                }
                                catch (System.Exception)
                                {
                                    lAcadEd.WriteMessage(
                                        "\nПроизошла  ошибка при копировании в буфер!\n");
                                }
                            }
                            else
                            {
                                lAcadEd.WriteMessage("\nСодержимое мультивыноски - не текст!\n");
                            }
                        }
                        lAcadTrans.Commit();
                    } 
                }
                else
                {
                    lAcadEd.WriteMessage("\nВыделено более одного примитива!\n");
                }
            } 
            else
            {
                lAcadEd.WriteMessage("\nВыделите мультивыноску перед вызовом команды!\n");
            }
        }

    }
}


Пример рабочий, удаляет при копировании в буфер все форматирование кроме символов переноса.
Сергей812 вне форума  
 
Автор темы   Непрочитано 05.11.2018, 16:40
#9
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Zero

Последний раз редактировалось Setvar, 07.11.2018 в 09:22.
Setvar вне форума  
 
Непрочитано 05.11.2018, 17:24
#10
Сергей812


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


Цитата:
Сообщение от Setvar Посмотреть сообщение
Зря ты это сделал. Раздел про LISP.
а может перестать трястись над лиспом, и начать осваивать те языки и средства разработки - которые не остановились в развитии много лет назад? И которые обеспечивают "из коробки" функционал, который в лиспе надо реализовать в виде библиотек функций? Кто уже давно на лиспе пишет - у тех эти наработки уже есть, а вот начинающим программистам-самоучкам под большим вопросом - нужен ли вообще этот лисп...
Сергей812 вне форума  
 
Непрочитано 06.11.2018, 09:21
| 1 #11
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Решение от Mac Lee
да и не его это вовсе решение)

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Легко писать на "нормальных" языках, где не требуется изобретать велосипед на каждый чих.
LISP идеально подходит для решения рутинных задач в автокаде, для которых писать на c-подобных языках не имеет никакого смысла: 1. пишешь и тут же видишь результат, 2. не нужно ничего собирать, компилиировать, отслеживать версии продукта и т.д. и т.п. 3. и самое главное - нет необходимости устанавливать на компе среду написания на этом самом NET.
если же конечно необходимо решать более сложниые задачи, то тогда наверное стоит, но Сергей812, не следует спамить в теме LISP постоянными отсылками на простоту нета, на то как в нём это просто делается и тому подобное. здесь люди спрашивают и пытаются решить/получить ответы на свои вопросы, используя строго LISP. ну и если же вы являетесь таким уж бескомпромиссным апологетом нета, так для вас специально и создана ветка про нет, занимайтесь своим рекрутированием там)

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
нужен ли вообще этот лисп...
да как же без него) и потом выбор языка программирования - это ЛИЧНОЕ ДЕЛО КАЖДОГО начинающего программиста!

Цитата:
Сообщение от Setvar Посмотреть сообщение
Зря ты это сделал. Раздел про LISP. Здесь достаточно было сообщения #1.
koMon вне форума  
 
Непрочитано 06.11.2018, 09:58
#12
Сергей812


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


Offtop:
Цитата:
Сообщение от koMon Посмотреть сообщение
1. пишешь и тут же видишь результат,
заодно это отучает начинающего программиста продумывать архитектуру программы, а не писать "быдлокод".

Цитата:
Сообщение от koMon Посмотреть сообщение
не нужно ничего собирать, компилиировать, отслеживать версии продукта и т.д. и т.п. 3. и самое главное - нет необходимости устанавливать на компе среду написания на этом самом NET.
На скольких версиях акада обычно одновременно работает средний пользователь?) А зачастую изменение версии программы .Net сводится к подключению нескольких библиотек из нужной версии акада и нажатием кнопки пересобрать проект - это конечно "огромная" работа) А студий разработки бесплатных более чем достаточно.

Цитата:
Сообщение от koMon Посмотреть сообщение
не следует спамить в теме LISP постоянными отсылками на простоту нета,
я показал работающий пример под катом для сравнения, с подробными комментариями - у вас пока только демонстрация понтов идет с раздачей никому не нужных ЦУ)
Сергей812 вне форума  
 
Непрочитано 06.11.2018, 11:08
#13
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Offtop: удивительное дело - а ведь существует устоявшееся мнение, что это культурная столица)))
koMon вне форума  
 
Непрочитано 06.11.2018, 23:13
#14
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 176


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
я показал работающий пример под катом для сравнения,
Спасибо за код, надо у себя попробовать повешу отдельной командной.

Offtop: Сергей812 мне как и Вам жалко что очень много народу на этом форуме пишут на ЛИСПе, я не могу понять почему? есть же хотя бы VBA. Я уж молчу о чуде Net-e.
veb86 вне форума  
 
Непрочитано 06.11.2018, 23:34
#15
Сергей812


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


Offtop:
Цитата:
Сообщение от veb86 Посмотреть сообщение
очень много народу на этом форуме пишут на ЛИСПе,
исторически сложилось: кто начинал программировать под акад с момента его появления на отечественном рынке - выбора особого не было) Сейчас выбор есть и есть русскоязычные источники (не все способны воспринимать информацию с англоязычных ресурсов).
Сергей812 вне форума  
 
Непрочитано 07.11.2018, 01:29
#16
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


Цитата:
Сообщение от veb86 Посмотреть сообщение
пишут на ЛИСПе, я не могу понять почему?
Offtop: потому что лисп перекрывает 90% потребностей пользователя
еще 5%, это если не устраивает быстродействие лиспа
и еще 5% для каких-то низкоуровневых функций или автокада или ОС
и в том и в другом случае целесообрознее будет использовать ObjectArx

зы http://forum.dwg.ru/showpost.php?p=182562&postcount=3
Vov.Ka вне форума  
 
Непрочитано 07.11.2018, 02:03
#17
Сергей812


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


Offtop:
Цитата:
Сообщение от Vov.Ka Посмотреть сообщение
потому что лисп перекрывает 90% потребностей пользователя
если быть точнее, 99% пользователей способны только запустить чужой лисп) Естественно, для них скомпилировать сборку для их версии акада даже из готового .net кода по подробнейшим инструкциям с инета - это уже фантастика..

Цитата:
Сообщение от Vov.Ka Посмотреть сообщение
еще 5%, это если не устраивает быстродействие лиспа
и еще 5% для каких-то низкоуровневых функций или автокада или ОС
и в том и в другом случае целесообрознее будет использовать ObjectArx
чем целесообразнее - отказ от использования множества языков с поддержкой .Net в пользу только одного С++? Без Фреймворка акад просто не запустится, а NetApi по сути является обертками над соответствующими функциями ObjectARX. Ну там где-то процентов 5% вроде теряется по производительности, зато взамен функции обертки дополнительно страхуют за счет внутренних проверок и вызовов соответствующих исключений "косяки" программиста.


Цитата:
Сообщение от Vov.Ka Посмотреть сообщение
http://forum.dwg.ru/showpost.php?p=182562&postcount=3
до сих пор не понимаю - зачем информацию между выносками перегонять через буфер обмена. Дополнительный потенциальный источник ошибки - ведь он (clipboard) может быть просто занят другим процессом.
Сергей812 вне форума  
 
Непрочитано 07.11.2018, 08:31
#18
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Vov.Ka Посмотреть сообщение
Offtop: потому что лисп перекрывает 90% потребностей пользователя
еще 5%, это если не устраивает быстродействие лиспа
и еще 5% для каких-то низкоуровневых функций или автокада или ОС
и в том и в другом случае целесообрознее будет использовать ObjectArx
Простите великодушно, но это утверждение отражает только Ваше окружение, не более того. Это как после выборов одаренные личности кричат, что выборы подтасованы, так как они и их знакомые не голосовали за некоего кандидата... Эгоцентризм, как он есть.
Намекну, лисп не развивается уже десятилетиями, в то же время .NET API развивается и очень резво, в развитие этого API автодеск вкладывает кучу денег, значит есть большой спрос и соответственно этот спрос не закрыт Lisp-ом. Просто так тратить деньги в кап. системе никто не будет, нужна прибыль...
Думаю любой грамотный человек способен сделать выводы.

Еще раз прошу прощения за вмешательство.
Boxa вне форума  
 
Автор темы   Непрочитано 07.11.2018, 09:20
| 1 #19
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Молодцы! Загубили тему.
Setvar вне форума  
 
Непрочитано 07.11.2018, 11:39
#20
Сергей812


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Сообщение от Setvar А где решение от Сергей 12? Паясничать легко.
Так вы сами ее и загубили - а сейчас трусливо стерли тот пост, и пытаетесь на других стрелки перевести)

----- добавлено через ~10 мин. -----
а функциональность решения по копированию выносок возрастет - если запоминать несколько последних значений выносок и иметь еще одну команду, которая предлагает выбрать текст из списка, а не "метаться" по чертежу в поисках выноски-оригинала. Это на случай - если забыли/пропустили выноски, а потом их увидели в процессе обработки других выносок.
Сергей812 вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Очередная попытка опустить LISP.

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Копирование, сортировка, переименование листов (layout) VVA Готовые программы 96 08.12.2023 14:11
LISP. Не отображается часть полки мультивыноски kacugu LISP 2 16.05.2016 08:52
Копирование блоков с автоматической ссылкой на атрибут pobat Программирование 10 31.07.2014 20:50
Копирование Мтекста с изменением №-ра копии Positron AutoCAD 4 17.08.2012 00:44
Создание слоя с названием содержимого текстового блока и копирование в него линий с других слоев antiponf Программирование 7 27.01.2012 19:43