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

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

Vba. Добавление размера дуги в блок

Ответ
Поиск в этой теме
Непрочитано 31.03.2016, 16:07 #1
Vba. Добавление размера дуги в блок
Владимир_М
 
Регистрация: 05.11.2015
Сообщений: 585

Вопрос весь на картинках. Макрос создает блок, внутри которого добавляется размер дуги.
Результат на первой картинке. Размер дуги, как видно, слепился в одну точку. Казалось бы неправильно заданы точки. Но если разбить блок, то все встает на свои места как и предполагалось в коде. Разбитый блок - вторая картинка. Т. е. получается вся геометрия задана правильно.
Кто знает, что это за напасть такая?

Миниатюры
Нажмите на изображение для увеличения
Название: Скриншот (2016.03.31 18-46-50).jpg
Просмотров: 37
Размер:	49.2 Кб
ID:	167942  Нажмите на изображение для увеличения
Название: Скриншот (2016.03.31 18-46-25).jpg
Просмотров: 33
Размер:	34.8 Кб
ID:	167943  

Просмотров: 3793
 
Непрочитано 31.03.2016, 16:13
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


А можно сам файл выложить? Гадать по картинкам не очень интересно и продуктивно...
Boxa вне форума  
 
Непрочитано 31.03.2016, 16:25
#3
swell{d}

гадание на конечно-элементной гуще
 
Регистрация: 31.05.2006
Düsseldorf
Сообщений: 7,604


Регенерировать может нужно?
__________________
.: WikiЖБК + YouTube :.
swell{d} вне форума  
 
Автор темы   Непрочитано 31.03.2016, 16:30
#4
Владимир_М


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


Вот файл


Регенерация не помогает.
Вложения
Тип файла: dwg
DWG 2013
Чертеж2.dwg (35.6 Кб, 12 просмотров)
Владимир_М вне форума  
 
Непрочитано 31.03.2016, 16:43
#5
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Есть подозрение, что Вы не задаете точку вставки текста размера и он улетает в 0,0,0 системы координат блока...
Boxa вне форума  
 
Автор темы   Непрочитано 31.03.2016, 16:59
#6
Владимир_М


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




Да и у меня подозрение, что все 4 точки в 0,0,0. Но, вроде, все точки заданы.. Как их еще задавать?
Тем более линейные размеры нормально рисуются в том же блоке...
Код:
[Выделить все]
Dim location(0 To 2) As Double
Set layerObj = ThisDrawing.Layers.Item("Размеры")
ThisDrawing.ActiveLayer = layerObj
'размер хвостика
Dim dimObja As AcadDimAligned
point1(0) = pn(0): point1(1) = pn(1)
point2(0) = pn(2): point2(1) = pn(3)
location(0) = point1(0) + 1: location(1) = point1(1) - 8 * 10 / m
Set dimObja = blockObj.AddDimAligned(point2, point1, location)

'размер дуги
    Dim center(0 To 2) As Double
    center(0) = pn(2): center(1) = pn(1) + r_zag / m: center(2) = 0#
    Dim stPoint(0 To 2) As Double
    stPoint(0) = center(0): stPoint(1) = pn(1): stPoint(2) = 0#
    Dim EndPoint(0 To 2) As Double
    EndPoint(0) = center(0): EndPoint(1) = pn(5): EndPoint(2) = 0#
    
    Dim ptArcPoint(2) As Double
    ptArcPoint(0) = center(0) - 8 * 10 / m - r_zag / m: ptArcPoint(1) = center(1): ptArcPoint(2) = 0#
    
    Dim oAcadDimArcLength As AcadDimArcLength
    Set oAcadDimArcLength = blockObj.AddDimArc(center, stPoint, EndPoint, ptArcPoint)
Владимир_М вне форума  
 
Непрочитано 31.03.2016, 17:31
#7
swell{d}

гадание на конечно-элементной гуще
 
Регистрация: 31.05.2006
Düsseldorf
Сообщений: 7,604


http://vbamodel.narod.ru/AutoCAD/ex_adddimangular.htm
__________________
.: WikiЖБК + YouTube :.
swell{d} вне форума  
 
Непрочитано 31.03.2016, 17:39
#8
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Без всего кода несколько не удобно, но вот эта строчка смущает
EndPoint(1) = pn(5) ИМХО, там что то типа pn(1) + 2*r_zag / m должно быть

И еще, зачем вы столько новых сущностей и точек на вводили? из за этого и путаница
Код:
[Выделить все]
Dim location(0 To 2) As Double
Set layerObj = ThisDrawing.Layers.Item("Размеры")
ThisDrawing.ActiveLayer = layerObj
'размер хвостика
Dim dimObja As AcadDimAligned
point1(0) = pn(0)
point1(1) = pn(1)

point2(0) = pn(2)
point2(1) = pn(3)

location(0) = pn(0) + 1
location(1) = pn(1) - 8 * 10 / m

Set dimObja = blockObj.AddDimAligned(point2, point1, location)

'размер дуги
    Dim center(0 To 2) As Double
    center(0) = pn(2)
    center(1) = pn(3) + r_zag / m
    center(2) = 0#
    
    Dim stPoint(0 To 2) As Double
    stPoint(0) = pn(2)
    stPoint(1) = pn(3)
    stPoint(2) = 0#
    
    Dim EndPoint(0 To 2) As Double
    EndPoint(0) = pn(2)
    EndPoint(1) = pn(3) + 2 * r_zag / m
    EndPoint(2) = 0#
    
    Dim ptArcPoint(2) As Double
    ptArcPoint(0) = pn(2) - 8 * 10 / m - r_zag / m
    ptArcPoint(1) = center(1)
    ptArcPoint(2) = 0#
    
    Dim oAcadDimArcLength As AcadDimArcLength
    Set oAcadDimArcLength = blockObj.AddDimArc(center, stPoint, EndPoint, ptArcPoint)

Последний раз редактировалось Boxa, 31.03.2016 в 17:44.
Boxa вне форума  
 
Автор темы   Непрочитано 31.03.2016, 18:15
#9
Владимир_М


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


Цитата:
Сообщение от Boxa
И еще, зачем вы столько новых сущностей и точек на вводили? из за этого и путаница
Каких именно сущностей? и с точками? не очень понял... это просто немного переделанные примеры из справки VBA-acad по отрисовке размеров... наверное, в задании точек чуток здесь можно соптимизировать, но навряд ли от этого результат изменится...
Тот код, что Вы выдали, он у Вас нормально сработал? У меня и с Вашим кодом получилось все то же самое, что и и было... (у меня Асаd 2016)

Взял отдельный пример из справки Sub Example_AddDimArc(). Все естественно работает. Но при замене ThisDrawing.ModelSpace на ThisDrawing.Blocks происходит то же, что и в моём случае. Т. е. причина именно в этом.
Но что делать? так и непонятно...

Последний раз редактировалось Владимир_М, 31.03.2016 в 19:14.
Владимир_М вне форума  
 
Непрочитано 31.03.2016, 19:04
1 | #10
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


1. Код этот не я выдал, это Ваш же код, только оформленный несколько иначе.
2. И как я мог Ваш код попробовать, если Вы опубликовали только фрагмент?
3. Все оказалось несколько сложнее, но Поиск никто не отменял : http://adndevblog.typepad.com/autoca...using-vba.html

По ссылке не совсем рабочий код, вот такой отработал правильно и корректно в autocad 2014 x64
Код:
[Выделить все]
Sub Example_AddDimArc()
  
    'Start point
    Dim ptArcStPoint(2) As Double
    ptArcStPoint(0) = 0
    ptArcStPoint(1) = -10
    ptArcStPoint(2) = 0
    
    'End point
    Dim ptArcEnPoint(2) As Double
    ptArcEnPoint(0) = 0
    ptArcEnPoint(1) = 10
    ptArcEnPoint(2) = 0
    
    'Center point
    Dim ptArcCPoint(2) As Double
    ptArcCPoint(0) = 0
    ptArcCPoint(1) = 0
    ptArcCPoint(2) = 0
    
    'Arc point
    Dim ptArcPoint(2) As Double
    ptArcPoint(0) = 120
    ptArcPoint(1) = 10
    
    Dim oMS As AcadModelSpace
    Set oMS = ThisDrawing.ModelSpace
    Dim oAcadDimArcLength As AcadDimArcLength
    Set oAcadDimArcLength = oMS.AddDimArc(ptArcCPoint, ptArcStPoint, ptArcEnPoint, ptArcPoint)
    
    ' Create the block
    Dim blockObj As AcadBlock
    Dim insertionPnt(0 To 2) As Double
    insertionPnt(0) = 0#
    insertionPnt(1) = 0#
    insertionPnt(2) = 0#
    Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "CircleBlock")
    
    ' Insert block
    Dim blockRefObj As AcadBlockReference
    insertionPnt(0) = 2
    insertionPnt(1) = 2
    insertionPnt(2) = 0
    Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, "CircleBlock", 1#, 1#, 1#, 0)
    
    'Copy dim to Block
    Dim objCollection(0) As Object
    Set objCollection(0) = oAcadDimArcLength
    Dim retObjects As Variant
    retObjects = ThisDrawing.CopyObjects(objCollection, blockObj)
 
    oAcadDimArcLength.Delete
    blockObj = Nothing
    oAcadDimArcLength = Nothing

End Sub
ЗЫ.
Интересно то, что и в nanoCAD созданном на основе Tiega, эта же ошибка присутствует

Последний раз редактировалось Boxa, 31.03.2016 в 19:20. Причина: Добавил код
Boxa вне форума  
 
Автор темы   Непрочитано 31.03.2016, 19:35
#11
Владимир_М


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
По ссылке не совсем рабочий код, вот такой отработал правильно и корректно
и у меня тоже! Boxa, большое спасибо!
Владимир_М вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Vba. Добавление размера дуги в блок

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли в окне свойств размера настроить так чтобы текст размера всегда был горизонтальным? МишаИнженер AutoCAD 12 29.12.2011 12:11
динамический блок - как изменить текст размера? voverrr Динамические блоки 6 13.01.2011 11:33
Как извлечь из размера значение, т.е. текст??? Rubль Программирование 10 24.08.2009 17:24
Лисп для проставления размера длины дуги AVF LISP 18 29.10.2004 15:45