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

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

привязка курсора

Ответ
Поиск в этой теме
Непрочитано 07.07.2007, 09:22 #1
привязка курсора
evgm
 
Регистрация: 06.07.2007
Сообщений: 56

привет всем!
из VBA методами add... добавляются линии, текст, блоки и тд
как бы их все объеденить, посадить куда-нибудь курсор мыши и позволить потом пользователю таскать это все то есть указать место вставки?
заранее спасибо
Просмотров: 3998
 
Непрочитано 07.07.2007, 11:47
#2
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


может тебе нужно group, хотя вопрос непонятен.
Sleekka вне форума  
 
Автор темы   Непрочитано 07.07.2007, 18:13
#3
evgm


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


может быть...
(я недавно начал работать с акадом из VB так что....)
возможно я вообще некорректно формулирую вопрос... но постараюсь объяснить
модуль VBA что-то рисует (addline, addtext, addcircle и тд)
все что он рисует нужно сгруппировать (объеденить, выделить и тп)
задать базовую точку установить в нее курсор и датьвозможность пользователю указать самому место вставки этого всего
может group может selectionset
я еще начинающий так что если можно то поподробнее
спасибо заранее
evgm вне форума  
 
Непрочитано 08.07.2007, 01:16
#4
Кулик Алексей aka kpblc
Moderator

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


ИМХО, ИМХО - по 3 раза на каждое слово.
1. Создать блок с предопределенным именем (например, evgm_temp_block). Можно создавать и анонимные блоки, но они не обрабатываются "_.change".
2. Добавлять отрезки, полилинии и прочую лабуду в этот блок.
3. Либо через ThisDrawing.SendCommand "_.-insert", либо через ThisDrawing.SendCommand "_.change" вставить блок и получить ссылку на конкретную вставку.
4. Разбить ее при успешном завершении команды (ent.Explode) и удалить (ent.Erase).
Код не пишу по нескольким причинам:
- я почти не знаю VBA
- для корректного работоспособного кода надо потратить массу времени (отслеживание состояния слоев, отследить активное пространство, обработать вариант "имя такое уже есть" ну и так далее), а я спать сильно хочу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.07.2007, 07:34
#5
evgm


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


пытаюсь сделать так
Dim AcadPLine As AcadPolyline
Dim AcadText As AcadText
Dim newBlock As AcadBlock
Dim acBlockRef As AcadBlockReference

Set newBlock = Application.ActiveDocument.Blocks.Add(InsertionPoint, "insblock")

Set AcadPLine = Application.ActiveDocument.Blocks("insblock").AddPolyline(pLineArray)
Set AcadText = Application.ActiveDocument.Blocks("insblock").AddText("lalala", InsertionPoint, 0.36)

'вот тут не видно как таксается блок по экрану а хотелось бы

Set acBlockRef = .InsertBlock(Application.ActiveDocument.Utility.GetPoint(, "Точка вставки"), "insblock", 1, 1, 1, 0)

Call acBlockRef.Explode

'теперь слзданный блок как-нибудь удалить еще

Set newBlock = Nothing
Set AcadBlockRef = Nothing

Set AcadPLine = Nothing
Set AcadText = Nothing
evgm вне форума  
 
Непрочитано 08.07.2007, 22:05
#6
Кулик Алексей aka kpblc
Moderator

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


Стоп. Ты все верно делаешь, но "не до конца".
Ты вставляешь созданное описание блока "куда-то". Теперь применяй _change к этой вставке.
Либо вообще не вставляй, а запускай сразу _-insert с указанием имени блока.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.07.2007, 08:09
#7
evgm


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


это как???
как это кодом то сделать???
evgm вне форума  
 
Непрочитано 09.07.2007, 08:55
#8
Кулик Алексей aka kpblc
Moderator

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


Я почти не пользую VBA, так что за корявость кода прошу ногами по голове не бить
Код:
[Выделить все]
Option Explicit

Sub Test()
Dim ptInsert(2) As Double
Dim sBlockName As String
Dim lCounter As Long
Dim BlockDefinition As AcadBlock, BlockReference As AcadBlockReference
Dim acLWPLine As AcadLWPolyline, acText As AcadText
Dim acLWPlineVertex() As Double
  On Error GoTo lErrorPurge
  ptInsert(0) = 0#: ptInsert(1) = 0#: ptInsert(2) = 0#
  sBlockName = "TempInsBlock"
  On Error Resume Next
  If ThisDrawing.Blocks(sBlockName) Then
    ThisDrawing.PurgeAll
  End If
  On Error GoTo 0
  Set BlockDefinition = ThisDrawing.Blocks.Add(ptInsert, sBlockName)
  ReDim acLWPlineVertex(7)
  acLWPlineVertex(0) = -5#: acLWPlineVertex(1) = -5#: acLWPlineVertex(2) = 5#: acLWPlineVertex(3) = -5#
  acLWPlineVertex(4) = 5#: acLWPlineVertex(5) = 5#: acLWPlineVertex(6) = -5#: acLWPlineVertex(7) = 5#
  Set acLWPLine = BlockDefinition.AddLightWeightPolyline(acLWPlineVertex)
  acLWPLine.Closed = True
  Set acText = BlockDefinition.AddText("qwerty", ptInsert, 3.5)
  acText.Alignment = acAlignmentMiddleCenter
  acText.InsertionPoint = ptInsert
  ThisDrawing.SendCommand "_.-insert" & vbCr & BlockDefinition.Name & vbCr & _
    "_s" & vbCr & "1" & vbCr
  ThisDrawing.SendCommand "_.explode" & vbCr & "_l" & vbCr & vbCr
  Exit Sub
lErrorPurge:
  ThisDrawing.PurgeAll
  Resume
End Sub
Как предотвратить запрос поворота - я пока не знаю. Оставлю это на твоей совести
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.07.2007, 09:17
#9
evgm


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


оба на!!!
огромное спасибо - все ок...
evgm вне форума  
 
Автор темы   Непрочитано 10.07.2007, 08:20
#10
evgm


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


только вот что -то какой-то ужас происходит если при insert
не указать сразуже точку вставки а попытаться переместить лист средней клавишей мыши...
evgm вне форума  
 
Непрочитано 10.07.2007, 09:00
#11
Кулик Алексей aka kpblc
Moderator

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


Странно. Только что специально проверил на AutoCAD 2005 Eng - все работает... Можно поподробнее?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.07.2007, 09:12
#12
evgm


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


у меня 2006 En

ThisDrawing.SendCommand "_.-insert" & vbCr & BlockDefinition.Name & vbCr & _
"_s" & vbCr & "1" & vbCr

вот тут как мне кажется нужно дождаться завершения вставки
а при нажатии на среднюю клавишу выполнения кода продолжается хотя акад реально блок не вставил еще
начинает просить угол поворота, масштабы и вообще просит зачем-то секонд поинт... а ему подсовывается
_.explode и _l вместо этого...

ThisDrawing.SendCommand "_.explode" & vbCr & "_l" & vbCr & vbCr
evgm вне форума  
 
Автор темы   Непрочитано 10.07.2007, 09:14
#13
evgm


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


кстати запрос угла поворота задается
"_r" & vbCr & "0"
evgm вне форума  
 
Непрочитано 10.07.2007, 09:48
#14
Кулик Алексей aka kpblc
Moderator

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


ADT 2006 Rus + SP1, запущен как AutoCAD. Глюков со вставкой не заметил. Запуск макроса выполнялся как через Alt+F8, так и через _-vbarun.
Зато заметил, что блок, собака, не разбивается. Стоит поставить точку останова на
Код:
[Выделить все]
ThisDrawing.SendCommand "_.explode" & vbCr & "_l" & vbCr & vbCr
как все начинает корректно разбиваться. Чего ему не нравится - я пас
> пост #13 : Ну вот видишь, а говорил "сам не могу, не получается"...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.07.2007, 10:12
#15
evgm


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


да все вставляется вот так
ThisDrawing.SendCommand "_.-insert" & vbCr & tmp_Имя & vbCr & "_s" & vbCr & "1" & vbCr & "_r" & vbCr & "0" & vbCr & vbCr
по крайней мере вроде внешних без глюков...
а explode не выполняется потому что при нажатии мыши акад еще ждет каких-то параметров для вставки а ему в след строке вместо этих параметров подсовывается сначала _.-explode а потом _l
то есть команда вставки не до конца зевершилась...
evgm вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > привязка курсора