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

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

Параметрическое черчение в AutolLisp с использованием базы данных чертежа

Ответ
Поиск в этой теме
Непрочитано 28.03.2008, 10:05
Параметрическое черчение в AutolLisp с использованием базы данных чертежа
Danger_pgs
 
Строительная диагностика
 
Барнаул
Регистрация: 23.02.2008
Сообщений: 24

Доброе время суток, уважаемые форумчане! Встала следующая задача, написать функции на AutoLisp для черчения примитивов и элементарных команд редактирования, т.е. альтернативу стандартным command (типа LIne, Pline, Circle, copy, mirror, move), с использованием базы данных чертежа (типа entmake). Впринципе это должно избавить от многих проблем, таких как черчение за пределами экрана (напрягает позиционировать экран на текущий объект), проблемы с привязкой, да и скорость отрисовки больших проектов увеличивается в разы... Если кто-нибудь занимался подобными разработками, откликнитесь...

Последний раз редактировалось Danger_pgs, 28.03.2008 в 11:04.
Просмотров: 7593
 
Непрочитано 30.03.2008, 12:05
#21
Евгений А.

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


Зато человек хоть поймёт разницу между "функциями лиспа" и "командами Автокада". И не будет потом писать такой бред:
Цитата:
Те кто занимался программным черчением прекрасно знают о недостатках классических функций лиспа, таких как бесконечное зумирование нужного участка чертежа, чтоб лисп не накасячил с привязкой, ведь по сути стандартные команды лира эмулируют работу с курсором мыши и так далее, т.е. при достаточно большом наполнении чертежа, щечёк по какому-либо объекту не гарантирует нам что выделится именно ОН!!!
Евгений А. вне форума  
 
Непрочитано 31.03.2008, 04:16
#22
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


[quote=Кулик Алексей aka kpblc;226781> Лентяй : Вай-вай, как нехорошо ошибаться-то... Вместе же пили... ПолЕщук все же. Николай Николаевич.[/QUOTE]
Я книжку НН - очень ЛЮБЛЮ (гусары, молчать!) . А Любовь, как известно, ПолИщук. Вот и путаю время от времени...
Лентяй вне форума  
 
Непрочитано 31.03.2008, 08:12
#23
Кулик Алексей aka kpblc
Moderator

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


> Лентяй: "тады, канешна, да, тады, канешна, ой".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 31.03.2008, 23:37
#24
Danger_pgs

Строительная диагностика
 
Регистрация: 23.02.2008
Барнаул
Сообщений: 24
<phrase 1=


Спасибо за плддержку... Знаете ребята, если честно, то ответ на свой вопрос я получил!!! И это самое главное!!! Сдам я диплом или не сдам - это уже другой вопрос... Просто хочется сказать, что все вы далеко не сразу стали проффи в своём деле... а некоторые до сих пор таковыми не являются... Странная закономерность: те кто реально могут плмочь, они помогают без лишней трепотни (в крайнем случае, здоровая критика)... а остальные... просто в очередной раз понимаешь простейшие истины жизни...
Всем спасибо.
Danger_pgs вне форума  
 
Непрочитано 31.03.2008, 23:50
#25
Кулик Алексей aka kpblc
Moderator

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


Цитата:
<...>отрисвка стропильной конструкции со всеми схемаи и узлами в автокаде<...>
Еще раз перечитал #5. Задача в полном объеме практически нереализуема ИМХО, поскольку надо:
  1. выяснить объем данных, необходимых для расчета стропильной конструкции.
  2. разрисовать все диалоги (а это уже dcl как минимум).
  3. обработать и проработать запрос у пользователя некоторых исходных данных для прорисовки.
  4. избежать ошибок ввода - как намеренных, так и случайных.
  5. создать (опять же, программно, избегая вариантов "отсутствия фонта", например) текстовый и размерный стили.
  6. скачать или самостоятельно проработать вопрос загрузки типов линий.
  7. научиться программно создавать блоки, используемые в проекте.
  8. провести полное тестирование каждого этапа программы
  9. обеспечить гарантированную загрузку всех необходимых лиспов (да и не только их).
Это только по первым прикидкам, не вникая серьезно в логику расчета. Универсальную программу разработать невозможно в обозримые сроки. А для строго определенных условий - это по меньшей мере недостаточно. Даже для курсовой.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.04.2008, 05:49
#26
Krieger

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


Цитата:
  1. выяснить объем данных, необходимых для расчета стропильной конструкции.
  2. разрисовать все диалоги (а это уже dcl как минимум).
  3. обработать и проработать запрос у пользователя некоторых исходных данных для прорисовки.
  4. избежать ошибок ввода - как намеренных, так и случайных.
  5. создать (опять же, программно, избегая вариантов "отсутствия фонта", например) текстовый и размерный стили.
  6. скачать или самостоятельно проработать вопрос загрузки типов линий.
  7. научиться программно создавать блоки, используемые в проекте.
  8. провести полное тестирование каждого этапа программы
  9. обеспечить гарантированную загрузку всех необходимых лиспов (да и не только их).
И это, по-моему, самое простое в данной задаче.
Куда сложнее будет выделить виды ферм, а для каждого вида ферм выделить типовые узлы. Законструировать узел, зная только сечения приходящих элементов, сварные швы (это уже усилия надо знать, т.е. расчетчик выполнить), надо будет запихать все конструктивные требования... В общем, там мороки достаточно будет. Для диплома, может быть, даже одного алгоритма всего этого хватит, а запрограммировать это уже дело десятое (можно и на сторону отдать профессионалу). При этом, не знаю где это пригодится, т.к. типовые фермы наверно только в простейших промках встречаются, да на курсовых. Я сколько работаю, все время архи такие вы@$оны придумают, что и вручную сложно что-то сделать.
Krieger вне форума  
 
Автор темы   Непрочитано 01.04.2008, 21:16
#27
Danger_pgs

Строительная диагностика
 
Регистрация: 23.02.2008
Барнаул
Сообщений: 24
<phrase 1=


Хотелось бы пояснить немного по теме диплома...
На самом деле, всё намного проще тема диплома звучит так: "Разработка электронной версии альбома ТСК-СК... "Деревянная стропильная конструкция под металлическую кровлю", с подготовкой чертежей повышенной степени готовности".
Если конкретно, то в этом альбоме представленно 10 монтажных схем с таблицами типоразмеров. Я накидал базу данных состоящую примерно из 30 таблиц, которые связанны между собой по ключевым полям - ответ на вопрос номер 1. Все диалоги реализованны по средством Делфи. Ошибки ввода/вывода также средствами Делфи. В программеи у пользователя запрашивается файл шаблона, либо предлагается создать свой шаблон... Создание собственного шаблона осуществляется в три этапа: сначала заполняется (средствами пользовательского интерфейса) специальный класс написанный мною, содержащий в себе методы для работы с этим классом (добавление, удаление, редактирование записей), а так же собственно, поля содержащие параметры этого шаблона. Затем данные из этого класса переписывваются в текстовый файл. Потом при помощи макроса на VBA создаём шаблон - всё это уже сделанно, причём без особых проблем. Понимаю, способ не достоин уважения, многие скажут: "Ну работал в Делфи так и делай полностью в нём", но встала проблема... работа с АвтоКадом через билиотеку типов показала ряд недостатков, основным из которых оказалась привязанность к конкретной версии автокада, работа же с объектной моделью завела меня в тупик, конкретных результатов я так и не добился (убила всю надежду низкая скорость работы). Загрузку данных о шаблоне я осуществляю примерно также.
Программно создаю текстовые, размерные стили, загружаю типы линий, создаю слои со всеми необходимыми параметрами. Есть небольшая проблемма с загрузкой шрифтов... всё понятно про *.shx и *.ttf, проблемму с этим я решил без напрягов, но не понял фишку с разницей шрифтов TrueType и Open Type, забыл но при загрузке какова-то из них средствами VBA постоянно вылетает ошибка, хотя тот и другой ttf-ые. Дальше больше... Сейчас в разработке: сопоставление различных элементов чертежа (основные, осевые, размеры и т.д.), соответствующим им слоям, типам линий, текстовым стилям... А также задание масштабных коэффициентов Абсолютно непонятной для меня задачей остаётся только компановка конечного комплекта чертежей... вот енто будет попа... Смотрел алгоритмы основанные на рекурсии, впринципе понятно, но до реализации ещё далековато!
Если есть каки-либо предложения, буду рад!!!
Danger_pgs вне форума  
 
Автор темы   Непрочитано 01.04.2008, 21:34
#28
Danger_pgs

Строительная диагностика
 
Регистрация: 23.02.2008
Барнаул
Сообщений: 24
<phrase 1=


Пожалуйста гляньте текст, не претендую на оскар, но работает, с удовольствием послушаю предложения по оптимизации кода:

Создание шаблона: читаем из файла, создаём (не понял, можно ли непосредственно прочитать из файла булевское значение?).

Код:
[Выделить все]
Sub CreateShablon()
  Close #1
  Open "D:\Temp\OutputDataFile.dat" For Input As #1
    Input #1, temp
'Типы линий
    Input #1, LinetypesCount
    If LinetypesCount = 0 Then
      Input #1, temp
      GoTo 1
    End If
    For i = 1 To LinetypesCount
      Input #1, LineTypeName
      Input #1, temp
      ThisDrawing.Linetypes.Load LineTypeName, "%appdata%\Autodesk\AutoCAD 2004\R16.0\enu\Support\acad.lin"
    Next i
'Слои
1
    Input #1, layersCount
    If layersCount = 0 Then
      Input #1, temp
      GoTo 2
    End If
    For i = 1 To layersCount
      Input #1, LayerName
      Input #1, OnOff_
      If OnOff_ = "True" Then OnOff = True Else OnOff = False
      Input #1, Freeze_
      If Freeze_ = "True" Then Freeze = True Else Freeze = False
      Input #1, Linetype
      Input #1, LineWidth
      Input #1, Lok_
      If Lok_ = "True" Then Lok = True Else Lok = False
      Input #1, Plotin_
      If Plotin_ = "True" Then Plotin = True Else Plotin = False
      Input #1, temp
      Dim LayerObj As AcadLayer
      Set LaeyrObj = ThisDrawing.Layers.Add(LayerName)
        LaeyrObj.LayerOn = True
        If LayerName <> "0" Then LaeyrObj.Freeze = Freeze
        LaeyrObj.Linetype = Linetype
        LaeyrObj.Lineweight = LineWidth
        LaeyrObj.Lock = Lok
        LaeyrObj.Plottable = Plotin
    Next i
'Текстовые стили
2
    Input #1, TextStyleCount
    If TextStyleCount = 0 Then
      Input #1, temp
      GoTo 3
    End If
    For i = 1 To TextStyleCount
      Input #1, TextStyleName
      Input #1, FontNam
      Input #1, TextHeight
      Input #1, TextWidth
      Input #1, TextOblic
      Input #1, temp
      Dim TextStyleObj As AcadTextStyle
      Set TextStyleObj = ThisDrawing.TextStyles.Add(TextStyleName)
        TextStyleObj.fontFile = FontNam
        TextStyleObj.Height = TextHeight
        TextStyleObj.Width = TextWidth
        TextStyleObj.ObliqueAngle = TextOblic
    Next i
'Размерные стили
3
    Input #1, DimStyleCount
    If DimStyleCount = 0 Then
      Input #1, temp
      GoTo 4
    End If
    For i = 1 To DimStyleCount
      Input #1, DimStyleName
      Input #1, temp
      Dim dimStyle As AcadDimStyle
      Set dimStyle = ThisDrawing.DimStyles.Add(DimStyleName)
    Next i
4
  Close #1
End Sub
Создание файла с исходными данными для передачи в прогу на делфи...

Код:
[Выделить все]
Sub CreateAfile()
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile("D:\temp\InputDataFile.dat", True)
    'Загрузка параметров слоёв
    a.WriteLine ("**********Layers**********")
    a.WriteLine (ActiveDocument.Layers.Count)
    For i = 0 To ActiveDocument.Layers.Count - 1
      a.WriteLine (ActiveDocument.Layers.Item(i).Name)
      a.WriteLine (ActiveDocument.Layers.Item(i).LayerOn)
      a.WriteLine (ActiveDocument.Layers.Item(i).Freeze)
      a.WriteLine (ActiveDocument.Layers.Item(i).Linetype)
      a.WriteLine (ActiveDocument.Layers.Item(i).Lineweight)
      a.WriteLine (ActiveDocument.Layers.Item(i).Lock)
      a.WriteLine (ActiveDocument.Layers.Item(i).Plottable)
      If i < ActiveDocument.Layers.Count - 1 Then a.WriteLine ("***Next***")
    Next i
    'Загрузка типов линий
    a.WriteLine ("**********LineTypes**********")
    a.WriteLine (ActiveDocument.Linetypes.Count - 3)
    For i = 3 To ActiveDocument.Linetypes.Count - 1
      a.WriteLine (ActiveDocument.Linetypes.Item(i).Name)
      If i < ActiveDocument.Linetypes.Count - 1 Then a.WriteLine ("***Next***")
    Next i
    'Загрузка размерных стилей
    a.WriteLine ("***********Dimencions**********")
    a.WriteLine (ActiveDocument.DimStyles.Count)
    For i = 0 To ActiveDocument.DimStyles.Count - 1
      a.WriteLine (ActiveDocument.DimStyles.Item(i).Name)
      If i < ActiveDocument.DimStyles.Count - 1 Then a.WriteLine ("***Next***")
    Next i
    'Загрузка текстовых стилей
    a.WriteLine ("**********TextStyles**********")
    a.WriteLine (ActiveDocument.TextStyles.Count)
    For i = 0 To ActiveDocument.TextStyles.Count - 1
      a.WriteLine (ActiveDocument.TextStyles.Item(i).Name)
      a.WriteLine (ActiveDocument.TextStyles.Item(i).fontFile)
      a.WriteLine (ActiveDocument.TextStyles.Item(i).Height)
      a.WriteLine (ActiveDocument.TextStyles.Item(i).Width)
      a.WriteLine (ActiveDocument.TextStyles.Item(i).ObliqueAngle)
      If i < ActiveDocument.TextStyles.Count - 1 Then a.WriteLine ("***Next***")
    Next i
    a.Close
End Sub
Danger_pgs вне форума  
 
Автор темы   Непрочитано 01.04.2008, 21:38
#29
Danger_pgs

Строительная диагностика
 
Регистрация: 23.02.2008
Барнаул
Сообщений: 24
<phrase 1=


Например, в Делфи применение оператора абсолютного перехода GoTo я вляется правилом плохого тона... :-( Как с этим осбтоят дела в VBA? До этого последний раз работал в Бейсике лет 6 назад(в школе ещё), тогда использование GoTo было нормой и применялось давольно широко. Что-то поменялось?
Danger_pgs вне форума  
 
Непрочитано 01.04.2008, 22:05
#30
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Такое впечатление, что нас надули.
Profan вне форума  
 
Непрочитано 01.04.2008, 22:51
#31
Кулик Алексей aka kpblc
Moderator

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


Ну если работаешь под Delphi, так из-под него и обращайся к объекту AutoCAD.Application, работай сколько вздумается. AutoCAD корректно поддерживает СОМ-модель.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 02.04.2008, 08:38
#32
Danger_pgs

Строительная диагностика
 
Регистрация: 23.02.2008
Барнаул
Сообщений: 24
<phrase 1=


Вы предлагаете всю отрисовку производить через AutoCAD.Application? Просто есть печальный опыт, полторы недели убил на разработку этой задачи и поллучил в результате ровным счётом НИЧЕГО!!! Ясно, что плохому танцору... Сейчас тупо нет времени, а вообще тема очень интересная, как только немного разгружусь, обязательно доведу начатое до ума. Все с чего-то начинали... На данный момент, пытаюсь двигаться по пути наименьшего сопротивления =). Тем паче, что работа носит не комерческий характер и ни к чему не обязывает (разве что работоспособность)!
Danger_pgs вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Параметрическое черчение в AutolLisp с использованием базы данных чертежа



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базы данных и AutoCad tokhot AutoCAD 16 18.05.2018 13:37
Нужен опыт создания базы данных кухонной мебели:) Таня. AutoCAD 19 15.02.2008 17:43
Загрузка параметров дин. блоков из базы данных Дима_ Прочее. Программное обеспечение 11 04.09.2007 17:03
Создание базы данных стандартных изделий для Автокад Владимир В Прочее. Программное обеспечение 4 23.03.2005 10:36