Тема: PaperSpace и SelectSet

Помогите, пожалуйста понять! SelectSet нельзя сделать для PaperSpace? Выбор возможен только по циклу? А мне понравилось выбор делать с фильтрами!
Или все-таки как-то возможно?
И ещё вопрос - На листе видовой экран. Как узнать координаты примитива находящиеся в модели для листа(примитив виден на листе).

Re: PaperSpace и SelectSet

Пожалуйста, подскажите!
В моделе есть блоки(одинаковые)На листе - видовой экран(все эти блоки видны). Задача - на лист(PaperSpace) в VBA нанести подписи к этим блокам(чтобы user не тыкал по ним). Возможно ли узнать координаты блока для листа - куда вставлять надпись?

Re: PaperSpace и SelectSet

Создать SelectSet можно любым спосбом, в том числе методом SelectOnScreen [FilterType][, FilterData], т.е. с фильтром и на PaperSpace.
См. Help.
Нанести программным способом в PaperSpace надписи к примитивам находящимся в ModelSpace? Я такого способа что-то не вижу.
Может лучше наносить эти надписи в ModelSpace, и они будут видны и в PaperSpace.

Re: PaperSpace и SelectSet

Я думаю, что тут основная проблема не столько в формировании набора, сколько в вычислении типа: в модели точка имеет координаты 0,600,250. Какие у нее будут координаты в листе?

Re: PaperSpace и SelectSet

P.S. Мой пост относится к > Adel (2007-05-29 09:05:15)

Re: PaperSpace и SelectSet

В Экспресс есть на ЛИСПе программка - перевод объектов с модели на лист и наоборот. Но я не сильна в ЛИСПе(буду долго разбираться). Надеялась, что кто-нибудь разбирался с этим и мог подсказать.:(

Re: PaperSpace и SelectSet

chspace имеется в виду? Правильно, она написана на lisp, а вопрос-то в разделе VBA...

Re: PaperSpace и SelectSet

> Adel
Если тебе надо выбрать блоки во всех
вкладках PaperSpace это сделать просто:

Option Explicit
Sub test()
Dim oSset As AcadSelectionSet
Dim oEnt As AcadEntity
Dim blkRef As AcadBlockReference
Dim dxfcode(0 To 1) As Integer
Dim dxfdata(0 To 1) As Variant
dxfcode(0) = 0
dxfdata(0) = "INSERT"
dxfcode(1) = 2
dxfdata(1) = InputBox(vbCr & vbCr & "Enter block name:", "Block Name")
Dim setName As String, i As Integer
Dim hgt As Double, scl As Double
hgt = ThisDrawing.GetVariable("DIMTXT")
hgt = hgt * 0.0001
setName = "$Blocks$"
'Make sure selection set does not exist
For i = 0 To ThisDrawing.SelectionSets.Count - 1
If ThisDrawing.SelectionSets.Item(i).Name = setName Then
ThisDrawing.SelectionSets.Item(i).Delete
Exit For
End If
Next i
' select all blocks
Set oSset = ThisDrawing.SelectionSets.Add(setName)
oSset.Select acSelectionSetAll, , , dxfcode, dxfdata
ThisDrawing.Utility.Prompt "Selected: " & oSset.Count & " blocks"
'Process each block instance
For Each oEnt In oSset
Dim iD As Long
iD = oEnt.OwnerID
Dim oLayObj As AcadObject
Set oLayObj = ThisDrawing.ObjectIdToObject(iD)
If oLayObj.Name Like "*Paper*" Then
Dim oLayout As AcadBlock
Set oLayout = oLayObj
Set blkRef = oEnt
Dim pt As Variant
pt = blkRef.InsertionPoint
Dim oText As AcadText
Set oText = oLayout.AddText("Test String", pt, hgt)
End If
Next
oSset.Delete
Set oSset = Nothing
End Sub

~'J'~

Re: PaperSpace и SelectSet

Можно,конечно, и с помощью SelectOnScreen [FilterType][, FilterData] сделать SelectSet, но я делаю итерацию по листам и каждый раз выделять весь лист как-то не логично...

Re: PaperSpace и SelectSet

> Adel
А где ты тут видишь SelectOnScreen?
~'J'~

Re: PaperSpace и SelectSet

Что-то затерли тему...

> Кулик Алексей aka kpblc
И я о том же. Мне как-то приходилось вычислять экранные координаты (не помню чего и не помню где этот пост) но твердо помню, что дело это - муторное. А соединять, то бишь пересчитывать всю эту механику с ModelSpace на PaperSpace через координаты видовых экранов... проще застрелиться. Или пойти тем путем, который я советовал:> LeonidSN (2007-05-31 23:39:55)

Re: PaperSpace и SelectSet

Можно,конечно, и с помощью SelectOnScreen [FilterType][, FilterData] сделать SelectSet, но я делаю итерацию по листам и каждый раз выделять весь лист как-то не логично...

Это я ответила > LeonidSN (2007-05-31 23:39:55)
Извините...

Re: PaperSpace и SelectSet

> LeonidSN
Почему? Через лисп я такой конвертер уже делал, там особо сложного мало :) Но ты прав - муторно...

Re: PaperSpace и SelectSet

> Кулик Алексей aka kpblc
И вся публика просто в предвкушении
ожидания конкретного кода
Наверное, только Alexander Rivilis
разъяснит ситуацию...
Regards,
~'J'~

Re: PaperSpace и SelectSet

> Fatty
На VBA? Мне проще застрелиться... :)

Re: PaperSpace и SelectSet

> Fatty

(defun _kpblc-conv-point-from-layout-to-model (vp pt / res)
                                              ;|
*    Преобразование координат точки из пространства листа в пространство модели
*    Параметры вызова:
*    vp    ename-указатель на ВЭ
*    pt    координаты точки
|;
  (_kpblc-error-catch
    (function
      (lambda ()
        (setq res (mapcar '-
                          (cdr (assoc 12 (entget vp)))
                          (mapcar '(lambda (x)
                                     (/ x
                                        (/ (cdr (assoc 41 (entget vp)))
                                           (cdr (assoc 45 (entget vp)))
                                           ) ;_ end of /
                                        ) ;_ end of /
                                     ) ;_ end of lambda
                                  (mapcar '- (cdr (assoc 10 (entget vp))) pt)
                                  ) ;_ end of mapcar
                          ) ;_ end of mapcar
              ) ;_ end of setq
        ) ;_ end of lambda
      ) ;_ end of function
    '(lambda (x)
       (princ (strcat "_kpblc-conv-point-from-layout-to-model ERROR : " x))
       ) ;_ end of lambda
    ) ;_ end of _kpblc-error-catch
  ) ;_ end of defun

Библиотечные функции:

(defun _kpblc-error-catch (protected-function
                           on-error-function
                           /
                           catch_error_result
                           )
                          ;|
*** Функция взята из книжной версии ruCAD'a без каких бы то ни было переделок,
*** кроме переименования.
*    Оболочка отлова ошибок.
*    Параметры вызова:
*    protected-function    - "защищаемая" функция
*    on-error-function    - функция, выполняемая в случае ошибки
|;
  (setq catch_error_result (vl-catch-all-apply protected-function))
  (if (and (vl-catch-all-error-p catch_error_result)
           on-error-function
           ) ;_ end of and
    (apply on-error-function
           (list (vl-catch-all-error-message catch_error_result))
           ) ;_ end of apply
    catch_error_result
    ) ;_ end of if
  ) ;_ end of defun

Вроде работает...

Re: PaperSpace и SelectSet

> Кулик Алексей aka kpblc
Мне это как-то...
Сам знаешь,  но спасибо, другим поможет
Regards,
~'J'~

Re: PaperSpace и SelectSet

Вот пост на который я ссылался. Там приведен код вычисления текущих координат курсора. Но что-то мне подсказывает, что уважаемой Adel этого будет недостаточно...
https://www.caduser.ru/forum/topic26786.html
Хотя... может и поможет, если Юзер будет водить курсором по блокам в PaperSpace и пикать.

Re: PaperSpace и SelectSet

> LeonidSN
Тут просто тема капитально вильнула в противоположном направлении. Фактически автору требуется координаты точки в модели перевести в координаты листа, чтобы можно было дальше уже работать именно в листе.
я думаю, что надо просматривать эти темы и все ссылки по ним.

Re: PaperSpace и SelectSet

Спасибо всем!
Может вы меня и убедили что хоть часть, но нужно в ЛИСПе написать. Посмотрим...

Re: PaperSpace и SelectSet

> Adel
Еще одна ссылка
http://www.cadforum.cz/cadforum/lessons/lesson7.htm
~'J'~

Re: PaperSpace и SelectSet

пара функций, которые помогают мне заставить видовой экран смотреть в нужную точку модели

Public Sub VPAdjust(VP As AcadPViewport, Tg As Variant)
 Dim Min, Max As Variant
 VP.GetBoundingBox Min, Max
 oldMode = ThisDrawing.MSpace
 ThisDrawing.MSpace = True
 Min = ThisDrawing.Utility.TranslateCoordinates(Min, acPaperSpaceDCS, acDisplayDCS, False)
 Tg(0) = Tg(0) - Min(0)
 Tg(1) = Tg(1) - Min(1)
 VP.Target = Tg
 ThisDrawing.MSpace = oldMode
End Sub
Public Sub VPCoords(VP As AcadPViewport, ll, ur)
'Calculates the extents of a PaperSpace viewport in ModelSpace units
'Arguments: An AcadPViewport entity and two variants.
' The variants will be filled with the corner points.
 Dim Min, Max, oldMode As Boolean
 VP.GetBoundingBox Min, Max
 oldMode = ThisDrawing.MSpace
 ThisDrawing.MSpace = True
 ll = ThisDrawing.Utility.TranslateCoordinates(Min, acPaperSpaceDCS, acDisplayDCS, False)
 ur = ThisDrawing.Utility.TranslateCoordinates(Max, acPaperSpaceDCS, acDisplayDCS, False)
 ThisDrawing.MSpace = oldMode
End Sub

собственно, ключевым методом является TranslateCoordinates

Re: PaperSpace и SelectSet

Спасибо за ссылки и коды!
С TranslateCoordinates вроде бы прояснилось.

> Fatty
-
Мне нужно выбрать блоки в видовом экране, они находятся на модели и только часть их видна в PViewport! Как выбрать только эту видимую часть
блоков для данного листа?