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

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

вызов обьекта в VBA

Ответ
Поиск в этой теме
Непрочитано 15.06.2010, 12:32 #1
вызов обьекта в VBA
meugen
 
Регистрация: 15.06.2010
Сообщений: 9

мне нужно кликнуть мышкой по 3d модели, и сделать её копию. проблема в том что я просто немогу выбрать модель и дать ей имя чтобы дальше с ней производить действия. с созданной моделью всё понятно, а выброной нет.
вринципе былобы не плохо еслиб ктонибудь подсказал книгу или сайт с описанием синтаксиса VBA.
Просмотров: 3904
 
Непрочитано 15.06.2010, 18:07
1 | #2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от meugen Посмотреть сообщение
мне нужно кликнуть мышкой по 3d модели, и сделать её копию. проблема в том что я просто немогу выбрать модель и дать ей имя чтобы дальше с ней производить действия. с созданной моделью всё понятно, а выброной нет.
вринципе былобы не плохо еслиб ктонибудь подсказал книгу или сайт с описанием синтаксиса VBA.
Пока у тебя знания в программировании на VBA на нулевом
уровне срочно выбрось его из головы и начинай изучать программирование
на AutoLisp, поскольку в последующих версиях Автокада не
будет поддержки VBA

Тем не менее для примера два способа выбора определенного
типа объектов

Код:
[Выделить все]
Option Explicit
Sub SelSetExample1()
Dim pickPt As Variant
Dim oEnt As AcadEntity
Dim oSolid As Acad3DSolid
Dim ftype(0) As Integer
Dim fdata(0) As Variant
Dim dxfCode, dxfValue

pickPt = ThisDrawing.Utility.GetPoint(, vbCrLf & "Укажите точку на ребре тела >>")

     Dim oSset As AcadSelectionSet
          With ThisDrawing.SelectionSets
               While .Count > 0
                    .Item(0).Delete
               Wend
          Set oSset = .Add("TestSset")
          End With
          
          ftype(0) = 0: fdata(0) = "3DSOLID"
          
oSset.SelectAtPoint pickPt, ftype, fdata

     MsgBox "Выбран(о): " & oSset.Count & " объект(ов)"
     
     If oSset.Count <> 1 Then
     Exit Sub
     End If
     
     Set oEnt = oSset.Item(0)
     If Not oEnt Is Nothing Then
     Set oSolid = oEnt
     MsgBox "Объем тела: " & oSolid.Volume & " об. единиц черчения"
     End If
  
End Sub


Sub SelSetExample2()

Dim oEnt As AcadEntity
Dim oSolid As Acad3DSolid
Dim ftype(0) As Integer
Dim fdata(0) As Variant
Dim dxfCode, dxfValue

     Dim oSset As AcadSelectionSet
          With ThisDrawing.SelectionSets
               While .Count > 0
                    .Item(0).Delete
               Wend
          Set oSset = .Add("TestSset")
          End With
          
          ftype(0) = 0: fdata(0) = "3DSOLID"
          
oSset.SelectOnScreen ftype, fdata

     MsgBox "Выбран(о): " & oSset.Count & " объект(ов)"
     
     If oSset.Count <> 1 Then
     Exit Sub
     End If
     
     Set oEnt = oSset.Item(0)
     If Not oEnt Is Nothing Then
     Set oSolid = oEnt
     MsgBox "Объем тела: " & oSolid.Volume & " об. единиц черчения"
     End If
  
End Sub
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.06.2010, 11:45 переместить координатную систему в нужную точку
#3
meugen


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


трижди спасибо! Нет четырижды Спасибо! второй код встал как радной, но, я так и не понял как всё это происходит, к примеру ".Item(0).Delete" почему наченается на точку. всётаки нехвотает хорошей книги с подробным описанием синтаксиса. Я вынужден учит его, ксажелению!

А вот ещё вопросик. в моей порге я использую код "Set BKS1 = ThisDrawing.UserCoordinateSystems.Add(p1, X, Y, "New_BKS_Muhl")" чтобы переместить координатную систему в нужную точку. всё работает но мне не нужно имя "New_BKS_Muhl" какбы изменить этот код чтобы не создовалос имя.
meugen вне форума  
 
Непрочитано 17.06.2010, 12:39
1 | #4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от meugen Посмотреть сообщение
я так и не понял как всё это происходит, к примеру ".Item(0).Delete" почему наченается на точку. всётаки нехвотает хорошей книги с подробным описанием синтаксиса. Я вынужден учит его, ксажелению!
Точка пишется для сокращения повторений записи в тексте кода
Например, вместо такой записи:

Код:
[Выделить все]
ThisDrawing.ActiveLayout.Block.AddCircle point1, radius1
ThisDrawing.ActiveLayout.Block.AddCircle point2, radius2
ThisDrawing.ActiveLayout.Block.AddCircle point3, radius3
Можно использовать блок кода:
With ... End With

Код:
[Выделить все]
With ThisDrawing.ActiveLayout.Block
.AddCircle point1, radius1
.AddCircle point2, radius2
.AddCircle point3, radius3
End With
Чтобы не создавать новую систему координат лучше использовать
функцию TranslateCoordinates
для объекта ThisDrawing.Utility
Смотри Help файл (жми F1 в редакторе VBA)

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.06.2010, 13:38
#5
meugen


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


Спaсибо, помоему разобрался! Нашел на вашем сайте много ссылок, чему очен рад! но ненашел ответа на главний вопрос, может-ли автокад рисовать плоские фигуры в 3D без пересчета?
meugen вне форума  
 
Непрочитано 17.06.2010, 14:00
1 | #6
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от meugen Посмотреть сообщение
о ненашел ответа на главний вопрос, может-ли автокад рисовать плоские фигуры в 3D без пересчета?
Пробуй

Код:
[Выделить все]
Sub CopySolidExample1()
Dim pickPt As Variant
Dim newPt As Variant
Dim oEnt As AcadEntity
Dim oSolid As Acad3DSolid
Dim newSolid As Acad3DSolid
Dim ftype(0) As Integer
Dim fdata(0) As Variant
Dim dxfCode, dxfValue

With ThisDrawing

.SetVariable "OSMODE", 1

pickPt = .Utility.GetPoint(, vbCrLf & "Укажите точку на углу ребрa тела >>")

     Dim oSset As AcadSelectionSet
          With ThisDrawing.SelectionSets
               While .Count > 0
                    .Item(0).Delete
               Wend
          Set oSset = .Add("TestSset")
          End With
          
          ftype(0) = 0: fdata(0) = "3DSOLID"
          
oSset.SelectAtPoint pickPt, ftype, fdata

     If oSset.Count <> 1 Then
     MsgBox "Выбрано больше одного объекта, повторите в другой точке"
     Exit Sub
     End If
     
     Set oEnt = oSset.Item(0)
     If Not oEnt Is Nothing Then
     Set oSolid = oEnt
     newPt = .Utility.GetPoint(pickPt, vbCrLf & "Укажите точку вставки копии >>")
     Set newSolid = oSolid.Copy
     newSolid.Move pickPt, newPt
     End If

  End With ''//ThisDrawing

End Sub
~'J'~
Олег (jr.) вне форума  
 
Непрочитано 18.06.2010, 06:41
#7
AnTe


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


немного не в тему, но
Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
поскольку в последующих версиях Автокада не
будет поддержки VBA
откуда эта информация? Насколько она достоверна?
AnTe вне форума  
 
Непрочитано 18.06.2010, 08:31
1 | #8
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от AnTe Посмотреть сообщение
Насколько она достоверна?
Достоверна насколько это возможно: http://usa.autodesk.com/adsk/servlet...70215#section1
Александр Ривилис вне форума  
 
Непрочитано 18.06.2010, 10:00
#9
sbi


 
Регистрация: 27.04.2008
SPB
Сообщений: 3,285
Отправить сообщение для sbi с помощью Skype™


AnTe Олег (jr.) немного сгустил краски. По ссылки маэстро в 2010 и 2011 можно работать в VBA. Но, и это очевидно, нужен переход на net .
__________________
С уважением sbi
sbi вне форума  
 
Автор темы   Непрочитано 18.06.2010, 10:23
#10
meugen


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


Спасибо за код, но ресует толко в WKS, а я имел ввиду в BKS.
meugen вне форума  
 
Непрочитано 18.06.2010, 10:31
#11
Кулик Алексей aka kpblc
Moderator

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


WKS, BKS - это что такое?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.06.2010, 10:33
#12
meugen


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


простите у меня немецкий AutoCAD, это координатние системы , как по англиски не знаю.
я решил этупроблему так, нарисовал линии в 3D, создал полигон а из полигона выдавил обьект. но как я понимаю это кривое решение.

Последний раз редактировалось meugen, 18.06.2010 в 14:25.
meugen вне форума  
 
Непрочитано 18.06.2010, 14:38
#13
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от meugen Посмотреть сообщение
простите у меня немецкий AutoCAD, это координатние системы , как по англиски не знаю.
я решил этупроблему так, нарисовал линии в 3D, создал полигон а из полигона выдавил обьект. но как я понимаю это кривое решение.
Смотри в справке TranslateCoordinates
Или используй такие функции

Код:
[Выделить все]
''~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~''
''  written by Bryco
'' original code from there:
''  http://forums.autodesk.com/t5/Visual-Basic-Customization/TranslateCoordinates/m-p/1537142/highlight/true
''~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~''
Function ToUcs(Pt As Variant) As Variant
ToUcs = ThisDrawing.Utility.TranslateCoordinates(Pt, acWorld, acUCS, False)
End Function
Function ToWcs(Pt As Variant) As Variant
ToWcs = ThisDrawing.Utility.TranslateCoordinates(Pt, acUCS, acWorld, False)
End Function
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 18.06.2010, 15:13
#14
meugen


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
WKS, BKS - это что такое?
нашел! WKS > WCS
BKS > UCS
meugen вне форума  
 
Автор темы   Непрочитано 21.06.2010, 13:28
#15
meugen


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


Вчера разбил себе лоб об стенку, всёравно не понял как работает выбор обьектов, могу ли я задать подробно вопросы или ето слишком напряжно?

всё, вопрос отпал. Всё заработало как часики. Всем спасибо!!!

Последний раз редактировалось meugen, 22.06.2010 в 13:19.
meugen вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > вызов обьекта в VBA



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пароль к VBA karp_b Программирование 24 29.08.2013 12:43
VBA Есть ли возможность графики в VBA на форме (PictureBox)? Alexey_02 Программирование 8 13.02.2013 14:08
Текст в AutoCAD VBA? Zaraza_1m Программирование 1 16.06.2010 00:06
В чем зло VBA? Vildar Разное 224 18.03.2009 21:26
Вызов лиспа из VBA Ax3 LISP 5 24.02.2008 02:57