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

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

Печать из модели по выбору объекта

Ответ
Поиск в этой теме
Непрочитано 21.10.2009, 12:41
Печать из модели по выбору объекта
zenon
 
Остекляем!!! Алюминим!!!
 
Москва
Регистрация: 21.02.2005
Сообщений: 3,825

Просьба не отсылать в поиск, ибо прошерстил, но не то.
Что хотелось бы, выбираешь объект, а программа сама определяет габариты границы объекта и отправляет на печать все что попадает в габариты.
Настройку предлагаю производить либо при первичной загрузке программы, либо предварительно настроить стиль печати.

ps см. в приложении что и как.

исходник.dwg

__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
Просмотров: 73540
 
Непрочитано 21.10.2009, 19:29
#21
gliv


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


скажите уважаемые, а существует ли возможность создать лисп, который находил бы блоки, брал с них формат листа и соответственно выводил каждый из низ на печать.
gliv вне форума  
 
Непрочитано 21.10.2009, 20:14
#22
Дима_

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


Цитата:
Сообщение от Nike Посмотреть сообщение
...
С первым вопросом - х.з..
С динамическими блоками тоже такую фигню видел. Как лечить - хз. Крыса & co надо в помощь..
Тут скорее винной командные методы - да да привязочки, я думаю замена
Код:
[Выделить все]
 xy1 ;Первая точка окна 
 xy2 ;Вторая точка окна
на
Код:
[Выделить все]
 "_none" xy1 ;Первая точка окна 
 "_none" xy2 ;Вторая точка окна
поможет.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 21.10.2009, 22:04
#23
Do$

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


Насчет сплайна - действительно getBoundingBox выдает точки довольно далеко от краев линии. Для печати, наверное, это не особо критично
Do$ вне форума  
 
Непрочитано 21.10.2009, 23:46
#24
Кулик Алексей aka kpblc
Moderator

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


Я попытался "нарисовать" код, который для сплайна будет выдавать данные по другому алгоритму, но не преуспел. Кто может - добейте:
Код:
[Выделить все]
(defun getboundingbox-spline (ent             /
                              _kpblc-conv-list-to-3dpoints
                              res             controlpoints
                              fitpoints       minp
                              maxp            minfit
                              mincontrol      maxfit
                              maxcontrol
                              )
                             ;|
*	Вычисление BoundingBox'a для SPLINE
*	ent указатель на spline (ename || vla)
|;
  (defun _kpblc-conv-list-to-3dpoints (lst / res)
                                      ;|
*    Функция конвертации списка чисел в список 3-мерных точек. На основе уроков
* по рекурсиям Евгения Елпанова
*    Параметры вызова:
*	lst	список чисел
*    Примеры вызова:
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5 6)) ;-> ((1 2 3) (4 5 6))
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5))   ;-> ((1 2 3) (4 5 0.))
|;
    (cond
      ((not lst)
       nil
       )
      (t
       (setq res (cons (list (car lst)
                             (if (cadr lst)
                               (cadr lst)
                               0.
                               ) ;_ end of if
                             (if (caddr lst)
                               (caddr lst)
                               0.
                               ) ;_ end of if
                             ) ;_ end of list
                       (_kpblc-conv-list-to-3dpoints (cdddr lst))
                       ) ;_ end of cons
             ) ;_ end of setq
       )
      ) ;_ end of cond
    res
    ) ;_ end of defun

  (cond
    ((= (type ent) 'ename)
     (setq res (getboundingbox-spline (vlax-ename->vla-object ent)))
     )
    ((and (= (type ent) 'vla-object)
          (= (vla-get-objectname ent) "AcDbSpline")
          ) ;_ end of and
     (vla-getboundingbox ent 'minp 'maxp)
     (setq controlpoints (_kpblc-conv-list-to-3dpoints
                           (vlax-safearray->list
                             (vlax-variant-value
                               (vla-get-controlpoints ent)
                               ) ;_ end of vlax-variant-value
                             ) ;_ end of vlax-safearray->list
                           ) ;_ end of _kpblc-conv-list-to-3dpoints
           fitpoints     (_kpblc-conv-list-to-3dpoints
                           (vlax-safearray->list
                             (vlax-variant-value (vla-get-fitpoints ent))
                             ) ;_ end of vlax-safearray->list
                           ) ;_ end of _kpblc-conv-list-to-3dpoints
           minp          (vlax-safearray->list minp)
           maxp          (vlax-safearray->list maxp)
           minfit        (mapcar '(lambda (f)
                                    (apply 'min (mapcar f fitpoints))
                                    ) ;_ end of lambda
                                 (list 'car 'cadr 'caddr)
                                 ) ;_ end of mapcar
           maxfit        (mapcar '(lambda (f)
                                    (apply 'max (mapcar f fitpoints))
                                    ) ;_ end of lambda
                                 (list 'car 'cadr 'caddr)
                                 ) ;_ end of mapcar
           mincontrol    (mapcar '(lambda (f)
                                    (apply 'min (mapcar f controlpoints))
                                    ) ;_ end of lambda
                                 (list 'car 'cadr 'caddr)
                                 ) ;_ end of mapcar
           maxcontrol    (mapcar '(lambda (f)
                                    (apply 'max (mapcar f controlpoints))
                                    ) ;_ end of lambda
                                 (list 'car 'cadr 'caddr)
                                 ) ;_ end of mapcar
           res           (list
                           (cons
                             "min"
                             (mapcar '(lambda (f)
                                        (apply 'max
                                               (mapcar f (list minfit mincontrol minp))
                                               ) ;_ end of apply
                                        ) ;_ end of lambda
                                     (list 'car 'cadr 'caddr)
                                     ) ;_ end of mapcar
                             ) ;_ end of cons
                           (cons
                             "max"
                             (mapcar '(lambda (f)
                                        (apply 'min
                                               (mapcar f (list maxfit maxcontrol maxp))
                                               ) ;_ end of apply
                                        ) ;_ end of lambda
                                     (list 'car 'cadr 'caddr)
                                     ) ;_ end of mapcar
                             ) ;_ end of cons
                           ) ;_ end of list
           ) ;_ end of setq
     )
    (t
     (vla-getboundingbox ent 'minp 'maxp)
     (setq minp (vlax-safearray->list minp)
           maxp (vlax-safearray->list maxp)
           res  (list (cons "min" minp) (cons "max" maxp))
           ) ;_ end of setq
     )
    ) ;_ end of cond
  res
  ) ;_ end of defun
Результат неверен, говорю сразу.
Насчет дин.блоков... Там по идее надо точно так же, как и для обычных блоков (скажу честно, подобными задачами не занимался, подробный код сейчас сотворить не в силах )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.10.2009, 07:45
#25
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Вот насочинял чуть-чуть, чтоб со сплайном по-корректнее было
Код:
[Выделить все]
 
(defun c:test (/ object obj t1t2 t1 t2)
  (vl-load-com)
  (setq object (car (entsel))
 obj    (vlax-ename->vla-object object)
  )
  (if (= (vla-get-objectname obj) "AcDbSpline")
    (setq t1t2 (getboundingbox_spl object obj)
   t1   (car t1t2)
   t2   (cadr t1t2)
    )
    (progn (vla-GetBoundingBox
      obj
      'minPt
      'maxPt
    )
    (setq t1 (vlax-safearray->list minPt)
   t2 (vlax-safearray->list maxPt)
    )
    )
  )
)
 
(defun getboundingbox_spl (spl     obj      /       pogreshnost
      oldcolor nabor    i       spis     koord
      minX     minY     maxX     maxY
     )
  (setq
    pogreshnost (/ (vlax-curve-getendparam obj) 2000)
    oldcolor (getvar "CECOLOR")
  )
  (setvar "CECOLOR" "222")
  (vl-cmdf "_divide" spl 1000)
  (setq
    nabor (ssget "_X" '((0 . "POINT") (62 . 222)))
    i   0
    spis  '()
  )
  (repeat (sslength nabor)
    (setq
      koord (cdr (assoc 10 (entget (ssname nabor i))))
      spis  (cons koord spis)
      i     (1+ i)
    )
  )
  (setq
    minX (caar spis)
    minY (cadar spis)
    maxX minX
    maxY minY
    spis (cons (vlax-curve-getStartPoint obj)
        (cons (vlax-curve-getEndPoint obj) spis)
  )
  )
  (vl-cmdf "_.erase" nabor "")
  (mapcar (function (lambda (x)
        (setq minX (min minX (car x))
       maxX (max maxX (car x))
       minY (min minY (cadr x))
       maxY (max maxY (cadr x))
        )
      )
   )
   spis
  )
  (setvar "CECOLOR" oldcolor)
  (list (list (- minX pogreshnost) (- minY pogreshnost))
 (list (+ maxX pogreshnost) (+ maxY pogreshnost))
  )
)
Если сначало нарисовать полилинию, а потом её "сплайнить", то у неё появяться выносные ручки не лежащие на самой полилинии, может vla-GetBoundingBox каким-то образом у сплайна эти ручки находит, и по ним расширяет габариты?
__________________
Почему все вдруг становятся умными, когда уже не надо?

Последний раз редактировалось Disney, 22.10.2009 в 09:43.
Disney вне форума  
 
Непрочитано 22.10.2009, 08:35
#26
Do$

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


Цитата:
Сообщение от Disney Посмотреть сообщение
Если сначало нарисовать полилинию, а потом её "сплайнить", то у неё появяться выносные ручки не лежащие на самой полилинии, может vla-GetBoundingBox каким-то образом у сплайна эти ручки находит, и по ним расширяет габариты?
Не похоже - См. вложение. Сплайн нарисован вручную, ручки на сплайне, красный прямоугольник построен по точкам, полученным функцией GetBoundingBox:

Код:
[Выделить все]
(defun c:test ( / getBoundingBox box)
  (defun getBoundingBox	(ent / minpt maxpt)
    (vl-load-com)
    (vla-GetBoundingBox
      (vlax-ename->vla-object ent)
      'minpt
      'maxpt
    ) ;_ end of vla-GetBoundingBox
    (list
      (vlax-safearray->list minpt)
      (vlax-safearray->list maxpt)
    ) ;_ end of list
  ) ;_ end of defun

  (setq box (getBoundingBox (car (entsel "\nSelect spline:"))))
  (vl-cmdf "_.rectang" (car box) (last box) "")
  (princ)
) ;_ end of defun
Миниатюры
Нажмите на изображение для увеличения
Название: GetBox_spline.JPG
Просмотров: 147
Размер:	12.9 Кб
ID:	27616  
Do$ вне форума  
 
Непрочитано 22.10.2009, 08:59
#27
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Do$ Посмотреть сообщение
Не похоже
Похоже
зелёным - vla-GetBoundingBox для сплайна
красным - сплайн
синим - полилиния, сглаженная сплайном
с лева ручки включены у полилинии, с право у сплайна.
Ну, если честно, я в ручную подгонял, так чтоб и полилиния совпадала со сплайном, и чтоб ручки совпадали с габаритом.
Миниатюры
Нажмите на изображение для увеличения
Название: Сплайн.jpg
Просмотров: 147
Размер:	34.0 Кб
ID:	27617  
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 22.10.2009, 09:29
#28
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Ладно фиг с ним с сплайном, по поводу динамических блоков что-то намечается?
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 22.10.2009, 09:54
#29
Do$

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


Цитата:
Сообщение от zenon Посмотреть сообщение
Ладно фиг с ним с сплайном
Погодите, святой отец

Во вложении файл. Сплайны нарисованы вручную, прямоугольная рамка вокруг них - это результат GetBoundingBox при помощи кода из #26. Полилинии построены по контрольным точкам спланов, при помощи кода:
Код:
[Выделить все]
(defun c:test1 ( / _kpblc-conv-list-to-3dpoints)

  (defun _kpblc-conv-list-to-3dpoints (lst / res)
				      ;|
*    Функция конвертации списка чисел в список 3-мерных точек. На основе уроков
* по рекурсиям Евгения Елпанова
*    Параметры вызова:
*	lst	список чисел
*    Примеры вызова:
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5 6)) ;-> ((1 2 3) (4 5 6))
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5))   ;-> ((1 2 3) (4 5 0.))
|;
    (cond
      ((not lst)
       nil
      )
      (t
       (setq res (cons (list (car lst)
			     (if (cadr lst)
			       (cadr lst)
			       0.
			     ) ;_ end of if
			     (if (caddr lst)
			       (caddr lst)
			       0.
			     ) ;_ end of if
		       ) ;_ end of list
		       (_kpblc-conv-list-to-3dpoints (cdddr lst))
		 ) ;_ end of cons
       ) ;_ end of setq
      )
    ) ;_ end of cond
    res
  ) ;_ end of defun

  (vl-cmdf "_.pline")
  (foreach
	    x
	    (_kpblc-conv-list-to-3dpoints
	      (vlax-safearray->list
		(vlax-variant-value
		  (vla-get-controlpoints
		    (vlax-ename->vla-object (car (entsel "\nSpline?:")))
		  ) ;_ end of vla-get-controlpoints
		) ;_ end of vlax-variant-value
	      ) ;_ end of vlax-safearray->list
	    ) ;_ end of _kpblc-conv-list-to-3dpoints
    (vl-cmdf x)
  ) ;_ end of foreach
  (vl-cmdf "")
) ;_ end of defun
Как я понял, граница сплайна берется по контрольной точке (что за зверь такой? ), если угол между прямыми, проведенными в ближайшие контрольные точки тупой. А вот если острый - там какой-то другой алгоритм...

Цитата:
Сообщение от zenon Посмотреть сообщение
по поводу динамических блоков что-то намечается?
По поводу динамических блоков с параметром видимости - вполне логично, что границы блока будут браться по наибольшему примитиву, даже если он не виден. Я так думаю, что самый простой вариант - взрывать блок, создавать из "осколков" новый и прогонять через программу.
Вложения
Тип файла: dwg
DWG 2004
spline_test.dwg (27.9 Кб, 1782 просмотров)
Do$ вне форума  
 
Непрочитано 22.10.2009, 10:35
#30
Кулик Алексей aka kpblc
Moderator

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


Зачем? На уровне идеи: не проще ли будет получать описание блока через (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-name block_reference) и исключать из обработки примитивы, у которых visible = false?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 22.10.2009 в 10:41.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.10.2009, 10:57
#31
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Да уж хитрый сплайн, попробовал его так
Код:
[Выделить все]
 
(defun C:test ()
  (vl-load-com)
  (setq obj  (entsel "Сплайн")
 prim (entget (car obj))
 obj  (vlax-ename->vla-object (car obj))
 sp   '()
 sp   (mapcar
        'cdr
        (vl-remove-if-not
   '(lambda (x) (= (car x) 10))
   prim
        )
      )
  )
  (ru-pline-entmake sp nil nil 0 50)
  (setq pol (entlast))
  (vl-cmdf "_pedit" pol "_s" "")
  (vla-GetBoundingBox
    (vlax-ename->vla-object (entlast))
    'minPt
    'maxPt
  )
  (vl-cmdf "_.erase" pol "")
  (setq t1 (vlax-safearray->list minPt)
 t2 (vlax-safearray->list maxPt)
  )
)
 
 
(defun ru-pline-entmake
       (points is_closed is_3d width lineweight / elst ENTL)
;;; (ru-pline-entmake (список_вершин) флаг_замкнутости
;;; флаг_делать_3М_ПЛИНИЮ)
;;; возвращает имя примитива - полилинии или NIL, если что-то не
;;; вышло.
  ;|
Пример:
(ru-pline-entmake
(list
(list 220.65 345.001)
(list 332.622 546.525)
(list 846.376 320.906)
(list 719.035 121.572)
) T nil 0 50)
|;
  (if is_3d
    (progn
      (setq entl
      (list
        '(0 . "POLYLINE")
        '(100 . "AcDbEntity")
        '(100 . "AcDb3dPolyline")
        '(66 . 1)
        '(10 0.0 0.0 0.0)
        (cons 70
       (logior 8
        (if is_closed
          1
          0
        ) ;_ end of if
        (if (= 1 (getvar "PLINEGEN"))
          128
          0
        ) ;_ end of if
       ) ;_ end of logior
        ) ;_ end of cons
      ) ;_ end of list
      ) ;_ end of setq
      (if (entmake entl)
 (progn
   (foreach v points
     (progn
       (setq entl
       (list
         '(0 . "VERTEX")
         '(100 . "AcDbEntity")
         '(100 . "AcDbVertex")
         '(100 . "AcDb3dPolylineVertex")
         (append '(10) v)
         '(70 . 32)
       ) ;_ end of list
       ) ;_ end of setq
       (entmake entl)
     ) ;_ end of progn
   ) ;_ end of foreach
   (if (entmake '((0 . "SEQEND") (100 . "AcDbEntity")))
     (entupd (entlast))
     nil
   ) ;_ end of if
 ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of progn
    (progn
      (setq elst (append
     (list
       '(0 . "LWPOLYLINE")
       '(100 . "AcDbEntity")
       '(100 . "AcDbPolyline")
     ;(cons 8 (getvar "CLAYER"))
       (cons 90 (length points))
       (cons 43 width)
       (cons 370 lineweight)
       (cons 70
      (logior (if is_closed
         1
         0
       ) ;_ end of if
       (if (= 1 (getvar "PLINEGEN"))
         128
         0
       ) ;_ end of if
      ) ;_ end of logand
       )   ; _ end of cons;;;
     ) ;_ end of list
     (mapcar '(lambda (p)
         (list 10 (car p) (cadr p))
       ) ;_ end of lambda
      points
     ) ;_ end of mapcar
   ) ;_ end of append
      ) ;_ end of setq
      (if (entmake elst)
 (entupd (entlast))
 nil
      ) ;_ end of if
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun
Похоже, но не точно, габарит может быть, как чуть больше(что не страшно), так и чуть меньше(что не приятно ).
Цитата:
Как я понял, граница сплайна берется по контрольной точке (что за зверь такой? ), если угол между прямыми, проведенными в ближайшие контрольные точки тупой. А вот если острый - там какой-то другой алгоритм...
Ну, тут ты не совсем честен, ты зачем верхнюю вершину, полилинии построенной по контрольным точкам, к рамке подтянул?
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 22.10.2009, 11:09
#32
Do$

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


Цитата:
Сообщение от Disney Посмотреть сообщение
Ну, тут ты не совсем честен, ты зачем верхнюю вершину, полилинии построенной по контрольным точкам, к рамке подтянул?
Гадом буду! Только цвет поменял и тип линии - остальное все само построилось
Коды выложил, чертеж есть - проверь!
Do$ вне форума  
 
Непрочитано 22.10.2009, 11:12
#33
Кулик Алексей aka kpblc
Moderator

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


Объектную привязку забыл снести
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.10.2009, 11:22
#34
Do$

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Объектную привязку забыл снести
Виноват
Значит все не так просто, как я думал.
Do$ вне форума  
 
Непрочитано 22.10.2009, 11:58
#35
Дима_

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


Да действительно со спалйном не лады у getbounbox'а - но intersectionwith работает правильно - если кому принципиально можно "намолевать" рекурсивный аналог getbounboxa с заданной точностью ну скажем до 0.000001 при помощи "золотого сечения" (для незнающих наберите в гуле "метод золотого сечения"). Самому совсем не как сейчас.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 22.10.2009, 12:03
#36
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


так что насчет динблоков с параметром видимость
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 22.10.2009, 12:07
#37
Кулик Алексей aka kpblc
Moderator

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


Дай пример Вечером, если не забуду (и если до этого уже не будет решения) - попробую сделать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.10.2009, 12:27
#38
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Дай пример Вечером, если не забуду (и если до этого уже не будет решения) - попробую сделать.
держи
Temp.dwg
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 22.10.2009, 13:38
#39
LSN


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


Или вот еще образец
Вложения
Тип файла: dwg
DWG 2004
Ramka.dwg (63.8 Кб, 1779 просмотров)
LSN вне форума  
 
Непрочитано 22.10.2009, 14:11
#40
Кулик Алексей aka kpblc
Moderator

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


Сделать корректно работающий код не получилось даже для тепличных условий. Явно где-то в логике ошибка
Для тех, кто захочет "добить до ума":
Код:
[Выделить все]
(defun test (/ ent lst min_point max_point)
  (if (and (= (type (setq ent (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (car (entsel "\nБлок <Отмена> : "))
                                    ) ;_ end of lambda
                                  ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'ename
              ) ;_ end of =
           (setq ent (vlax-ename->vla-object ent))
           (vlax-property-available-p ent 'isdynamicblock)
           (equal (vla-get-isdynamicblock ent) :vlax-true)
           ) ;_ end of and
    (progn
      (vlax-for item (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-name ent))
        (if (equal (vla-get-visible item) :vlax-true)
          (setq lst (cons item lst))
          ) ;_ end of if
        ) ;_ end of vlax-for
      (setq lst       (vl-remove nil
                                 (mapcar
                                   (function
                                     (lambda (x / minp maxp)
                                       (if (not (vl-catch-all-error-p
                                                  (vl-catch-all-apply
                                                    (function
                                                      (lambda ()
                                                        (vla-getboundingbox x 'minp 'maxp)
                                                        ) ;_ end of lambda
                                                      ) ;_ end of function
                                                    ) ;_ end of vl-catch-all-apply
                                                  ) ;_ end of vl-catch-all-error-p
                                                ) ;_ end of not
                                         (list (cons "min" (vlax-safearray->list minp))
                                               (cons "max" (vlax-safearray->list maxp))
                                               ) ;_ end of list
                                         ) ;_ end of if
                                       ) ;_ end of lambda
                                     ) ;_ end of function
                                   lst
                                   ) ;_ end of mapcar
                                 ) ;_ end of vl-remove
            min_point (mapcar (function +)
                              (mapcar (function
                                        (lambda (f)
                                          (apply
                                            (function min)
                                            (mapcar f
                                                    (mapcar
                                                      (function
                                                        (lambda (x) (cdr (assoc "min" x)))
                                                        ) ;_ end of function
                                                      lst
                                                      ) ;_ end of mapcar
                                                    ) ;_ end of mapcar
                                            ) ;_ end of apply
                                          ) ;_ end of lambda
                                        ) ;_ end of function
                                      (list 'car 'cadr 'caddr)
                                      ) ;_ end of mapcar
                              (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent)))
                              ) ;_ end of mapcar
            max_point (mapcar (function +)
                              (mapcar (function
                                        (lambda (f)
                                          (apply
                                            (function max)
                                            (mapcar f
                                                    (mapcar
                                                      (function
                                                        (lambda (x) (cdr (assoc "min" x)))
                                                        ) ;_ end of function
                                                      lst
                                                      ) ;_ end of mapcar
                                                    ) ;_ end of mapcar
                                            ) ;_ end of apply
                                          ) ;_ end of lambda
                                        ) ;_ end of function
                                      (list 'car 'cadr 'caddr)
                                      ) ;_ end of mapcar
                              (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent)))
                              ) ;_ end of mapcar
            lst       (list (cons "min" min_point) (cons "max" max_point))
            ) ;_ end of setq
      ) ;_ end of progn
    ) ;_ end of if
  lst
  ) ;_ end of defun
Из обработки напрочь исключаются атрибуты; не учитывается поворот и немировая система координат; не рассматривается вопрос масштаба, не равного 1.0 хотя бы по одному из направлений.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Печать из модели по выбору объекта

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опять про печать из модели нескольких листов gizmo_zx Программирование 2 28.09.2010 12:33
Автоматическая печать из пространства модели Дмитрий_В AutoCAD 9 19.04.2006 16:52
Печать из модели Eugenius AutoCAD 11 03.11.2004 18:26
Печать 3-х мерной модели Лариса AutoCAD 5 09.06.2004 19:57