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

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

Программирование в Autocad: с чего начинать новичку.

Ответ
Поиск в этой теме
Непрочитано 01.05.2021, 14:53
Программирование в Autocad: с чего начинать новичку.
Publipor
 
Регистрация: 02.03.2021
Сообщений: 49

Здравствуйте.
Помогите новичку выбрать перспективный язык программирования для создания собственных команд (программ) для autocad
Просмотров: 69975
 
Непрочитано 05.05.2021, 22:38
#41
Кулик Алексей aka kpblc
Moderator

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


Спасибо! Offtop: Жаль, что из-под VS CommunityEdition туда мне не удается влет не добраться
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.05.2021, 23:56
#42
Сергей812


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


Offtop:
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Жаль, что из-под VS CommunityEdition туда мне не удается влет не добраться
так прямо в браузере и изучать можно. Там все кликабельно и открывается стандартно либо в той же вкладке, либо в новой. Ну и загляни на вкладку Down_load справа вверху - там можно в виде проекта скачать, правда не полного - без ресурсов.
Сергей812 вне форума  
 
Непрочитано 06.05.2021, 07:45
#43
trir


 
Регистрация: 18.12.2010
Сообщений: 5,051


Цитата:
так как сборщик мусора в c++ не предусмотрен
каждый пишет свой
trir вне форума  
 
Непрочитано 06.05.2021, 09:02
#44
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,512


Цитата:
Сообщение от miko2009 Посмотреть сообщение
я так понимаю вы про С++только слышали ? оператор new на ++ имеет немного иной смысл чем в С#, если вы вызвали переменную через new , то должны ее удалить в конце стека через delete, а если вы начнете практиковаться в таких процедурах то вы погрязнете по уши в самом настоящем программировании.
Более рационально записать эту переменную в виде:
vector<string> arName(n);
где n это конкретное значение для резервирования в памяти n*4 байт, которое не может остаться в виде n без конкретного значения перед объявлением переменной arName
Пост #32, на который Вы ответили, иллюстрирует как не надо делать и написан в противовес посту #30 (как надо делать), в котором массив был объявлен статически как vector<string> arName;
Смысл написанного был в том, что в С++ при правильной организации работы следить за утечками памяти практически не придется.

По поводу рациональности объявления размерности массива строк заранее (n) - это не правильно.
1. Так как под каждую строку string массива так или иначе память будет выделяться отдельно (при формировании строки, а не инициализации массива), в целом это может не дать существенной экономии (в отличии от массивов с фиксированным размером элементов - например vector <double>).
2. Кроме того, сам класс vector при добавлении элементов память выделяет не по одному элементу, а блоками, что уже дает ускорение. Т.е. выделять 4 элемента при объявлении массива - бессмысленно (вектор, скорее всего, сам больше зарезервирует памяти "про запас", чем под 4 элемента). Если уж выделять память под массив заранее - то уж под массивы на сотни элементов и при помощи метода reserve, а не (n) при объявлении. Метод reserve - выделяет память, но не меняет размер массива.
nickname2019 на форуме  
 
Непрочитано 06.05.2021, 09:35
#45
Сергей812


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


создается впечатление, что этот шаблон vector создан вдогонку управляемым языкам - это их идеология: программист управляет данными в явном виде, но не ресурсами) В принципе, логично - сейчас все идет по пути убыстрения/удешевления разработки кода, а не экономии каждого байта - как во времена 286/386 компьютеров с несколькими мб оперативки и тактовыми частотами в десятки МГц.
Сергей812 вне форума  
 
Непрочитано 06.05.2021, 09:43
#46
bigden


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
создается впечатление, что этот шаблон vector создан вдогонку управляемым языкам
так в этом и прикол плюсов. хочешь экономить каждую миллисекунду - делай все вручную, задолбало все и хочется меньше гемороя - используй stl

----- добавлено через ~2 мин. -----
В комитете создали группу по линейной алгебре. Так что когда реализую будет полный фарш. Ни фортранов тебе, ни питонов не надо будет
bigden вне форума  
 
Непрочитано 06.05.2021, 09:46
#47
trir


 
Регистрация: 18.12.2010
Сообщений: 5,051


Цитата:
а не экономии каждого байта - как во времена 286/386 компьютеров с несколькими мб оперативки и тактовыми частотами в десятки МГц.
как во времена PDP
trir вне форума  
 
Непрочитано 06.05.2021, 12:49
#48
miko2009

Инженер-конструктор
 
Регистрация: 13.10.2011
Москва
Сообщений: 2,359


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Пост #32, на который Вы ответили, иллюстрирует как не надо делать и написан в противовес посту #30 (как надо делать), в котором массив был объявлен статически как vector<string> arName;
Смысл написанного был в том, что в С++ при правильной организации работы следить за утечками памяти практически не придется.

По поводу рациональности объявления размерности массива строк заранее (n) - это не правильно.
1. Так как под каждую строку string массива так или иначе память будет выделяться отдельно (при формировании строки, а не инициализации массива), в целом это может не дать существенной экономии (в отличии от массивов с фиксированным размером элементов - например vector <double>).
2. Кроме того, сам класс vector при добавлении элементов память выделяет не по одному элементу, а блоками, что уже дает ускорение. Т.е. выделять 4 элемента при объявлении массива - бессмысленно (вектор, скорее всего, сам больше зарезервирует памяти "про запас", чем под 4 элемента). Если уж выделять память под массив заранее - то уж под массивы на сотни элементов и при помощи метода reserve, а не (n) при объявлении. Метод reserve - выделяет память, но не меняет размер массива.
вы все дальше закапываетесь , выложите пример вашего кода с векторами, я вижу что вы что то гуглите без понимания
Например как у меня , и с обычными векторами и с векторами CUDA
miko2009 вне форума  
 
Непрочитано 06.05.2021, 13:27
#49
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,512


Цитата:
Сообщение от miko2009 Посмотреть сообщение
вы все дальше закапываетесь , выложите пример вашего кода с векторами, я вижу что вы что то гуглите без понимания
Функция чтения массива произвольной длины (double) из файла. Добавление элементов производится в конец вектора.
Код:
[Выделить все]
 
typedef vector <double> tmardouble;
bool load_vector_from_file(CString fname, tmardouble &arv){		
	std::string s1;	
	ACHAR ach[3024];	
	arv.clear();//Очищаем вектор	
	copyCStringtoACHAR(ach,fname);//Путь из CString копируем в строку с нулем в конце
	ifstream in(ach);//Открываем файл на чтение
    if (!in){
		return false;
	}
	double x1;
	while (getline(in,s1,'\n')){
		val1(s1,x1);//Функция преобразования строки в число double
		arv.push_back(x1);//Добавляем значение в конец вектора
	}
	in.close();
	return true;
}
Можно конечно файл прочитать два раза - один раз для определения количества элементов, чтобы зарезервировать память под массив - потом прочитать еще раз с заполнением массива. Если размерность массива известна заранее - конечно его можно инициализировать (задать размер и заполнить нулями) при объявлении.
nickname2019 на форуме  
 
Непрочитано 06.05.2021, 14:11
#50
Сергей812


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


1. Если известно количество элементов в векторе - что мешает записать в файл в начале вектора количество элементов?
2. Если заранее неизвестно - запомнить позицию в файловом потоке, записать "пустышку" - нулевое количество, после завершения записи вектора с подсчетом количества во вспомогательной переменной записать по ранее сохраненной позиции реальное число элементов.
Сергей812 вне форума  
 
Непрочитано 06.05.2021, 15:32
#51
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,512


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
1. Если известно количество элементов в векторе - что мешает записать в файл в начале вектора количество элементов?
2. Если заранее неизвестно - запомнить позицию в файловом потоке, записать "пустышку" - нулевое количество, после завершения записи вектора с подсчетом количества во вспомогательной переменной записать по ранее сохраненной позиции реальное число элементов.
Это конечно на любителя. Я обычно не занимаюсь оптимизациями сразу, так как эффект заранее оценить сложно, а время на это намного больше уйдет.
Если код тормозит совсем уж безбожно - тогда надо думать начинать. Но все равно обычно тормозит не из-за особенности реализации "сишных" методов (типа разового выделения памяти под массивы), а из-за того, что свой алгоритм коряво построен, сортировки не оптимальны и т.д.
nickname2019 на форуме  
 
Непрочитано 06.05.2021, 15:45
#52
Сергей812


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


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Это конечно на любителя. Я обычно не занимаюсь оптимизациями сразу, так как эффект заранее оценить сложно, а время на это намного больше уйдет.
Offtop: профессионалы построили Титаник
причем тут на любителя - просто голову включать в процессе написания кода, а не когда уже
Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Если код тормозит совсем уж безбожно - тогда надо думать начинать.
какие затраты времени - записать число в файл перед содержимым самого вектора, а при считывании задать сразу нужную емкость вектора?
Сергей812 вне форума  
 
Непрочитано 06.05.2021, 16:42
#53
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,512


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Offtop: профессионалы построили Титаникпричем тут на любителя - просто голову включать в процессе написания кода, а не когда уже какие затраты времени - записать число в файл перед содержимым самого вектора, а при считывании задать сразу нужную емкость вектора?
В реальной жизни обычно приходится разбирать текстовые файлы, созданные сторонней программой - например, расчетные схемы Лиры или Скада. А их разработчики не настолько любезны, чтобы писать в файл размерность массивов.
Когда я это делал в Delphi - приходилось по два раза перечитывать расчетную схему (для определения размера массива и для заполнения), так как в Delphi были чудовищные тормоза с выделением памяти.
nickname2019 на форуме  
 
Непрочитано 06.05.2021, 16:46
#54
Сергей812


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


а можно от лени вообще наделать наследуемых классов от того же List<T> типа:

Код:
[Выделить все]
 /// <summary>
    /// Расширение стандартного списка с функциями записи и чтения из файла
    /// </summary>
    /// <remarks>На тип Т наложено ограничение в виде обязательной реализации
    /// интерфейса IItemFIO, студия даже не даст скомпилировать приложение
    /// в противном случае</remarks>
    /// <typeparam name="T">Тип элемента</typeparam>
    public class ExtList<T> : List<T> where T : IItemFIO<T>, new()
    {
        /// <summary>
        /// Запись содержимого списка в бинарный файл
        /// </summary>
        /// <param name="aNameFile">Имя записываемого файла</param>
        /// <returns>true - запись файла прошла успешно, false - нет</returns>
        public bool Write(string aNameFile)
        {
            try
            {
                // Открываем файловый поток на запись
                using (FileStream lFS = new FileStream(aNameFile, FileMode.Create, FileAccess.Write))
                {
                    using (BinaryWriter lBW = new BinaryWriter(lFS, Encoding.UTF8))
                    {
                        // Записываем количество элементов в списке
                        lBW.Write(Count);
                        // Заносим содержимое элементов в поток
                        ForEach(delegate (T aItem) { aItem.Write(lBW); });
                    }
                }
                // Возвращаем успешное завершение записи
                return true;
            }
            catch
            {
                // Возвращаем признак ошибки
                return false;
            }
        }


        /// <summary>
        /// Чтение содержимого списка из бинарного файла
        /// </summary>
        /// <param name="aNameFile">Имя читаемого файла</param>
        /// <returns>true - чтение файла прошло успешно, false - нет</returns>
        public bool Load(string aNameFile)
        {
            try
            {
                // Открываем файловый поток на запись
                using (FileStream lFS = new FileStream(aNameFile, FileMode.Open, FileAccess.Read))
                {
                    using (BinaryReader lBR = new BinaryReader(lFS, Encoding.UTF8))
                    {
                        // Считываем количество элементов в списке
                        Capacity = lBR.ReadInt32();
                        // В цикле читаем элементы в список
                        T lTempItem = new T();
                        for (int i = 0; i < Capacity; i++)
                        {
                            Add(lTempItem.Load(lBR));
                        }
                    }
                }
                // Возвращаем успешное завершение чтения
                return true;
            }
            catch
            {
                // Возвращаем признак ошибки
                return false;
            }
        }

    }
где интерфейс
Код:
[Выделить все]
 /// <summary>
    /// Интерфейс чтения и записи содержимого элемента в файл
    /// </summary>
    /// <typeparam name="T">Тип элемента</typeparam>
    public interface IItemFIO<T>
    {
        /// <summary>
        /// Чтение значения элемента из бинарного потока
        /// </summary>
        /// <param name="aBR">Открытый на чтение бинарный поток</param>
        /// <returns>Считанное содержимое элемента</returns>
        T Load(BinaryReader aBR);

        /// <summary>
        /// Запись содержимого элемента в бинарный поток
        /// </summary>
        /// <param name="aBW">Открытый на запись бинарный поток</param>
        void Write(BinaryWriter aBW);
    }
и потом использовать для любого незапечатанного или своего типа. А можно и о сериализации вспомнить, в принципе)

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Когда я это делал в Delphi - приходилось по два раза перечитывать расчетную схему (для определения размера массива и для заполнения), так как в Delphi были чудовищные тормоза с выделением памяти.
в дельфях тоже свой менеджер памяти, насколько помню - откуда там дикие тормоза? Если, конечно миллионами мелких кусочков не оперировать одновременно, что сам менеджер памяти начинает томозить...
Сергей812 вне форума  
 
Непрочитано 06.05.2021, 17:21
#55
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,512


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а можно от лени вообще наделать наследуемых классов от того же List<T> типа:
Прикольно. Но из 18 строчек кода в #49 получилось более 80 строчек кода в #54. Я не люблю ООП, классов много, файлов много, отлаживать трудно. Особенно, если наследовать объекты друг от друга кучу раз.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
в дельфях тоже свой менеджер памяти, насколько помню - откуда там дикие тормоза? Если, конечно миллионами мелких кусочков не оперировать одновременно, что сам менеджер памяти начинает томозить...
Не разбирался. Помню, что проблемы с памятью были. Перешел на с++ - исчезли.
nickname2019 на форуме  
 
Непрочитано 06.05.2021, 17:31
#56
doctorraz

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


Уот вы тут теесу мощно помогли..
Зато писюнами друг с другом знатно померились
Крассучеги.. помогли теесу знатно))
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 06.05.2021, 18:02
#57
Сергей812


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


а ТС, судя по активности вхождения на форум и отсутствию новых сообщений - почитал ветку несколько дней, понял, что за 10 лет никакой новой халявы не появилось и подуныл)

----- добавлено через ~27 мин. -----
Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Я не люблю ООП, классов много, файлов много, отлаживать трудно. Особенно, если наследовать объекты друг от друга кучу раз.
Вообще то смысл ООП как раз замкнуть (инкапсулировать) часть общей логики приложения внутри соответствующего класса - отладил и забыл) А наследовать объекты друг от друга кучу раз - это вообще логике не поддается, оргия уже какая то) Недаром в .Net сразу запретили множественное наследование.
Сергей812 вне форума  
 
Непрочитано 06.05.2021, 19:57
#58
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,512


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Вообще то смысл ООП как раз замкнуть (инкапсулировать) часть общей логики приложения внутри соответствующего класса - отладил и забыл) А наследовать объекты друг от друга кучу раз - это вообще логике не поддается, оргия уже какая то) Недаром в .Net сразу запретили множественное наследование.
Это теоретически. Практически что-то эдакое возникает https://forum.dwg.ru/showpost.php?p=...postcount=1589
nickname2019 на форуме  
 
Непрочитано 06.05.2021, 20:03
#59
Сергей812


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


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Это теоретически. Практически что-то эдакое возникает https://forum.dwg.ru/showpost.php?p=...postcount=1589
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Недаром в .Net сразу запретили множественное наследование.
чтобы не плодили таких монстров)
Сергей812 вне форума  
 
Непрочитано 06.05.2021, 20:14
| 1 #60
Кулик Алексей aka kpblc
Moderator

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


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
чтобы не плодили таких монстров)
Типа MVVM, DI etc?

Мне все же кажется, что тут радостно запугали и запутали ТС. Мое мнение - фиолетово на каком языке писать. Главное - начать, а там как карта ляжет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программирование в Autocad: с чего начинать новичку.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoCAD Чего хотите изменить в интерфейсе? Серёга - Bilder AutoCAD 142 11.09.2015 16:18
С чего начинать программирование в Lisp'е? XoRys Поиск литературы, чертежей, моделей и прочих материалов 13 27.02.2013 23:26
Информация по идентификационным кодам программ в сетевых лицензиях Autodesk KSI AutoCAD 1 14.09.2009 15:59
Программирование в ЛИСП: с чего начинать Vavan Metallist LISP 14 24.06.2008 22:42
С чего начинать Диана Проценко Прочее. Программное обеспечение 16 19.05.2008 15:39