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

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

Как создать блок не командными методами

Ответ
Поиск в этой теме
Непрочитано 18.03.2008, 11:31 #1
Как создать блок не командными методами
Дима_
 
Продуман
 
Питер
Регистрация: 22.02.2007
Сообщений: 2,840

Всем привет, решил плавно уходить (ну по крайней мере где возможно), от командного способа - подскажите как создать описание блока НЕ командными методами, то есть не (command "_-block" ...). Если есть два метода (то есть "сблокировать" существующие объекты - либо создать по описанию то вообще прекрасно.)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Просмотров: 5001
 
Непрочитано 18.03.2008, 11:43
#2
Кулик Алексей aka kpblc
Moderator

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


У тебя объекты уже нарисованы или только планируется их рисовать внутрь блока?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.03.2008, 11:49
#3
Дима_

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


Да и так и так можно - но если трудозатраты одинаковы - то лучше "рисовать внутрь", но камень преткновения ЗД объекты - их без команд (_extrude, _revolve и пр.) боюсь мне интелекта (или терпения) не хватит.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 18.03.2008, 12:04
#4
Кулик Алексей aka kpblc
Moderator

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


_.extrude заменяется на AddExtrudedSolid или AddExtrudedSolidAlongPath
_.revolve - на AddRevolvedSolid
Параметры и примеры вызова - в справке.
Как бы я делал:
  1. Сначала создается само описание блока по принципу
    Код:
    [Выделить все]
    (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point <Базовая точка>) <Имя блока>)
  2. Затем через ActiveX-методы выполняется "рисование" внутрь блока.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.03.2008, 12:14
#5
Дима_

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


Если не сложно - в справке хреновасто ориентируюсь - какие команды для занесения внутрь блока?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 18.03.2008, 12:39
#6
Дима_

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


А на чистом лиспе (без VB) сие слишком геморно?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 18.03.2008, 12:58
#7
Кулик Алексей aka kpblc
Moderator

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


Да в общем-то нет, я просто привык делать ActiveX-ом...
А так - создается элемент начала описания блока (кажется, (entmakex (list (cons 0 "BLOCK") и далее по тексту); потом через (entmake[x]) - создаются все примитивы, потом - окончание блока.
Через ActiveX:
Код:
[Выделить все]
(defun test (/ blk adoc ent)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vla-purgeall adoc)
  (setq blk (vla-add (vla-get-blocks adoc) (vlax-3d-point '(0. 0. 0.)) "qwer"))
          ;(vla-addline blk (vlax-3d-point '(-100. 0. 0.)) (vlax-3d-point '(100. 0. 0.)))
  (setq ent (vla-addlightweightpolyline
              blk
              (vlax-make-variant
                (vlax-safearray-fill
                  (vlax-make-safearray
                    vlax-vbdouble
                    (cons 0 7)
                    ) ;_ end of vlax-make-safearray
                  '(-10. -10. 10. -10. 10. 10. -10. 10.)
                  ) ;_ end of vlax-safearray-fill
                ) ;_ end of vlax-make-variant
              ) ;_ end of vla-AddLightWeightPolyline
        ) ;_ end of setq
  (vla-put-closed ent :vlax-true)
  (setq ent (vla-addregion
              blk
              (vlax-make-variant
                (vlax-safearray-fill
                  (vlax-make-safearray
                    vlax-vbobject
                    '(0 . 0)
                    ) ;_ end of vlax-make-safearray
                  (list ent)
                  ) ;_ end of vlax-safearray-fill
                ) ;_ end of vlax-make-variant
              ) ;_ end of vla-AddRegion
        ) ;_ end of setq
  (foreach item (vlax-safearray->list (vlax-variant-value ent))
    (vla-addextrudedsolid blk item 500. 0.)
    (vla-erase item)
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Потом попробуй вставить блок с именем "qwer"
P.S. Состояние слоев, система координат и прочая не отслеживается, так что код на полностью "рабочий" вариант не тянет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.03.2008, 14:22
#8
Дима_

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


Спасибо постораюсь понять.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 20.03.2008, 11:35
#9
Дима_

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


То Крыс - подскажи пожалуйста, или ссылку какую дай, синтаксис (vla-addregion) - не могу найти.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.03.2008, 12:31
#10
Кулик Алексей aka kpblc
Moderator

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


Ну Семен Семеныч...
Цитата:
Сообщение от F1
AddRegion Method

Creates a region from a set of entities. The given entities must form a closed coplanar region.

Signature

RetVal = object.AddRegion(ObjectList)

Object

ModelSpace Collection, PaperSpace Collection, Block
The object or objects this method applies to.

ObjectList

Array of Objects
The array of objects forming the closed coplanar face to be made into a region. This array may contain the following object types: Line, Arc, Circle, Elliptical Arc, LightweightPolyline, Spline.

RetVal

Variant
This method outputs an array of the newly created Region objects.

Remarks

This method will create a region out of every closed loop formed by the input array of curves. AutoCAD converts closed 2D and planar 3D polylines to separate regions, and then converts polylines, lines, and curves that form closed planar loops. If more than two curves share an endpoint, the resultant region might be arbitrary.

You can explode a region into the individual loops by using the Explode method. The Boolean method allows you to create composite 3D solids or regions from the intersection, union, or subtraction of a solid or region from another solid or region.

The total number of Region objects created is Ubound(objRegions) - Lbound(objRegions) + 1.
Попутно: http://www.cad.dp.ua/stats/vla_doc.php
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как создать блок не командными методами

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в Акад 2006 программно создать подшивку с заданным набор kp+ Программирование 4 16.03.2009 23:23
vla- как сделать блок? ASLYS Программирование 7 01.08.2007 09:32
Как создать каркас? AlexRU Конструкции зданий и сооружений 2 22.02.2007 16:40
Как сделать, чтобы блок вставлялся автоматом Baron Программирование 11 01.01.2004 20:01