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

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

Построение фигуры через AutoLISP

Ответ
Поиск в этой теме
Непрочитано 17.02.2008, 18:22 #1
Построение фигуры через AutoLISP
severnet
 
Регистрация: 17.02.2008
Сообщений: 5

Программно реализовать построение одного из условных обозначений в среде AutoCAD с помощью языка AutoLISP (VisualLISP). Ввод входных данных организовать через командную строку AutoCAD, предусмотреть проверку вводимых данных на допустимость. Подскажите пожалуйста, как это сделать? Очень срочно!
Просмотров: 13021
 
Непрочитано 17.02.2008, 18:40
#2
Profan


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


Это курсовая работа по программированию?
Profan вне форума  
 
Автор темы   Непрочитано 17.02.2008, 18:43
#3
severnet


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


Нет, лабораторная.
severnet вне форума  
 
Непрочитано 17.02.2008, 19:15
#4
Profan


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


Ну, если условное обозначение представляет собой круг, то это не трудно. А какие параметры и как придется задавать в командной строке для одного из условных обозначений, к примеру, слаботочных систем? Без картинки или слайда не обойтись.
Profan вне форума  
 
Непрочитано 17.02.2008, 19:43
#5
Profan


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


Вот здесь:
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=40671vh
под своим ФИ я высказал еще некоторые свои соображения.
Profan вне форума  
 
Автор темы   Непрочитано 17.02.2008, 20:25
#6
severnet


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


Любой из этого списка:
[IMG]http://img230.**********.us/img230/3639/autocadof7.jpg[/IMG]
severnet вне форума  
 
Автор темы   Непрочитано 17.02.2008, 20:26
#7
severnet


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


Не понятно, как это реализовать через командную строку. Рисуется это просто.
severnet вне форума  
 
Непрочитано 17.02.2008, 21:04
#8
Profan


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


Цитата:
Не понятно, как это реализовать через командную строку. Рисуется это просто.
Вот именно. Дурацкая какая-то лабораторная. Видимо, для того, чтобы не придумывать абстрактную фигуру для лабораторной, и было решено использовать какой-либо символ. Однако, тут голову сломаешь не на собственно программировании, а на сочинении запросов в командной строке. Теперь представим себе, что программа попадет в руки к кому-нибудь другому, а он не имеет картинки. Кандрашка хватит. На фиг нужна такая программа в реальной жизни? Может, тут нужно расписать какие-то общие принципы?
Profan вне форума  
 
Автор темы   Непрочитано 17.02.2008, 21:16
#9
severnet


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


Если я преподу это скажу, она меня не поймет. Ну что ж.. приду с тортиком тогда.
severnet вне форума  
 
Непрочитано 17.02.2008, 21:33
#10
Profan


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


Сделай уж тогда программу с диалоговым окном. На слайде графически указать параметры, а в полях задавать числовые значения этих параметров. Это была бы жизненная задача.
В принципе, для любого из этих условных обозначений можно сделать программу с одним единственным запросом:
Код:
[Выделить все]
 
"Укажите точку вставки: "
Profan вне форума  
 
Непрочитано 17.02.2008, 22:32
#11
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun c:fig1 (/ pt)
  (vl-load-com)
  (if (= (type (setq pt
                      (vl-catch-all-apply '(lambda () (getpoint "\nЦентр <Отмена> : ")))
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
    (progn
      (entmakex (list (cons 0 "CIRCLE") (cons 10 pt) (cons 40 5.)))
      (entmakex (list '(0 . "LWPOLYLINE")
                      '(100 . "AcDbEntity")
                      '(100 . "AcDbPolyline")
                      '(90 . 4)
                      '(70 . 0)
                      '(43 . 0.0)
                      '(38 . 0.0)
                      '(39 . 0.0)
                      (cons 10 (polar pt (* pi 0.5) 5.))
                      (cons 10 (polar pt (* pi 0.25) (* 5. (sqrt 2.))))
                      (cons 10 (polar pt (* pi 1.25) (* 5. (sqrt 2.))))
                      (cons 10 (polar pt (* pi 1.5) 5.))
                      ) ;_ end of list
                ) ;_ end of entmakex
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.02.2008, 22:40
#12
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,999


Цитата:
Сообщение от Profan Посмотреть сообщение
Сделай уж тогда программу с диалоговым окном. На слайде графически указать параметры, а в полях задавать числовые значения этих параметров. Это была бы жизненная задача.
В принципе, для любого из этих условных обозначений можно сделать программу с одним единственным запросом:
Код:
[Выделить все]
 
"Укажите точку вставки: "
ГЫЫЫЫ
Хорошая програмка
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 17.02.2008, 22:47
#13
Profan


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


Так Алексей и сделал такую программу. Поскольку это условные обозначения, а не параметрические изделия, то размеры их известны. А раз так, то и отрисовать их можно программно без всяких дополнительных запросов. А в лабораторной, как я понял, должны следовать какие-то запросы в командной строке.
Profan вне форума  
 
Непрочитано 17.02.2008, 22:57
#14
Кулик Алексей aka kpblc
Moderator

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


Ха, у меня тоже есть запрос. Центра окружности
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.02.2008, 23:00
#15
Profan


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


Так хоть бы спросил для приличия диаметр круга.
Profan вне форума  
 
Непрочитано 17.02.2008, 23:24
#16
Кулик Алексей aka kpblc
Moderator

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


Profan, и не подумаю. Пример есть, числа все видны - кто хочет тот добьется.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.03.2009, 18:57
#17
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,648


Подскажите, пожалуйста, как можно оптимизировать процесс отрисовки окон и дверей?(см. вложение). Я рисую их что называется "примитивно", много времени отнимает при таком количестве. Хотелось бы так: ввожу команду1, указываю две точки (как в _rectang - в чертеже красным), а желтые линии появляются автоматически. Для окон я использую офсет в обе стороны с удалением исходника:

Код:
[Выделить все]
;;Multi OFFset to 2 side ( http://www.caduser.ru/cgi-bin/f1/board.cgi?t=31318fs&page=2)
(defun C:MOFF2 (/ d obj ent adoc *error* DelObjList ss)
  (defun *error* (msg)(princ msg)(vla-endundomark adoc))
  (vl-load-com)(setvar "CMDECHO" 0)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))) ;_ end of setq
  (if (null *OFF2*)(setq *OFF2* (abs (getvar "OFFSETDIST")))) ;_ end of if
  (if (zerop *OFF2*)(setq *OFF2* 1)) ;_ end of if
  (setq d (getvar "UNDOCTL"))
  (cond ((= d 0) (vl-cmdf "_.UNDO" "_All"))
        ((= d 3) (vl-cmdf "_.UNDO" "_Control" "_All"))
        (t nil)
  ) ;_ end of cond
  (setq d nil) (vla-startundomark adoc)
  (while (not (numberp d))
    (princ
      (strcat "\n (Слой: "
              (if *OFFLAY*
                "Текущий)"
                "Объект)"
              ) ;_ end of if
              " Величина смещения или слой объектов [Объект/Текущий] <"
      ) ;_ end of strcat
    ) ;_ end of princ
    (princ *OFF2*)(princ ">: ")
    (initget 6 "Текущий Объект Current Object _Current Object Current Object") ;_ end of initget
    (if (null (setq d (getdist)))(setq d *OFF2*)) ;_ end of if
    (cond ((= d "Object") (setq *OFFLAY* nil)) ;_Слой объекта
          ((= d "Current") (setq *OFFLAY* t)) ;_Слой текущий
          (t nil)
    ) ;_ end of cond
  ) ;_ end of while
  (setq *OFF2* d) ;_ end of setq
  (while (setq ss nil
               ss (ssget "_:L")
         ) ;_ end of setq
    (setq d '-1)
    (while (setq obj (ssname ss (setq d (1+ d))))
      (setq ent (vlax-ename->vla-object obj))
      (cond
        ((and (vlax-write-enabled-p ent)
              (vlax-method-applicable-p ent 'Offset)
         ) ;_ end of and
         (setq
           obj (append
                 (vlax-safearray->list
                   (vlax-variant-value (vla-offset ent *OFF2*))
                 ) ;_ end of vlax-safearray->list
                 (vlax-safearray->list
                   (vlax-variant-value (vla-offset ent (- 0 *OFF2*)))
                 ) ;_ end of vlax-safearray->list
               ) ;_ end of append
         ) ;_ end of setq
         (if *OFFLAY*
           (mapcar '(lambda (x) (vla-put-layer x (getvar "CLAYER")))
                   obj
           ) ;_ end of mapcar
         ) ;_ end of if
         (setq DelObjList (cons ent DelObjList))
        )
        (t (princ "\nНе удается создать объект, подобный данному: ")
           (princ (cdr(assoc 0(entget obj))))
         )
      ) ;_ end of cond
    ) ;_ end of while
  ) ;_ end of while
  (initget "Да Нет Yes No _Yes No Yes No")
  (if (= (getkword "\nУдалять исходные объекты? [Да/Нет] <Нет> : ")
         "Yes"
      ) ;_ end of =
    (mapcar '(lambda (x)
               (if (vlax-write-enabled-p x)
                 (vla-erase x)
               ) ;_ end of if
             ) ;_ end of lambda
            DelObjList
    ) ;_ end of mapcar
  ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
) ;_ end of defun
(princ "\nНаберите в командной строке MOFF2")
Может, довески к КАДу какие есть...С меня требуют именно по такому шаблону
Вложения
Тип файла: dwg
DWG 2007
Чертеж1.dwg (62.3 Кб, 2331 просмотров)

Последний раз редактировалось skkkk, 31.03.2009 в 19:03.
skkkk вне форума  
 
Непрочитано 12.05.2009, 18:33
#18
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,648


Возможно ли в принципе построение лиспом на прямоугольнике линии, соединяющей центры коротких или длинных сторон (отдельно)? Не знаю, как начать думать, чтоб до этого додуматься, но нутром чую, что можно.
Помогите, пожалуйста, кто знает
skkkk вне форума  
 
Непрочитано 12.05.2009, 19:16
#19
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,508


тебе сразу прямоугольник нужно нарисовать с перкрестием внутри или на приямоугольник нанести перекрестие?
Рyslan вне форума  
 
Непрочитано 12.05.2009, 19:55
#20
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,648


Нет, нужно два варианта: один прямая параллельна длинным сторонам и соединяет середины коротких, а второй - наоборот. (См. вложение в #17)
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Построение фигуры через AutoLISP

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

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