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

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

как с помощью vba начертить линию

Ответ
Поиск в этой теме
Непрочитано 09.09.2008, 21:06
как с помощью vba начертить линию
vasyavip
 
Регистрация: 09.09.2008
Сообщений: 47

Здравствуйте, Господа!
Подскажите пожалуйста:
Как с помощью vba начертить группу линий, их образмерить и вставить на чертеже там, где это нужно пользователю!

Я хочу создать базу небольших примитивов, таких как:
линия разрыва, уровень, штамп, спецификация(с выбором количества строк), ведомость расхода стали и все это вставить туда куда надо пользователю а не привязывать к нулевой точке.
Спасибо за ответы.

З.Ы.
завтра скину сюда код спецификации (общестроительной), надеюсь на вашу критику.
Просмотров: 30948
 
Непрочитано 16.09.2008, 00:06
#41
Кулик Алексей aka kpblc
Moderator

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


Во написал-то!
Цитата:
Сообщение от vasyavip Посмотреть сообщение
aka kpblc
Если отойти от таблицы и придти, например к созданию линии разрыва. Это я могу сделать, как мне эту ломаную полилинию вставить не в 0,0,0, а туда, куда я хочу.
Учись анализировать код. Без этого ничего не добьешься.
Я ж тебе расписал, как вставлять что угодно куда угодно. На примере таблицы не катит? А посмотреть метод AddLightWeightPolyline религия не позволяет?
Цитата:
Сообщение от vasyavip Посмотреть сообщение
Я могу написать код , по которому будет чертиться лист по ГОСТ формата всех "А", с выбором в диалоговом окне, какой размер нужен, нужно ли добавить штамп согласования, пока не могу предоставить пользователю возможность заполнить штамп, так как не знаю как вставить текст, вернее как его уместить в рамках ячеек, с нужными параметрами:
высоты, толшины, ширины и т.д.
Одно из двух - либо ты используешь таблицу сложного форматирования, либо программно создаешь блок с атрибутами. Лично я в свое время пошел по второму пути - контролировать проще. А вопрос "умещения" атрибутов в нужные рамки решался постоянным анализом нужной строки и занимаемой ею области. Для работы с таблицей тебе придется дополнительно еще снимать форматирование многострочного текста и задавать ширину через ключ \W. Головняк...
Цитата:
Сообщение от vasyavip Посмотреть сообщение
Есть у меня задумка реализовать в диалоговом режиме проектирование колонны:
Задумка хороша, кроме одного вопроса: а почему только колонны? А балку засобачить? А ферму? А плиту?
Цитата:
Сообщение от vasyavip Посмотреть сообщение
-Здесь возникает дилема: как задать программно радиус закругления гнутого стержня при изменении геометрии от угла в 90 градусов к острому
Если у тебя будут использоваться полилинии, то надо будет (по идее) менять массив координат вершин и вычислять Bunlge (кажется, так правильное название).
Цитата:
Сообщение от vasyavip Посмотреть сообщение
Я хочу вставить <...> в ту точку, которую захочу<...>
Да бога ради. Код тебе предоставлен. Создавай блок (анонимный или "нормальный" - по ситуации; вставляй. При необходимости разбивай и уничтожай исхходник.
Цитата:
Сообщение от vasyavip Посмотреть сообщение
Я хочу вставить спецификацию туда, куда я хочу, хочу в пространстве модели, хочу в пространстве листа...
Ну пиши "перевод" на VBA кода http://www.arcada.com.ua/forum/viewtopic.php?t=486 - получай текущее пространство и вставляй чего хотишь.
Цитата:
Сообщение от vasyavip Посмотреть сообщение
З.Ы. 2
Слов "ДЕРЗАЙ" для осуществления этого недостаточно!
Нужно содействие, а меня отпихивают в дебри!!!
А какое тебе еще содействие надо? Все разжевать? Еще раз?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.09.2008, 00:08
#42
vasyavip


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


и ферму и плиту и много чего еще!
Просто помоги разобраться с кодом!
Покажи как его присоединить не к автокодовской таблице а к моей , то что в начале!
Ага, разжевать и с комментариями! ))

Вот не разберусь с кодом и будете вставлять, и балку, и ферму, и колонну, и хому ты, и каркасы на продавливание плиты, и дополнительную арматуру вокруг колонны в координаты 0,0,0
Бе-е-е

З.Ы.
\W. Головняк... - это фамилия автора идеи?

Почему никто не критикует мою спецификацию и расчет арматуры? Жду!

Последний раз редактировалось vasyavip, 16.09.2008 в 00:18.
vasyavip вне форума  
 
Непрочитано 16.09.2008, 00:44
#43
Кулик Алексей aka kpblc
Moderator

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


Етить твою нехай... Чего помогать-то?
OwnerObject.AddLightWeightPolyline - чего тут расшифровывать? OwnerObject - описание блока (пространство модели или листа - это тоже блок), в который вставляется что? Прааально, полилиния.
OwnerObject.AddLine - это для отрезка.
OwnerObject.AddText - для однострочного текста.
Тебе что, таким образом все примитивы перечислять?
С точки зрения программы (имею в виду нормальное решение) тебе бы стоило написать одну(!) функцию, создающую отрезок со всеми возможными параметрами. И вызывать ее по максимуму. В VBA не силен, да и спать уже хочется, поэтому на написание меня не хватает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.09.2008, 13:49
#44
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


2vasyavip

Dim нужнаяточкавставки As Variant
нужнаяточкавставки = ThisDrawing.Utility.GetPoint(, "Пояснение для юзверя")

можешь по Русски переменные объявлять
stas_org вне форума  
 
Непрочитано 16.09.2008, 13:52
#45
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


нужнаяточкавставки- это массив от 0 до 2 который хранит координаты X,Y,Z точки которую ты указал используя #44
stas_org вне форума  
 
Непрочитано 16.09.2008, 14:20
#46
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Цитата:
Сообщение от vasyavip Посмотреть сообщение
Почему никто не критикует мою спецификацию и расчет арматуры? Жду!
Кнопка РАСЧЕТ лишняя, события combobox_click было бы достаточно.
stas_org вне форума  
 
Автор темы   Непрочитано 16.09.2008, 22:32
#47
vasyavip


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


Спасибо разбираюсь с кодом! Есть зацепка, т.е. немного понял!
Спасибо за критику, постораюсь исправить!
Хочу к кнопке расчета добавить еще и спецификацию из textbox'ов.
Вопрос:
Как создать файл, в который можно записывать информацию из нескольких textbox'ов и потом считывать их от туда!
Это нужно для сохранности информации!
vasyavip вне форума  
 
Непрочитано 17.09.2008, 09:09
#48
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Нужно организовать потоки streemread и streemwrite, много информации в инете имеется, советую отправиться в книжный магазин и купить книгу по VBA, всегда должна быть под рукой.
stas_org вне форума  
 
Непрочитано 17.09.2008, 10:26
#49
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Купите книжку.
__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Автор темы   Непрочитано 18.09.2008, 22:23
#50
vasyavip


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


Код:
[Выделить все]
'*************************************************************************************************


'Сетка осей

'*************************************************************************************************
Private Sub CommandButton3_Click()
Dim lineObja As AcadLine
    Dim startPointa(0 To 2) As Double
    Dim endPointa(0 To 2) As Double
    
    startPointa(0) = Val(TextBox1.Text) + 0#: startPointa(1) = Val(TextBox1.Text) + Val(TextBox2.Text) + 0#: startPointa(2) = 0#
    endPointa(0) = Val(TextBox1.Text) + 0#: endPointa(1) = Val(TextBox3.Text) + 0#: endPointa(2) = 0#
    Set lineObja = ThisDrawing.ModelSpace.AddLine(startPointa, endPointa)
            
    Dim circleObj As AcadCircle
    Dim centerPoint(0 To 2) As Double
    Dim radius As Double
    
    ' Define the circle
    centerPoint(0) = Val(TextBox1.Text) + 0#: centerPoint(1) = Val(TextBox1.Text) + 0#: centerPoint(2) = 0#
    radius = Val(TextBox2.Text) + 0#
    
    ' Create the Circle object in model space
    Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)
'***
    Dim lineObjc As AcadLine
    Dim startPointc(0 To 2) As Double
    Dim endPointc(0 To 2) As Double
    
    startPointc(0) = 100 + Val(TextBox2.Text) + 0#: startPointc(1) = Val(TextBox65.Text) + 0#: startPointc(2) = 0#
    endPointc(0) = Val(TextBox65.Text) + 0#: endPointc(1) = 100 + Val(TextBox2.Text) + 0#: endPointc(2) = Val(TextBox3.Text) + 0#
    Set lineObjc = ThisDrawing.ModelSpace.AddLine(startPointc, endPointc)
            
    Dim circleObjc As AcadCircle
    Dim centerPointc(0 To 2) As Double
    Dim radiusc As Double
    
    ' Define the circle
    centerPointc(0) = Val(TextBox65.Text) - 200 + 0#: centerPointc(1) = Val(TextBox65.Text) + 0#: centerPointc(2) = 0#
    radiusc = Val(TextBox2.Text) + 0#
    
    ' Create the Circle object in model space
    Set circleObjc = ThisDrawing.ModelSpace.AddCircle(centerPointc, radiusc)
'****

'****
'растиражируем линию
    Dim numberOfRows0 As Long
    Dim numberOfColumns0 As Long
    Dim numberOfLevels0 As Long
    Dim distanceBwtnRows0 As Double
    Dim distanceBwtnColumns0 As Double
    Dim distanceBwtnLevels0 As Double
    numberOfRows0 = 1 ' количество строк
    numberOfColumns0 = Val(TextBox6.Text) ' количество колонок
    numberOfLevels0 = 1
    distanceBwtnRows0 = 1 'расстояние между строк
    distanceBwtnColumns0 = Val(TextBox5.Text) 'расстояние между колонками
    distanceBwtnLevels0 = 1
    
    If TextBox5.Text <= 0 Then 'выполняем условие защиты выполнения программы от введенного "нуля"
    numberOfColumnsa = 1
    TextBox5.Text = 1
    End If
    If TextBox6.Text <= 0 Then 'выполняем условие защиты выполнения программы от введенного "нуля"
    distanceBwtnColumnsa = 500
    TextBox6.Text = 500
    End If
    ' чертим растиражированную линию
    Dim retObja As Variant
    retObja = lineObja.ArrayRectangular(numberOfRows0, numberOfColumns0, numberOfLevels0, distanceBwtnRows0, distanceBwtnColumns0, distanceBwtnLevels0)
     ' чертим растиражированный круг
    Dim retObjb As Variant
    retObjb = circleObj.ArrayRectangular(numberOfRows0, numberOfColumns0, numberOfLevels0, distanceBwtnRows0, distanceBwtnColumns0, distanceBwtnLevels0)
'****

'****
'растиражируем линию
    Dim numberOfRowsc As Long
    Dim numberOfColumnsc As Long
    Dim numberOfLevelsc As Long
    Dim distanceBwtnRowsc As Double
    Dim distanceBwtnColumnsc As Double
    Dim distanceBwtnLevelsc As Double
    numberOfRowsc = Val(TextBox36.Text) ' количество строк
    numberOfColumnsc = 1 ' количество колонок
    numberOfLevelsc = 1
    distanceBwtnRowsc = Val(TextBox35.Text) 'расстояние между строк
    distanceBwtnColumnsc = 1 'расстояние между колонками
    distanceBwtnLevelsc = 1
    
    If TextBox5.Text <= 0 Then 'выполняем условие защиты выполнения программы от введенного "нуля"
    numberOfColumnsc = 1
    TextBox5.Text = 1
    End If
    If TextBox6.Text <= 0 Then 'выполняем условие защиты выполнения программы от введенного "нуля"
    distanceBwtnColumnsc = 500
    TextBox6.Text = 500
    End If
    ' чертим растиражированную линию
    Dim retObjc As Variant
    retObjc = lineObja.ArrayRectangular(numberOfRowsc, numberOfColumnsc, numberOfLevelsc, distanceBwtnRowsc, distanceBwtnColumnsc, distanceBwtnLevelsc)
     ' чертим растиражированный круг
    Dim retObjd As Variant
    retObjd = circleObj.ArrayRectangular(numberOfRowsc, numberOfColumnsc, numberOfLevelsc, distanceBwtnRowsc, distanceBwtnColumnsc, distanceBwtnLevelsc)
'****

    UserForm1.Hide
    
End Sub
Почему сетка не чертится как надо?
Как сделать так, чтобы можно было изменять количество и шаг у осей в диалоговом режиме?
Если можно, подправьте мой код!
vasyavip вне форума  
 
Непрочитано 19.09.2008, 07:03
#51
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


скинь весь проект *.dvb
stas_org вне форума  
 
Непрочитано 19.09.2008, 08:54
#52
Кулик Алексей aka kpblc
Moderator

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


В качестве рац.предложения (которое практически гарантированно принято не будет): создавать блок с атрибутом обозначения оси и устанавливать его.
P.S. Основной код смотрел "по диагонали".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.09.2008, 15:55
#53
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


>Почему сетка не чертится как надо?

А как надо?
__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Автор темы   Непрочитано 20.09.2008, 21:46
#54
vasyavip


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


Вот весь проект по сеткам!
Что там не так?
Почему не чертит, как надо??
Вложения
Тип файла: rar tab2.rar (27.6 Кб, 106 просмотров)
vasyavip вне форума  
 
Непрочитано 20.09.2008, 21:54
#55
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Потому что сделан криво.
Пользуйтесь дебаггером.
__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Непрочитано 22.09.2008, 09:52
#56
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Зачем val ? Их надо в Double преобразовывать, ни одного цикла не заметил, честно говоря без них подобный алгоритм не представляю. Ну и без дебагера никуда. С нужнойточкойвставки так и не разобрался?
stas_org вне форума  
 
Автор темы   Непрочитано 22.09.2008, 20:01
#57
vasyavip


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


ПОка нет. Вот, на работе завалили! Я постараюсь вставить код полилинии в так код, который алексей показал.
А с начала, наверное, сделаю форматку разных размеров и направлений (альбомная и книжная). Хчу сделать их в диалоговом режиме, чтоб пользователь выбирал сам, и еще, чтоб он выбирал, надо ли ему штамп согласования и сколько штук!
А так взял работу на дом. Нет, чтоб отдыхать... работа, блин, работа...
vasyavip вне форума  
 
Непрочитано 23.09.2008, 10:21
#58
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Прямо Наполеоновские планы. Больше толку будет если что-нибудь одно до ума довести.
stas_org вне форума  
 
Непрочитано 23.09.2008, 10:23
#59
Кулик Алексей aka kpblc
Moderator

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


vasyavip, погляди в download - там добра этого (форматок то бишь) завались. И без программирования
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.09.2008, 10:54
#60
stas_org


 
Регистрация: 05.04.2007
Самара
Сообщений: 1,199


Мартышкин труд делает инженера
stas_org вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > как с помощью vba начертить линию

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из автокада с помощью макроса-кнопки запустить файл exe dextron3 Программирование 37 15.12.2008 19:15
Как начертить? Circul AutoCAD 10 31.10.2007 15:00
Как в Акаде начертить коническую или цилиндрическу развёртку Grinzaid AutoCAD 1 29.01.2004 13:23
Подскажите как построить кривую с помощью команды SPLiNE, к boban Программирование 1 02.11.2003 19:58
Как на LISPе автоматически выбрать линию и точку? Mikhail LISP 4 28.10.2003 10:33