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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > Предложение: Готовые функции

Предложение: Готовые функции

Ответ
Поиск в этой теме
Непрочитано 09.11.2007, 15:17 #1
Предложение: Готовые функции
Apelsinov
 
Проектировщик ВК. LISP-любитель.
 
Москва
Регистрация: 15.12.2003
Сообщений: 1,186

прошу сильно не пинать, но у меня организационное предложение, оно в общем-то касается только тех кто сам пишет в лиспе.

я хотел бы предложить создать наряду с подразделом "Готовые программы" подраздел "Готовые функции".

Это все исключительно от того что я ужасно ленив, и иногда лень самому писать что-то , а есть подозрение что это либо у кого-то уже есть, либо кому-то будет интересно написать такое.

Функции туда выкладывать по собственному желанию, либо, что еще более интересно, по запросу.

Возможно так-же, именовать эти функции в соответствии с определенными правилами, что позволит в итоге получить некую базу функций, на основании которой можно много чего хорошего творить.

Я понимаю что предложение спорное, ну а вдруг из этого что и выйдет.

ЗЫ. Кстати, вот мне нужна функция по идентификации объекта как облака, т.е. полилинии созданной командой REVCLOUD.
аргументы: "Vla-объект"
возврат:
"Vla-объект" - если ооблако
nil - если нет
__________________
apel.fas
Просмотров: 114327
 
Непрочитано 09.11.2007, 15:33
#2
Кулик Алексей aka kpblc
Moderator

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


Идеи ruCAD'a живут и побеждают
P.S. объект, созданный _revcloud, является обычной полилинией, даже без РД или словарей А ориентироваться только на то, что там дуговые сегменты, я б не рискнул.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.11.2007, 16:42 Про объект созданный _revcloud
#3
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Если сделать круг, то он будет объектом Circle b у него только 4 ручки. Если сделать круг из двух дуг, то ручек будет 4, но объект станет Poliline.
Очень не маловажный факт, что создание полилинии из дуг через _revcloud никогда не дает создать несколько дуг с одинаковыми координатами центра дуги. Поэтому, если объект состоит из дуг и их центры не лежат в одних координатах - это облако и не важно чем оно сделано.
Supermax вне форума  
 
Непрочитано 09.11.2007, 16:44
#4
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Э-э, VVA, зачем замкнутость проверяешь? Можно и не замкнутую _revcloud нарисовать.
Supermax вне форума  
 
Непрочитано 09.11.2007, 17:28
#5
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


С учетом замечаний. Revclod'ом считается
1. LW полилиния
2. со всеми дуговыми сегментами
3. Координаты центров этих сегментов не совпадают
4. кривизна дуговых сегментов одинакова как по знаку, так и численно

Код:
[Выделить все]
;| ====== IsRevClode ==========
* Функция определяет, отрисована ли полилиния командой _Revcloud
* Полилиния считается отрисованной командой  _Revcloud если:
  1. это LW полилиния
  2. все сегменты полилинии дуговые
  3. координаты центров этих сегментов не совпадают
  4. кривизна дуговых сегментов одинакова как по знаку, так и численно
Аргументы:
 pl - имя (ENAME) или объект (VLA-OBJECT) полилинии
Возврат:
 T - если полилиния удовдетворяет перечисленным условиям
 nil - во всех других случаях
Пример использования
(IsRevcloud (car(entsel))) 
|;
(defun IsRevcloud ( pl / st-en-bulge->center ed crs bulge_list bulge_log center)
;| Вспомогательня ф-ция  st-en-bulge->center
* Автор Пастух
* Опубликована: http://www.autocad.ru/cgi-bin/f1/board.cgi?t=37164rO
* Назначение
* Получает координаты центра дуги, заданной точками начала, конца и величиной выпуктости (bulge).
* При этом, положение точки центра определяется так, чтобы обход начальной, конечной точек дуги и
* полученной точки центра происходил в направлении против часовой стрелки.
Аргументы:
Point[list] - точка начала сегмента
      p2 = Point[list] - точка конца сегмента
st - Point[list] - двумерная точка начала дуги,
en - Point[list] - двумерная точка конца дуги,
bulg - тангенс 1/4 центрального угла дуги (bulge).
Возврат:
двумерные координаты точки центра.
nil, если совпадают точки начала и конца дуги.
nil, если выпуклость задана равной нулю.
|;
(defun st-en-bulge->center (st
          en
          bulg
            /
          a sina cosa 1-cosa
          b1 b2
          d d1 d2
          )
  (setq a (* (atan bulg) 4.0) sina (sin a) cosa (cos a) 1-cosa (- 1 cosa))
  (cond
    ((equal st en 1e-12) nil);
    ((equal 1-cosa 0.0 1e-12) nil);
    (T
     (setq b1 (+ (- (car en) (* (car st) cosa)) (* (cadr st) sina))
     b2 (- (cadr en) (* (car st) sina) (* (cadr st) cosa))
     d (* 2 1-cosa)
     d1 (- (* b1 1-cosa) (* b2 sina))
     d2 (+ (* b2 1-cosa) (* b1 sina))
     );
     (list (/ d1 d) (/ d2 d));
    );
  ); end cond.
); end defun.
  
(and
  (if (eq (type pl) 'VLA-OBJECT)
   (setq pl (vlax-vla-object->ename pl))
   pl
    )
(wcmatch (cdr(assoc 0 (setq ed (entget pl)))) "LWPOLYLINE")
(setq ed (entget pl))
(setq crs (mapcar 'cdr (vl-remove-if-not (function (lambda (x) (= 10 (car x)))) ed)))
(setq bulge_list (mapcar 'cdr (vl-remove-if-not '(lambda(x)(= (car x) 42)) ed)))
(if (= (logand (cdr(assoc 70 ed)) 1) 1)
  (setq crs (append crs (list (car crs))))
  (setq bulge_list (reverse(cdr(reverse bulge_list)))) ;_Если не замкнутая плиния, удаляем последний bulge
  )
(setq bulge_log (mapcar 'zerop bulge_list))
(not(apply 'or bulge_log)) ;_Все дуговые сегменты
(apply 'and (mapcar '(lambda(x)(equal x (car bulge_list) 1e-6)) bulge_list)) ;_Равна кривизна дуг (Тангенс 1/4 угла)
(setq center (mapcar '(lambda(st pl blg)(st-en-bulge->center st pl blg)) crs (cdr crs) bulge_list))
(not (apply 'and (mapcar '(lambda(x)(equal x (car center) 1e-6)) center))) ;_Центры дуг. сегментов не совпадают
)
  )
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 12.11.2007 в 10:17. Причина: Предложение Евгения Елпанова и Apelsinov №8
VVA вне форума  
 
Непрочитано 09.11.2007, 17:32
#6
Елпанов Евгений

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


Есть еще одна особенность "облачков".
Тангенс четверти угла, всех сегментов, всегда имеет один знак.
Елпанов Евгений вне форума  
 
Непрочитано 09.11.2007, 18:06
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


У меня получается (пока), что не только знак, но и численно равны.
Исправил №6 с учетом равенства bulge.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 09.11.2007, 18:35
#8
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,186
<phrase 1=


VVA,
огромное спасибо, я бы такого написать не смог.
просьба - объяви локальные переменные

и вообще спасибо всем за идеи.


что касается раздела - никто не высказался ни за ни против.
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 09.11.2007, 18:50
#9
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Я - за!
Только вот какие это функции будут? Я в том смысле, что функция может использовать другие функции, как большие и самодостаточные так и библиотечные. И если дело выгорит, то надо четко организовать порядок размещения этих функций.
Krieger вне форума  
 
Непрочитано 09.11.2007, 18:55
#10
Кулик Алексей aka kpblc
Moderator

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


Во-во. Помимо этого неизбежно возникнет вопрос: а что качать, как ставить, что делать, короче - чтобы добиться заявленного эффекта?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.11.2007, 19:29
#11
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,186
<phrase 1=


Цитата:
Сообщение от Krieger Посмотреть сообщение
Я - за!
Только вот какие это функции будут? Я в том смысле, что функция может использовать другие функции, как большие и самодостаточные так и библиотечные. И если дело выгорит, то надо четко организовать порядок размещения этих функций.
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Во-во. Помимо этого неизбежно возникнет вопрос: а что качать, как ставить, что делать, короче - чтобы добиться заявленного эффекта?
как я думаю:
Функции будут самые разные, кроме тех что можно отнести к программам, то есть это должны быть функции, используемые только в коде. Остальные отправляются в готовые программы.

Что касается используемых в этих функциях функций, то они должны быть либо прописаны прямо в теле функции, либо даны отдельно, опять же в этом разделе.

Я понимаю что все это потребует,во первых, четких правил написания функций, во вторых, четких правил их именования. И ,соответственно, системы контроля всего этого дела.

Что касается вопросов "а что качать, как ставить, что делать" - то этого не будет, т.к. тем, у кого такие вопросы возникают, нужно в Готовые программы. Ну и ,соответственно, должно быть четкое описание аргументов функции и возвращаемого значения.
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 09.11.2007, 19:46
#12
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


>Apelsinov №8 Оформлю в понедельник
Как пример, в коде выше используется ф-ция st-en-bulge->center, которая вычисляет центр дугового сегмента по координатам начала, конца и кривизне (bulge)
Если ее нет в готовых ф-циях, то
1. добавить
2. объявить локальной в IsRevClode
Это я к тому, что человек, размещающий свою функцию вынужден будет выкладывать и другие свои использующиеся ф-ции. Переписывать ее с учетом опубликованных здесь вряд ли будет. И если проект пойдет, то рыскать по, например, 200 опубликованным ф-циям не будет тоже.
Как вариант, можно поступать так:
1. Основную ф-цию с подробным описанием что делает, что на входе, что на выходе, пример использования, выкладывает ввиде кода (чтобы поисковиками индексировалось)
2. Остальные сервисные ф-ции выкладываются ввиде атачмента (zip, rar, lsp). Благо этот форум позволяет это делать.
Возможно, при достаточном накоплении ф-ций понадобится сервис, позволяющий из всех опубликованных постов в Готовых Функциях отавить те, в которых встречается "полилиния" или что-то в этом роде. Чтобы отфильтровать.
Вот мои мысли вслух
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 09.11.2007, 20:21
#13
ShaggyDoc

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


Предложение Apelsinov поддерживаю. Вполне возможно создать такую библиотеку, назвав, например, DWGruLib. Сам готов отдать в нее все.

Это должна быть именно библиотека функций, а не программ. Библиотека должна быть в виде одного автозагружаемого FAS-файла. Именно один FAS, а не куча LSP. В этом случае все функции доступны друг другу.

FAS нужен для конечных пользователей. LISP нужны для авторов. Авторов может быть много, но лучше ограниченное количество - чтобы не загубить идею "колхозом". Здесь я имею ввиду, что компилироваться должен только проект из авторских вариантов, лучше всего одним человеком - координатором. Но исходники могут быть доступны для изучения всем. Не возбраняется и дополнять, и предлагать улучшения, но приниматься к действию все должно координаторами.

Организация такой билиотеки давно у меня продумана (и испытана на практике) после десятка лет мучений со множеством вариантов. Изложено в "САПР на базе AutoCAD - как это делается". За последние годы особых изменений в концепции нет.

Кроме FAS могут быть и дополнительные файлы, например COM-dll. Они не зависят от версии AutoCAD и могут быть в скомпилированном виде.

Однако это дело трудоемкое. Нужна большая организационная работа. Да и легче сказать "надо документировать", чем сделать. Вот у меня на сей момент имеется 1728 функций, включая 3D. Возьмется кто-нибудь по ним HELP составить в минимальном стандартном объеме?

А еще надо и контроль версий вести, и коды синхронизировать, да много что надо. Постоянно для "простых" пользователей выкладывать инсталляцию библиотеки.

Если соберется команда, готовая реально очень много работать на голом энтузиазме, готов передать все, что имеется.
ShaggyDoc вне форума  
 
Непрочитано 10.11.2007, 10:15
#14
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Отличное предложение!
Что подобное сделано здесь http://www.cadforyou.spb.ru/index.ph...functions_page, но на этом форуме наверняка можно сделать во много раз лучше...
CB вне форума  
 
Непрочитано 10.11.2007, 11:07
#15
Admin
Administrator


 
Регистрация: 21.08.2003
Сообщений: 4,407


Посмотрите на почивший autolisp.ru
Возможно на его основе можно будет сделать библиотеку, главное знать что делать
Admin вне форума  
 
Непрочитано 10.11.2007, 11:33
#16
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Библиотека должна быть в виде одного автозагружаемого FAS-файла. Именно один FAS, а не куча LSP. В этом случае все функции доступны друг другу.
Вариант с FAS-файлом - несерьёзен, лучше уж собирать проект из кучи лиспов и компилировать в один VLX-файл со всеми почестями
Евгений А. вне форума  
 
Непрочитано 10.11.2007, 11:46
#17
Кулик Алексей aka kpblc
Moderator

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


Не "что", я думаю, а "как" - основной вопрос. Как именовать функции, как отслеживать изменения, как определять авторство, как рассылать обновления... Жалко, что я "САПР на базе" на работе оставил.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.11.2007, 16:15
#18
ShaggyDoc

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


Цитата:
Сообщение от Евгений А. Посмотреть сообщение
Вариант с FAS-файлом - несерьёзен, лучше уж собирать проект из кучи лиспов и компилировать в один VLX-файл со всеми почестями
Вот сразу пример, как можно все загубить, не приступив. "Серьёзное" возражение "Вариант с FAS-файлом - несерьёзен". Очень "обоснованно".

А знаете, сколькими байтами отличается FAS от VLX? Если в него не включаются другие файлы, например DCL?

FAS компилируется из проекта, в который при компиляции собираются множество LSP.

Для библиотеки функций общего применения нужен именно FAS. Безо всяких "отдельных пространств имен".

Конечные программы по желанию авторов могут компилироваться в VLX.

Однако это технические детали. Организация дела гораздо сложнее. Библиотека может превратиться и в никому не нужную помойку. Есть такой у меня опыт участия в больших открытых проектах. Библиотеку Jedi VCL с трудом довели до "товарного" вида почти за 10 лет после начального демократичного и либерального периода.
ShaggyDoc вне форума  
 
Непрочитано 10.11.2007, 18:24 FAS is cool
#19
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Кстати если интересно я 3-мя руками за
а еще интересный: плюс можно спокойно использовать
FAS для проектов на VBA получая через пользовательские
переменные USERxx нужные значения вместо того чтобы
на чистом VBA создавать громоздкие классы и тд
fixo вне форума  
 
Непрочитано 10.11.2007, 19:42
#20
Кулик Алексей aka kpblc
Moderator

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


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как связать две функции Holon Программирование 11 30.07.2007 13:32
Имя Layout'а из результата функции vla-get-activelayout kp+ Программирование 4 16.08.2005 07:58
Странности функции rtos FWA Программирование 2 16.02.2005 11:37