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

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

Генерация GUID

Ответ
Поиск в этой теме
Непрочитано 04.05.2011, 09:34 #1
Генерация GUID
Игорь Костюкович
 
Минск
Регистрация: 31.07.2009
Сообщений: 40

Собственно, стоит задача автоматического присвоения GUID примитивам чертежа. Всем поголовно. Может, кто-нибудь уже решал задачу генерации GUID на LISPе? Не хочется изобретать велосипед...
Да что там греха таить - не хочется изобретать... :-)
Для справки: GUID
__________________
Там всё есть для счастья, меня там только нет,
Так это значит, что я там - буду!

Последний раз редактировалось Игорь Костюкович, 04.05.2011 в 09:39.
Просмотров: 9118
 
Непрочитано 04.05.2011, 10:49
1 | #2
Елпанов Евгений

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


По сути, метка любого примитива, это и есть guid...
Могу посоветовать, исходя из версии самого молодого из используемых акадов, выбери максимальную длину метки, а в остальные поля добавляй метку времени создания чертежа.

ps. метка уникальна только в данном чертеже!
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 04.05.2011, 10:59
#3
Игорь Костюкович


 
Регистрация: 31.07.2009
Минск
Сообщений: 40


Евгений, огромное спасибо за совет. Но...
Цитата:
ps. метка уникальна только в данном чертеже!
У меня же задача - присвоить GUID примитивам _многих_ (порядка 700) чертежей. Пардон, в первом своём сообщении явно не прозвучал этот момент...
__________________
Там всё есть для счастья, меня там только нет,
Так это значит, что я там - буду!
Игорь Костюкович вне форума  
 
Непрочитано 04.05.2011, 11:08
1 | #4
Сергей Дубина


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


а имена файлов совпадают?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Автор темы   Непрочитано 04.05.2011, 11:13
#5
Игорь Костюкович


 
Регистрация: 31.07.2009
Минск
Сообщений: 40


Сергей Дубина, намёк понял :-)
Разные, естественно. Правда, похожи, ибо сформированиы по определённым правилам, посему нужно внимательно посмотреть, как это может повлиять на генерацию...
__________________
Там всё есть для счастья, меня там только нет,
Так это значит, что я там - буду!
Игорь Костюкович вне форума  
 
Непрочитано 04.05.2011, 11:48
1 | #6
hwd

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


lisp-функция, написанная на .net (в .net есть специальный класс, для работы с GUID - им и воспользовался):
Код:
[Выделить все]
[LispFunction("NewGUID")]
public object NewGUID(ResultBuffer rb) {            
    return new TypedValue(5005, Guid.NewGuid().ToString());            
}
или ещё проще:
Код:
[Выделить все]
[LispFunction("NewGUID")]
public object NewGUID(ResultBuffer res) {
    return Guid.NewGuid().ToString();       
}
проверял в AutoCAD 2009 - работают оба варианта.



компилируешь показанный выше .net-код под свою версию AutoCAD, загружаешь полученную библиотеку командой _NetLoad и используешь функцию NewGUID в своём Lisp-коде.

п.с. Если топикстартер использует версию AutoCAD 2009 x86 - могу выложить скомпилированную готовую библиотеку (др. версий AutoCAD у меня сейчас не установлено, поэтому скомпилировать под них на данный момент нет возможности). Однако предупреждаю, что использование этой библиотеки привяжет lisp-код к конкретной версии автокада (той, под которую скомпилирован мой код), поскольку .net-плагины зависят от версии AutoCAD.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 04.05.2011 в 12:34.
hwd вне форума  
 
Автор темы   Непрочитано 04.05.2011, 12:37
#7
Игорь Костюкович


 
Регистрация: 31.07.2009
Минск
Сообщений: 40


hwd, спасибо.
Но прошу объяснить, что есть
Цитата:
компилируешь показанный выше .net-код под свою версию AutoCAD
?
Увы, я, кроме LISPа, другими языками не владею...

Offtop: Владею немецким языком. Взят в плен в 1944 под Витебском... (с) не моё
__________________
Там всё есть для счастья, меня там только нет,
Так это значит, что я там - буду!
Игорь Костюкович вне форума  
 
Непрочитано 04.05.2011, 12:39
1 | #8
hwd

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


Цитата:
Сообщение от Игорь Костюкович Посмотреть сообщение
Но прошу объяснить, что есть
Понял. Версия автокада какая? Не помешает то, что написано в примечаниях касательно "привязки к версии автокада"?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 04.05.2011, 12:46
#9
Игорь Костюкович


 
Регистрация: 31.07.2009
Минск
Сообщений: 40


Использую:
AutoCAD Map 3D версий:
2004
2009
2011
__________________
Там всё есть для счастья, меня там только нет,
Так это значит, что я там - буду!
Игорь Костюкович вне форума  
 
Непрочитано 04.05.2011, 12:57
1 | #10
hwd

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


Цитата:
Сообщение от Игорь Костюкович Посмотреть сообщение
Использую:
AutoCAD Map 3D версий:
2004
2009
2011
1. Могу скомпилировать под AutoCAD 2009 x86. Предполагаю, что библиотека будет работать и в AutoCAD Map 2009 x86, но не утверждаю (проверять нужно).
2. Под 2011 код нужно отдельно компилировать (это делается быстро, но на машине должен быть установлен AutoCAD 2011 или ObjectARX 2011). Код функции я выложил выше - если у кого установлен 2011, возможно тебе откомпилируют его под эту версию и выложат, но не факт.
3. Под 2004 - если честно, я даже не в курсе, использует ли вообще эта версия AutoCAD платформу .Net Framework, а если использует, то какую именно версию...
Если использует - тогда то же самое, что и в п.2.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 04.05.2011, 13:26
1 | #11
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
3. Под 2004 - если честно, я даже не в курсе, использует ли вообще эта версия AutoCAD платформу .Net Framework, а если использует, то какую именно версию...
Не использует. Поддержка .NET в AutoCAD появилась в AutoCAD 2005, а атрибут [LispFunction()] поддерживается начиная с AutoCAD 2007.
Александр Ривилис вне форума  
 
Непрочитано 04.05.2011, 13:36
1 | #12
hwd

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


Скомпилировал под AutoCAD 2009 x86/x64. См. прикреплённый файл. Библиотека загружается командой _NETLOAD. Lisp-функция называется "NewGUID". Как вызывается - знаешь, раз пишешь на Lisp'е.

p.s. На компьютере должен быть установлен .Net Framework 3.5 SP1.

На тот случай, если тебе всё же кто-то надумает помочь скомпилировать под AutoCAD 2011 - выкладываю полный код cs-файла:
Код:
[Выделить все]
using System;
//Подключаем ссылки на библиотеки AutoCAD
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;

namespace AdminCAD.LispFunctions {

    /// <summary>
    /// Класс, в котором определены различные Lisp-функции. Эти функции могут использоваться
    /// в Lisp-программах, которые, однако будут привязаны к конкретной версии AutoCAD, поскольку
    /// настоящая библиотека имеет такую зависимость. Т.о. данный код нужно компилировать 
    /// под каждую версию AutoCAD, в которой планируется использовать lisp-код, в теле которого
    /// используются функции, определённые в составе текущей .net-библиотеки.
    /// </summary>
    public sealed partial class LispFunctions {

        /// <summary>
        /// Lisp-функция, генерирующая новый GUID
        /// </summary>
        /// <param name="res">В качестве параметра должен передаваться 
        /// экземпляр ResultBuffer (в коде он не используется, но его наличие требует AutoCAD)</param>
        /// <returns>Сгенерированный GUID возвращается в виде строки</returns>
        [LispFunction("NewGUID")]
        public object NewGUID(ResultBuffer res) {
            return Guid.NewGuid().ToString();
        }
    }
}
Вложения
Тип файла: rar LispLibs.rar (3.7 Кб, 40 просмотров)
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 04.05.2011 в 14:17.
hwd вне форума  
 
Непрочитано 04.05.2011, 13:54
1 | #13
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Для AutoCAD 2011.
Вложения
Тип файла: zip LispLibs2011.zip (2.2 Кб, 41 просмотров)
Александр Ривилис вне форума  
 
Непрочитано 04.05.2011, 13:58
1 | #14
Сергей Дубина


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


Цитата:
Сообщение от hwd Посмотреть сообщение
использует ли вообще эта версия AutoCAD платформу .Net Framework
Вот это я и имел ввиду, про то что люди не апгрейдятся, а ты мне про ДОС.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 04.05.2011, 14:00
#15
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Вот это я и имел ввиду, про то что люди не апгрейдятся, а ты мне про ДОС.
ты о чём? я дал свой вариант решения. Можешь предложить другой, если имеешь.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 04.05.2011, 14:32
#16
Игорь Костюкович


 
Регистрация: 31.07.2009
Минск
Сообщений: 40


Огромное спасибо всем принявшим участие.
hwd и Александру Ривилису, отдельная благодарность.

ps: про апгрейд: не апгрейдится софт, потому что не апгрейдится хард, потому что с финансированием ситуация очень хард...
__________________
Там всё есть для счастья, меня там только нет,
Так это значит, что я там - буду!
Игорь Костюкович вне форума  
 
Непрочитано 04.05.2011, 14:34
1 | #17
hwd

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


Всё нормально, заработало?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 04.05.2011, 14:55
1 | #18
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Зачем ради 1 guid'а столько гемора - по первой-же ссылке в google нашел com:
Код:
[Выделить все]
 (vl-load-com)
((lambda (script) (vlax-get-property script 'Guid)) 
 (vlax-create-object "Scriptlet.TypeLib"))
и никаких компиляций и пр. - тем более человек на лиспе пишет.
p.s. не намного длинней _netload...
p.p.s хотя чего это я -
Код:
[Выделить все]
 (vlax-get-property (vlax-create-object "Scriptlet.TypeLib") 'Guid)
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 04.05.2011 в 15:18.
Дима_ вне форума  
 
Автор темы   Непрочитано 04.05.2011, 14:56
#19
Игорь Костюкович


 
Регистрация: 31.07.2009
Минск
Сообщений: 40


hwd, ещё раз спасибо. Всё работает... как часы.
Дима_, и Вам спасибо. Тоже работает... как часы.
__________________
Там всё есть для счастья, меня там только нет,
Так это значит, что я там - буду!
Игорь Костюкович вне форума  
 
Непрочитано 04.05.2011, 15:04
1 | #20
Сергей Дубина


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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение

Цитата:
Сообщение от hwd
использует ли вообще эта версия AutoCAD платформу .Net Framework

Вот это я и имел ввиду, про то что люди не апгрейдятся, а ты мне про ДОС.
про это: http://forum.dwg.ru/showpost.php?p=743465&postcount=40
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 04.05.2011, 22:05
1 | #21
hwd

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Код:
[Выделить все]
 (vlax-get-property (vlax-create-object "Scriptlet.TypeLib") 'Guid)
респект, снимаю шляпу
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 04.05.2011, 22:13
#22
gomer

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


Цитата:
Сообщение от hwd Посмотреть сообщение
респект, снимаю шляпу
тынц
gomer вне форума  
 
Непрочитано 04.05.2011, 22:37
#23
hwd

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


дорога ложка к обеду, gomer...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 04.05.2011, 23:20
#24
gomer

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


я просто уточнил источник...
gomer вне форума  
 
Непрочитано 04.05.2011, 23:48
#25
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839



неправда - у меня был другой источник (там вроде-бы на дльфи было - но какая нафиг разница откуда com вызвать)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.05.2011, 00:07
#26
gomer

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
неправда
Сегодня совсем голова не работает... всем сорри
gomer вне форума  
 
Непрочитано 05.05.2011, 21:08
#27
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Для коллекции. По ссылке из #22 VovKa опубликовал еще один генератор
Код:
[Выделить все]
(defun vk_RandNum (/ Mod Mult Inc Rand)
    (or *vk_RandSeed* (setq *vk_RandSeed* (getvar "DATE")))
    (setq Mod           65536
          Mult          25173
          Inc           13849
          *vk_RandSeed* (rem (+ (* Mult *vk_RandSeed*) Inc) Mod)
          Rand          (/ *vk_RandSeed* Mod)
    )
)
(defun vk_Dec2Hex (Dec /)
    (if (< Dec 10)
        (itoa Dec)
        (if (> Dec 15)
            (strcat (vk_Dec2Hex (/ Dec 16)) (vk_Dec2Hex (rem Dec 16)))
            (chr (+ Dec 55))
        )
    )
)
(defun vk_GenerateString (String Len / OutString)
    (setq OutString "")
    (repeat Len (setq OutString (strcat OutString String)))
    OutString
)
(defun vk_StringPadLeft (String NewLen Char /)
    (strcat (vk_GenerateString Char (- NewLen (strlen String))) String)
)
(defun vk_GenGUID (/)
    (apply
        'strcat
        (mapcar (function
                    (lambda (f)
                        (if f
                            (vk_StringPadLeft
                                (vk_Dec2Hex
                                    (fix (* (1- (expt 2 (* 4 f))) (vk_RandNum)))
                                )
                                f
                                "0"
                            )
                            "-"
                        )
                    )
                )
                '(4 4 nil 4 nil 4 nil 4 nil 4 4 4)
        )
    )
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 05.05.2011, 21:50
#28
gomer

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


Цитата:
Сообщение от VVA Посмотреть сообщение
Для коллекции
вот что то подобное я и искал на болоте... Насколько я понимаю это псевдо-guid, зато средствами AUTOLISP...
gomer вне форума  
 
Непрочитано 06.05.2011, 10:13
#29
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от VVA Посмотреть сообщение
Для коллекции. По ссылке из #22 VovKa опубликовал еще один генератор
Я бы не стал его использовать т.к. "криптостойкость" ключа ограниченна (getvar "date") т.е. ключи достаточно близкие (для разовых применений достаточно - но при "гуидации" примитивов нескольких сотен чертежей (да еще и на паралельных процессах (машинах) - а при последовательном процессе guid вобщем-то и не нужен.) - вполне возможны коллизии).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Генерация GUID



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
генерация КЭ сетки в Stark ES 09 Mavrovskiy STARK ES 1 24.02.2010 21:00
Генерация файла .dwg с web-страницы UDove Программирование 13 25.11.2009 12:27
генерация имен блоков. _nick_ AutoCAD 3 30.09.2009 17:59
Генерация в скаде. Пересечение контуров. Saha SCAD 2 26.03.2009 09:21
Препроцессор ФОРУМ. Генерация в SCAD не идет. pbykov SCAD 7 12.12.2007 12:05