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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Построения с помощью DXF

Построения с помощью DXF

Ответ
Поиск в этой теме
Непрочитано 22.12.2008, 14:10 #1
Построения с помощью DXF
Holon
 
CNC
 
Israel
Регистрация: 07.07.2007
Сообщений: 302

Есть функция abs которая строит полилинию,
Код:
[Выделить все]
(defun c:abs (/)
(entmakex '((0 . "LWPOLYLINE")
            (5 . "139")
	    (100 . "AcDbEntity")
	    (67 . 0)
	    (410 . "Model")
	    (8 . "Body")
	    (100 . "AcDbPolyline")
	    (90 . 6)
	    (70 . 0)
	    (43 . 0.0)
	    (38 . 0.0)
	    (39 . 0.0)
	    (10 162.58 128.775)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . 0.0)
	    (10 269.162 128.775)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . 0.286549)
	    (10 275.451 132.702)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . -1.40087)
	    (10 293.507 114.645)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . 0.286549) 
            (10 289.58 108.356)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . 0.0)
	    (10 289.58 101.775)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . 0.0)
	    (210 0.0 0.0 1.0))
);_ end of entmakex
);_ end of defun
теперь из этой полилинии "ручками" Я делаю блок, называю его "SM"
и с помощью функции blk легко вставляю созданный мною блок,
при необходимости разворачивая его.

Пример вызова:
Код:
[Выделить все]
(blk nil nil)  (blk nil "V") (blk "H" nil) (blk "H" "V")
Вот сама функция:

Код:
[Выделить все]
(defun blk (H V / lst x y z )
(setq
         lst(getpoint "\nInsert point <Quit> : \n")
           x(car lst)
	   y(cadr lst)
	   z(caddr lst)
)
(entmakex (list
	    '(0 . "INSERT")
	    '(5 . "CFB")
	    '(100 . "AcDbEntity")
	    '(67 . 0)
	    '(410 . "Model")
	    '(8 . "Body")
	    '(100 . "AcDbBlockReference")
            '(2 . "SM")
	     (cons 10 (list x y z))
	     (if(equal V "V")'(41 . 1.0)'(41 . -1.0))
	     (if(equal H "H")'(42 . 1.0)'(42 . -1.0))
            '(43 . 1.0)
	    '(50 . 0.0);(50 . 1.5708) <--> ANGLE 
	    '(70 . 0)
	    '(71 . 0)
	    '(44 . 0.0)
	    '(45 . 0.0)
	    '(210 0.0 0.0 1.0)
	  );_ lisp
);_ end of entmakex
);_ end of defun
Вопрос как по dxf коду полилинии я могу создать блок на "лету"?
Просмотров: 3595
 
Непрочитано 22.12.2008, 14:42
#2
Дима_

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


Код:
[Выделить все]
(entmakex (list (cons 0 "BLOCK") (cons 2 "test") '(10 0 0 0) (cons 70 0)))
(entmakex (list (cons 0 "lwpolyline")....... 
(entmakex (list (cons 0 "ENDBLK")))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 22.12.2008, 15:06
#3
VVA

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


Да
Код:
[Выделить все]
(if (null (tblobjname "BLOCK" "MyTestBlock"))
   (progn
   (entmakex '((0 . "BLOCK")
               (100 . "AcDbEntity")
               (67 . 0)
               (8 . "0")
               (100 . "AcDbBlockBegin")
               (70 . 0)
               (10 0.0 0.0 0.0)
               (2 . "MyTestBlock")
               (1 . "")
              )
             )
   (entmakex '((0 . "LWPOLYLINE")
            (5 . "139")
	    (100 . "AcDbEntity")
	    (67 . 0)
	    (410 . "Model")
	    (8 . "Body")
	    (100 . "AcDbPolyline")
	    (90 . 6)
	    (70 . 0)
	    (43 . 0.0)
	    (38 . 0.0)
	    (39 . 0.0)
	    (10 162.58 128.775)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . 0.0)
	    (10 269.162 128.775)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . 0.286549)
	    (10 275.451 132.702)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . -1.40087)
	    (10 293.507 114.645)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . 0.286549) 
            (10 289.58 108.356)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . 0.0)
	    (10 289.58 101.775)
	    (40 . 0.0)
	    (41 . 0.0)
	    (42 . 0.0)
	    (210 0.0 0.0 1.0))
);_ end of entmakex
   (entmakex '((0 . "ENDBLK") (100 . "AcDbEntity") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2)))
   (command "_-INSERT" "MyTestBlock" pause)
    ) ;_  progn
   )
Пример можно еще здесь посмотреть
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 22.12.2008, 15:23
#4
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Всем большее спасибо!
А с помощью entmakex возможно вставить в блок hyperlink?

Последний раз редактировалось Holon, 22.12.2008 в 15:47.
Holon вне форума  
 
Непрочитано 22.12.2008, 15:54
#5
Дима_

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


А почему нет? С точки зрения лиспа hyperlink - это-то же вхождение блока. Еотлько вначале его нужно точно также как и блок создать (cons 70 36)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 22.12.2008, 16:03
#6
VVA

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


Дима_, Что-то я про hyperlink не понял? Hyperlink хранится в расширенных данных и цеплять ее нужно к вставке(INSERT) блока, а не к описанию (BLOCK). Или я чего-то не понял?
Цитата:
Команда: (entget(car(entsel))'("*"))

Выберите объект: ((-1 . <Имя объекта: 7ed180a8>) (0 . "INSERT") (330 . <Имя
объекта: 7ed01138>) (5 . "455") (100 . "AcDbEntity") (67 . 1) (410 . "MIP
Format") (8 . "0") (100 . "AcDbBlockReference") (2 . "Myblk") (10 1726.22
264.573 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44
. 0.0) (45 . 0.0) (210 0.0 0.0 1.0) (-3 ("PE_URL" (1000 . "about:blank") (1002
. "{") (1000 . "MyHyperLINK") (1002 . "{") (1071 . 0) (1002 . "}") (1002 .
"}")))
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 22.12.2008, 16:15
#7
Дима_

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


Прошу прощения - затупил - я про xref вместо hyperlink написал.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 22.12.2008, 18:36
#8
VVA

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


Holon, При вставке блока нужно добавить Расширенные данные
Код:
[Выделить все]
(defun blk (H V / lst x y z )
(setq
         lst(getpoint "\nInsert point <Quit> : \n")
           x(car lst)
	   y(cadr lst)
	   z(caddr lst)
)
(regapp "PE_URL")
(entmakex (list
	    '(0 . "INSERT")
	    '(100 . "AcDbEntity")
	    '(67 . 0)
	    '(410 . "Model")
	    '(8 . "Body")
	    '(100 . "AcDbBlockReference")
            '(2 . "SM")
	     (cons 10 (list x y z))
	     (if(equal V "V")'(41 . 1.0)'(41 . -1.0))
	     (if(equal H "H")'(42 . 1.0)'(42 . -1.0))
            '(43 . 1.0)
	    '(50 . 0.0);(50 . 1.5708) <--> ANGLE 
	    '(70 . 0)
	    '(71 . 0)
	    '(44 . 0.0)
	    '(45 . 0.0)
	    '(210 0.0 0.0 1.0)
            '(-3 ("PE_URL" (1000 . "about:blank")
                  (1002 . "{") (1000 . "MyHyperLINKTest")
                  (1002 . "{") (1071 . 0) (1002 . "}") (1002 . "}")))
	  );_ lisp
);_ end of entmakex
);_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 23.12.2008 в 10:37.
VVA вне форума  
 
Автор темы   Непрочитано 23.12.2008, 09:35
#9
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Код:
[Выделить все]
Command: (blk "H" "V")
Insert point <Quit> :
Invalid application name in 1001 groupnil
Holon вне форума  
 
Непрочитано 23.12.2008, 10:37
#10
VVA

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


Исправил #8
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 23.12.2008, 11:25
#11
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Застрял вроде-бы на простой задаче , хочу сделать функцию более универсальной, передать имя блока в аргументы, к примеру вызов функции:
Код:
[Выделить все]
 (blk "blk_name" nil nil)
но немогу создать правильно строку
Код:
[Выделить все]
(2 . blk_name)
сразу при загрузке возвращает
Код:
[Выделить все]
_$ 
; error: bad syntax of function call: (2 . BLK_NAME)
Holon вне форума  
 
Непрочитано 23.12.2008, 13:16
#12
Дима_

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


(cons 2 blk_name)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 23.12.2008, 13:37
#13
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Holon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Построения с помощью DXF



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плоскость построения в 3D модели discovery AutoCAD 40 24.02.2016 12:29
как открыть DXF файл с новыми типами линий МихаилМ AutoCAD 7 20.01.2010 19:28
Lira и DXF что то несовмещается... dextron3 Лира / Лира-САПР 14 18.07.2008 17:26
Создание дубликатов DXF файлов. Dark Программирование 2 26.04.2007 22:35
Пакетный перегон dxf -> dwg возможно ли ? bdfy AutoCAD 4 15.11.2006 21:41