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

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

DXF-код для отрезка

Ответ
Поиск в этой теме
Непрочитано 28.10.2004, 22:12 #1
DXF-код для отрезка
Джек
 
Строительство
 
Нижний Новгород
Регистрация: 03.09.2003
Сообщений: 81

Привет всем. Я пршу у Вас совета как мне начертить отрезок с помощью DXF-кода если известно координаты точки 1 (pt1) и точки 2 (pt2). Вот мой простенький пример, но почему то прожка не работает
(defun c:lineJekki ()
(setq pt1 (getpoint)); первая точка
(setq pt2 (getpoint pt1));вторая точка
(entmake' (
(0 . "line")
(cons 10 pt1)
(cons 11 pt2)
))
(print)
)
В чем ошибка и как написать правильно. Спасибо
Просмотров: 4592
 
Непрочитано 29.10.2004, 06:37
#2
ГОСТЬ


 
Сообщений: n/a


(entmake (list (cons 0 "LINE") (cons 10 pt1) (cons 11 pt2))),
если через квотирование, то данные должны быть полностью указаны, а не создаваться во время вычисления
(entmake '((0 . "LINE") (10 0 0 0) (11 100 100 0)))
 
 
Автор темы   Непрочитано 29.10.2004, 17:35
#3
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Это понятно ( гостю)! Но как мне написать координаты , если пользователь только указал точки!
а потом вставитьв в DXF функцию 10 и 11
Джек вне форума  
 
Непрочитано 29.10.2004, 19:25
#4
Perezz!!
Moderator

архитектор
 
Регистрация: 21.08.2003
Москва
Сообщений: 3,587


всё что касается setg - в разделе программирование
Perezz!! вне форума  
 
Автор темы   Непрочитано 30.10.2004, 13:52
#5
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


но как мне найти координаты точки pt1 pt2 ?
Джек вне форума  
 
Непрочитано 30.10.2004, 14:33
#6
Lenich

Опер дир
 
Регистрация: 28.04.2004
Москва
Сообщений: 291


(setq pt1 (getpoint "Укажите точку pt1\n"))
Результат:
Укажите точку pt1
(103.187 77.921 0.0)

Со второй делаешь тоже самое.
Lenich вне форума  
 
Непрочитано 30.10.2004, 15:47
#7
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Проблемма ваша в том что ENTMAKE не поддерживает вычислений внутри себя. Необходимо сначала сформировать список сохранив его в переменной, а затем применить ENTMAKE.
Код:
[Выделить все]
(defun c:dline (/ makeDXF pt1)
  (setq makeDXF
    (list
         '(0 . "LINE")
	 (cons 10 (setq pt1(getpoint "Specify first point: ")))
	 (cons 11 (getpoint pt1 "Specify second point: "))
     ); end list
	); end setq
  (entmake makeDXF)
  (princ)
  ); end of c:dlie
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 30.10.2004, 19:58
#8
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Fantomas спасибо тебе большое - ЗАРАБОТАЛО! ТЕПЕРЬ ПОНЯТНО В ЧЕМ МОЯ ОШИБКА! Спасибо всем кто ответил!
И дополнение , а что ещё нужно для вычерчивания отрезка, т.е. какие ещё нужны DXF - коды?
Джек вне форума  
 
Непрочитано 30.10.2004, 20:45
#9
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Для отрезка это минимальный достаточный набор. Если мы так будем продолжать дальше то данная ветка превратится в справочник по DXF.

1) Купи двухтомник Н. Н. Полещука "AutoCAD 2004" из серии "В Подлиннике" там в сносках "Для программиста" дана расшифровка DXF для всех примитивов, а также справочник по всем переменным.

2) Пользуйся разделом DXF Reference из Developer Help.

3) Простой код в командной строке:
Код:
[Выделить все]
(entget(car(entsel)))
позволит тебе посмотреть DXF любого примитива в текстовом экране.
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 30.10.2004, 22:38
#10
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Понял! Огромное спасибо! 8)
Джек вне форума  
 
Непрочитано 01.11.2004, 12:31
#11
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,189
<phrase 1=


Цитата:
Сообщение от Fantomas
ENTMAKE не поддерживает вычислений внутри себя. Необходимо сначала сформировать список сохранив его в переменной, а затем применить ENTMAKE.
Не правда, прекрасно работает:
Код:
[Выделить все]
(defun c:dline (/ pt1)
  (entmake
    (list
      '(0 . "LINE")
      (cons 10 (setq pt1 (getpoint "Specify first point: ")))
      (cons 11 (getpoint pt1 "Specify second point: "))
    )
  )
  (princ)
)
Apelsinov на форуме  
 
Непрочитано 01.11.2004, 14:04
#12
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


И правда работает . Уж не помню когда с DXF копался, все VLA-, VlAX-...
{Smirnoff} вне форума  
 
Непрочитано 01.11.2004, 15:16
#13
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Цитата:
Сообщение от Fantomas
Проблемма ваша в том что ENTMAKE не поддерживает вычислений внутри себя...
Тут как раз все наоборот: entmake не может выполнить код
Код:
[Выделить все]
(setq pt1 (getpoint)); первая точка 
(setq pt2 (getpoint pt1));вторая точка 
(entmake '( 
  (0 . "line") 
  (cons 10 pt1) 
  (cons 11 pt2) 
))
как раз потому, что вычисление подавляется цитированием '(...
В результате на вход функции entmake подается следующий список
Код:
[Выделить все]
((0 . "line") (CONS 10 PT1) (CONS 11 PT2))
Он то entmake'ом и не переваривается...
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Автор темы   Непрочитано 02.11.2004, 23:42
#14
Джек

Строительство
 
Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
<phrase 1=


Спасибо все огромное за советы! Вы мне очень помогли!!!! 8)
Джек вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > DXF-код для отрезка

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