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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > преоброзование линии в 3d Face заданной высоты

преоброзование линии в 3d Face заданной высоты

Ответ
Поиск в этой теме
Непрочитано 30.11.2007, 15:34 #1
преоброзование линии в 3d Face заданной высоты
ilka_t
 
Москва
Регистрация: 20.01.2004
Сообщений: 154

может есть у кого нибудь лиспик, а?
лили найдутся добрые люди и напишт его?
Просмотров: 5880
 
Непрочитано 30.11.2007, 15:48
#2
Кулик Алексей aka kpblc
Moderator

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


Задавай thickness - не оно? Потому что "нормальный" лисп слишком сложным получится. А "ненормальный" лично мне писать неинтересно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.11.2007, 16:49
#3
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Задавай thickness - не оно? Потому что "нормальный" лисп слишком сложным получится. А "ненормальный" лично мне писать неинтересно.
не, так не пододет
ilka_t вне форума  
 
Непрочитано 30.11.2007, 17:24
#4
nmr


 
Регистрация: 22.08.2006
/dev/null
Сообщений: 91


вот функция (пример "ненормального" кода ) - написал когда-то, иногда пользуюсь


;;;построение на основе отрезка ВЕРТИКАЛЬНОЙ плоскости
(defun line-3dface (source_line elev / t1 t2 entmk_lst)

(setq t1 (cdr (assoc 10 (entget source_line)))
t2 (cdr (assoc 11 (entget source_line))))
(setq entmk_lst
(list (cons 0 "3DFACE")
(list 10 (car t1) (cadr t1) (nth 2 t1))
(list 11 (car t2) (cadr t2) (nth 2 t2))
(list 12 (car t2) (cadr t2) (+ elev (nth 2 t2)))
(list 13 (car t1) (cadr t1) (+ elev (nth 2 t1)))
(cons 70 10))
)
(entmake entmk_lst)
);end
;;;запуск функции
(line-3dface (car (entsel)) (getdist "Высота -->> "))
nmr вне форума  
 
Автор темы   Непрочитано 30.11.2007, 18:42
#5
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


Цитата:
Сообщение от nmr Посмотреть сообщение
вот функция (пример "ненормального" кода ) - написал когда-то, иногда пользуюсь


;;;построение на основе отрезка ВЕРТИКАЛЬНОЙ плоскости
(defun line-3dface (source_line elev / t1 t2 entmk_lst)

(setq t1 (cdr (assoc 10 (entget source_line)))
t2 (cdr (assoc 11 (entget source_line))))
(setq entmk_lst
(list (cons 0 "3DFACE")
(list 10 (car t1) (cadr t1) (nth 2 t1))
(list 11 (car t2) (cadr t2) (nth 2 t2))
(list 12 (car t2) (cadr t2) (+ elev (nth 2 t2)))
(list 13 (car t1) (cadr t1) (+ elev (nth 2 t1)))
(cons 70 10))
)
(entmake entmk_lst)
);end
;;;запуск функции
(line-3dface (car (entsel)) (getdist "Высота -->> "))
не работает почемуто ...
ilka_t вне форума  
 
Непрочитано 01.12.2007, 07:24
#6
nmr


 
Регистрация: 22.08.2006
/dev/null
Сообщений: 91


функция работает - может что-нибудь не так делаете?
(функция работает только с примитивами LINE)
nmr вне форума  
 
Непрочитано 25.12.2009, 22:03
#7
Айнар


 
Регистрация: 16.05.2007
Москау
Сообщений: 63


Уважаемые господа, а не приходилось ли вам писать программку для построения 3DFace по двум точкам основания и высоте задаваемой численно?
Айнар вне форума  
 
Непрочитано 28.06.2013, 17:38
#8
swell{d}

гадание на конечно-элементной гуще
 
Регистрация: 31.05.2006
Düsseldorf
Сообщений: 7,604


Цитата:
Сообщение от Айнар Посмотреть сообщение
Уважаемые господа, а не приходилось ли вам писать программку для построения 3DFace по двум точкам основания и высоте задаваемой численно?
я сделал для нано, но уже несколько раз ко мне обращались люди с просьбой сделать аналог под акад. у меня акада нет, может кто-нибудь попробует "допилить" ?
__________________
.: WikiЖБК + YouTube :.
swell{d} вне форума  
 
Непрочитано 28.06.2013, 23:54
#9
VVA

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


Цитата:
Сообщение от swell{d} Посмотреть сообщение
может кто-нибудь попробует "допилить" ?
Набросал по быстрому.
Код:
[Выделить все]
(defun C:LTo3DF (/ ss l1 height *error*)
;;;Line To 3DFace
  (vl-load-com)
(defun *error* (msg)
    (princ (strcat "\nError: " msg))
  (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
    (princ)
  )
  (defun 3DFace (p1 p2 p3 p4 lay)
    (entmakex (list (cons 0 "3DFACE")
                    (cons 8 lay)
                    (cons 10 p1)
                    (cons 11 p2)
                    (cons 12 p3)
                    (cons 13 p4)
              ) ;_ end of list
    ) ;_ end of entmakex
  ) ;_ end of defun
  (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  (if (setq ss (ssget "_:L" '((0 . "LINE"))))
    (progn
      (setq height (getreal "\nВысота: "))
      (setq i '-1)
      (repeat (sslength ss)
        (setq l1 (ssname ss (setq i (1+ i))))
        ((lambda (p1 p2)
           (if
             (3DFace
               p1
               p2
               (mapcar '+ p2 (list 0 0 height))
               (mapcar '+ p1 (list 0 0 height))
               (cdr (assoc 8 (entget l1)))
             ) ;_ end of 3DFace
              (entdel l1)
           ) ;_ end of if
         ) ;_ end of lambda
          (cdr (assoc 10 (entget l1)))
          (cdr (assoc 11 (entget l1)))
        )
      ) ;_ end of repeat
    ) ;_ end of progn
  ) ;_ end of if
  (princ "Готово!")
   (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  (princ)
) ;_ end of defun
(princ "\nType LTo3DF in command line")
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 29.06.2013 в 15:22. Причина: Добавлено Undo
VVA вне форума  
 
Непрочитано 29.06.2013, 00:47
1 | #10
gomer

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


Код:
[Выделить все]
 (defun c:LineTo3DFace (/ *error* catch h ss)
;;; Рев.: 1.1

  (vl-load-com)

  (defun *error* (msg)
    (if
      (and msg
	   (not	(member
		  msg
		  '("Function cancelled"
		    "Функция отменена"
		    "quit / exit abort"
		    "завершить / выйти прервать"
		    "console break"
		   )
		)
	   )
      )

       (princ
	 (strcat "\nОшибка: " msg)
       )
    )
    (princ)
  )
  (if (/= "Model" (getvar 'ctab))
    (alert
      "Создание 3МГраней имеет смысл только во вклаке Модель!"
    )
    ((lambda (doc dxf)
       (if (and
	     (setq h (getdist "\nУкажите высоту 3МГрани: "))
	     (setq ss (ssget '((0 . "LINE"))))
	   )
	 (progn
	   (vla-StartUndoMark doc)
	   (foreach en (mapcar 'entget
			       (vl-remove-if
				 (function listp)
				 (mapcar (function cadr) (ssnamex ss))
			       )
		       )
	     (if (vl-catch-all-error-p
		   (setq
		     catch ((lambda (p10 p11 f)
			      (vl-catch-all-apply
				'vla-Add3DFace
				(cons
				  (vla-get-Modelspace doc)
				  (mapcar
				    'vlax-3d-point
				    (list p10
					  p11
					  (f p11)
					  (f p10)
				    )
				  )
				)
			      )
			    )
			     (dxf 10 en)
			     (dxf 11 en)
			     (lambda (x) (mapcar '+ x (list 0 0 h)))
			   )
		   )
		 )
	       (princ "\nНе удалось создать 3МГрань")
	       (progn
		 (vla-put-Layer catch (dxf 8 en))
		 (entdel (dxf -1 en))
	       )
	     )
	   )
	   (vla-EndUndoMark doc)
	 )
       )
     )
      (vla-get-ActiveDocument (vlax-get-acad-object))
      (lambda (x y) (cdr (assoc x y)))
    )
  )

  (*error* nil)
)

Последний раз редактировалось gomer, 29.06.2013 в 14:30. Причина: апдейт 1.1
gomer вне форума  
 
Непрочитано 29.06.2013, 12:27
#11
swell{d}

гадание на конечно-элементной гуще
 
Регистрация: 31.05.2006
Düsseldorf
Сообщений: 7,604


Спасибо большое! Добавлю ссылку на эти лиспы в своей статье.
__________________
.: WikiЖБК + YouTube :.
swell{d} вне форума  
 
Непрочитано 29.06.2013, 14:49
#12
gomer

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


Следует учитывать, что программа VVA скорей всего будет быстрее на тяжелых чертежах, однако у него не прописаны метки отмены, что приводит к некоторым неудобствам. К тому же LTo3DF имеет один неприятный момент (у меня по крайней мере): сначала выводится сообщение об окончании работы, затем только рисуются 3МГрани Вставил алерт себе в программу и... наблюдаю то же самое...
gomer вне форума  
 
Непрочитано 29.06.2013, 15:23
#13
VVA

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


Цитата:
Сообщение от gomer Посмотреть сообщение
сначала выводится сообщение об окончании работы, затем только рисуются 3МГрани
Это такой глюк Автокада. Можно alert заменить на princ или alert послать в комстроку через vla-sendcommand.
PS Undo добавил, alert заменил на princ
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > преоброзование линии в 3d Face заданной высоты

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 915 08.07.2022 12:36
Несплошные линии, X-refы и... задача Vova AutoCAD 6 20.04.2018 16:14
Как сгладить 2 линии. Или как сгладить только часть линии. Димас AutoCAD 3 14.03.2006 08:28
Поворот параллельно заданной линии ondreo AutoCAD 2 20.02.2006 10:44
Загрузка типа линии из макроса Кулик Алексей aka kpblc Программирование 4 24.01.2005 14:57