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

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

Создание размера в AutoLISP

Ответ
Поиск в этой теме
Непрочитано 03.02.2010, 07:26 #1
Создание размера в AutoLISP
tim87
 
Регистрация: 30.11.2008
Сообщений: 5

Доброго времени суток! Пожалста подскажите как создать обычный "линейный" размер в AutoLisp при помощи команды entmakex? (entmakex (list '( 0 . "DIMENSION") (cons 10 E) (cons 11 C) (cons 12 L) '(8 . "_Размер"))) - Acad игнорирует эту команду (не сообщает об ошибке)
E; C; L - 3D точки. "LINE" и "ARC" по такой схеме работают! Как быть может чегото не хватает? Спасибо.
Просмотров: 7290
 
Непрочитано 03.02.2010, 08:33
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Размеры бывают линейные, угловые, ординатные и пр...
Цитата:
Сообщение от tim87 Посмотреть сообщение
(list '( 0 . "DIMENSION") (cons 10 E) (cons 11 C) (cons 12 L) '(8 . "_Размер")))
какой тут должен быть? Надо бы указать.
Цитата:
Сообщение от tim87 Посмотреть сообщение
Acad игнорирует эту команду (не сообщает об ошибке)
nil то выдает.
Do$ вне форума  
 
Автор темы   Непрочитано 03.02.2010, 08:41
#3
tim87


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Размеры бывают линейные, угловые, ординатные и пр...
какой тут должен быть? Надо бы указать.

nil то выдает.
Вот я и говорю, что размер мне нужен "линейный"

nil выдает!
tim87 вне форума  
 
Непрочитано 03.02.2010, 08:45
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Необходимый минимум данных для линейного размера (типа RotatedDimension):
Код:
[Выделить все]
(entmakex
  '((0 . "DIMENSION") ;*
    (100 . "AcDbEntity") ;*
    (100 . "AcDbDimension") ;*
    (10 910.789 605.613 0.0)   
    (70 . 32) ;*
    (100 . "AcDbAlignedDimension") ;*
    (13 401.424 474.479 0.0)
    (14 910.789 473.069 0.0)
    (100 . "AcDbRotatedDimension") ;*
   )
) ;_ end of entmakex
Do$ вне форума  
 
Автор темы   Непрочитано 03.02.2010, 09:00
#5
tim87


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


а за что отвчает DXF код 100?? И гдебы поподробнее почитать про DXF-коды и их применение?
tim87 вне форума  
 
Непрочитано 03.02.2010, 09:28
#6
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от tim87 Посмотреть сообщение
И гдебы поподробнее почитать про DXF-коды и их применение?
DXF Reference, наверное...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.02.2010, 11:18
#7
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от tim87 Посмотреть сообщение
а за что отвчает DXF код 100?? И гдебы поподробнее почитать про DXF-коды и их применение?
Код 100 определяет тип объекта, для указанного выше кода (вольная трактовка):
"AcDbEntity" - объект является вхождением чертежа
"AcDbDimension" - объект является размером
"AcDbAlignedDimension", "AcDbRotatedDimension" - наличие этих двух значений указывает, что размер относится к типу RotatedDimension.

Несколько советов:
  • Чтобы создать какой-то объект при помощи entmake(-x), сперва его рисуем "вручную", затем применяем к нему (entget (car (entsel))), жмем F2, копируем оттуда список, удаляем из него DXF группы с кодами -1, 330, 5. С оставшимся экспериментируем - закомментил группу, проверил... создался объект - значит параметр необязательный и может браться по умолчанию (откуда - уже другой вопрос), не создался - значит параметр обязательный.
  • Чтобы понять, за какой парметр какой код отвечает, (entget (car (entsel))) к объекту, сохраняем список, меняем параметр исследуемого объекта, снова к нему (entget (car (entsel))), сравниваем получившиеся списки. То что изменилось - то нам и надо.
  • Иногда то, что показывается в окне свойств объекта не соответствует тому, что выдаст (entget (car (entsel))). Например: угол поворота в свойствах показан в соответствии с настройками автокада - по умолчанию в градусах. В entget-списке же все значения углов хранятся в радианах.
Если поискать по форуму, то это все уже не раз обсуждалось. Можно много чего полезного накопать если поискать
Удачи!
Do$ вне форума  
 
Непрочитано 24.09.2011, 04:08 Не хочет стаить вертикальные размеры
#8
Айнар


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


Не получается создать вертикальный размер, привязки и слежения отключены. Код взят выше с новыми точками для вертикального размера

Код:
[Выделить все]
 (entmakex
  '((0 . "DIMENSION") ;*
    (100 . "AcDbEntity") ;*
    (100 . "AcDbDimension") ;*
    (10 450 0 0)   
    (70 . 32) ;*
    (100 . "AcDbAlignedDimension") ;*
    (13 400 0 0)
    (14 400 400 0)
    (100 . "AcDbRotatedDimension") ;*
   )
) ;_ end of entmakex

вот что получается
Миниатюры
Нажмите на изображение для увеличения
Название: dim_vert.jpg
Просмотров: 156
Размер:	11.4 Кб
ID:	66663  
Айнар вне форума  
 
Непрочитано 24.09.2011, 09:46
#9
Дима_

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


привязки в данном случае (entmake) отключать не нужно, создай "в рукопашную" размер и (entget (entlast)) и посмотри, чем он от твоего отличается (теми полями что ты вводил).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 24.09.2011, 12:15
#10
gomer

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


Цитата:
Сообщение от Айнар Посмотреть сообщение
Не получается создать вертикальный размер
Точку вставки текста забыл... код 11, кажется
gomer вне форума  
 
Непрочитано 24.09.2011, 12:28
#11
Айнар


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


при анализе была обнаружена точечная пара ответственная за угол поворота размера (50 . 1,5708), где угол задается в радианах
Код:
[Выделить все]
 (entmakex
  '((0 . "DIMENSION") ;*
    (100 . "AcDbEntity") ;*
    (100 . "AcDbDimension") ;*
    (10 500 0 0)   
    (70 . 32) ;*
    (100 . "AcDbAlignedDimension") ;*
    (13 400 0 0)
    (14 400 400 0)
    (50 . -1.5708) 
    (100 . "AcDbRotatedDimension") ;*
   )
) ;_ end of entmakex
Айнар вне форума  
 
Непрочитано 10.07.2015, 13:45
#12
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Подскажите, как создать не повёрнутый размер, а параллельный.
(entget (car (entsel))) показывает, что отличия лишь в следующем.
- повёрнутый размер включает группы:
(100 . "AcDbAlignedDimension")
(100 . "AcDbRotatedDimension")

- параллельный размер включает только группу:
(100 . "AcDbAlignedDimension")

Просто отказ от группы (100 . "AcDbRotatedDimension") в списке entmake приводит к результату nil

Мой пример вполне рабочего повёрнутого размера:

Код:
[Выделить все]
 
(entmake (list
		'(0 . "DIMENSION")
		'(100 . "AcDbEntity")	
		'(100 . "AcDbDimension")
		'(3 . "standard")
		'(10 100.0 20.0 0.0)
		'(100 . "AcDbAlignedDimension")
		'(13 50.0 0.0 0.0)
		'(14 100.0 0.0 0.0)
		'(100 . "AcDbRotatedDimension")
		'(62 . 7)
		'(70 . 0)
	 ) ;_ end of list
) ;_ end of entmake
T.Bagdat вне форума  
 
Непрочитано 10.07.2015, 15:32
1 | #13
frostmourn


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


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
что отличия лишь в следующем.
- повёрнутый размер включает группы:
(100 . "AcDbAlignedDimension")
(100 . "AcDbRotatedDimension")
70-ю ещё забыли.
И порядок важен - вот так создаётся:

Код:
[Выделить все]
 (entmake 
		(list
		'(0 . "DIMENSION")
		'(100 . "AcDbEntity")
		'(100 . "AcDbDimension")
		'(10 100.0 20.0 0.0)
		'(3 . "standard")
		'(70 . 1)
		'(100 . "AcDbAlignedDimension")
		'(13 50.0 0.0 0.0)
		'(14 100.0 0.0 0.0)
	))
frostmourn вне форума  
 
Непрочитано 11.07.2015, 07:03
#14
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


frostmourn, благодарю!

Я в самом деле не обратил пристального внимания на флаг 70. На разных размерах он попадался совершенно разным. Где 1, где 0, а где и за 30 переваливал. Сейчас откопал в инете, что они бывают от 0 до 6, да плюс 32/64/128 в зависимости от ситуации. А до этого думал, что лишь бы строчка была. Поставил 0, и нащупал порядок при котором повёрнутый размер нормально создавался. Где, собственно, и застрял)))
T.Bagdat вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Создание размера в AutoLISP



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание программы в AutoLisp для рисования отвода Рyslan LISP 1 24.02.2009 20:26
Создание 3D-модели зубчатого колеса в AutoLISP Иван Андреевич LISP 3 18.11.2008 19:39
Создание объекта вращения в AutoLISP marisha21_84 LISP 4 06.06.2008 18:54
Создание слоев в autolisp Badulaque Прочее. Программное обеспечение 3 26.10.2005 10:05