Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
-14 / 0 / 0
Регистрация: 28.03.2023
Сообщений: 28

[AutoCAD] Построение 2D сетки по координатам из эксель

06.04.2023, 06:19. Показов 1566. Ответов 13

Студворк — интернет-сервис помощи студентам
Люди добрые, такой вопрос, есть код в теории создающий 2D сетку по координатам из эксель, а на практике выдаёт полную чушь. Начинаю только работать в VBA, поэтому многое не понимаю, помогите пожалуйста!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Sub Create3DMesh()
  
    Dim AP As Excel.Application
    Dim wb As Excel.Workbook
    Dim ws As Excel.Worksheet
    Dim LastRow As Long
 
'Подключение и поиск файла Эксель
 
    Set AP = Excel.Application
    fldr = InputBox("Укажите адрес файла")
    Excel.Workbooks.Open filename:=fldr
    Set wb = AP.Workbooks.Open(fldr)
    Set ws = wb.Worksheets("Лист1")
  
    Dim meshObj As AcadPolygonMesh
    Dim mSize, nSize, Count As Integer
  
    Dim points() As Double
    ReDim points(0 To (Worksheets.Item("Лист1").Cells(2, 2).End(xlDown).Row - 1) * 3 - 1) As Double
  
    For i = LBound(points) To Worksheets.Item("Лист1").Cells(2, 2).End(xlDown).Row - 2
    points(i * 3) = Worksheets.Item("Лист1").Cells(2 + i, 2).Value
    points(i * 3 + 1) = Worksheets.Item("Лист1").Cells(2 + i, 3).Value
    points(i * 3 + 2) = Worksheets.Item("Лист1").Cells(2 + i, 4).Value
 
     mSize = 3: nSize = 3
 
    Next i
 
    Set meshObj = ThisDrawing.ModelSpace.Add3DMesh(mSize, nSize, points)
    ZoomAll
    Set meshObj = Nothing
    Set xlApp = Nothing
    Set docXl = Nothing
 
 
    R = R + 1
 
 
End Sub
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2023, 06:19
Ответы с готовыми решениями:

[AutoCAD] Построение линии по координатам из Эксель
Работаю на VBA совсем недавно, пишу программу для автокада, которая берёт координаты их эксель и...

[AutoCAD] Экспорт координат в блоков в эксель
Этот код сохраняет всё в txt файл, не могу додумать как преобразовать это для эксель, помогите...

Почему при открытии файла эксель, появляется из фонового скрытого режима мой файл эксель
Добрый день уважаемые форумчане, столкнулся с такой проблеммой. Есть небольшая программка которая...

13
Динохромный
1636 / 774 / 287
Регистрация: 22.12.2015
Сообщений: 2,411
06.04.2023, 08:57
Babidjon, пк под рукой нет, насколько я вижу по коду - если вы выбрали размерность 3х3, то и точек у вас должно быть 9, и соответственно координат в Экселе - 27 штук, причем уложены они должны быть рядами по размерности М, а не в произвольном порядке - отрисовка происходит последователтно рядами.
Нужно ваши координаты увидеть, скорее всего проблемы с ними.
0
-14 / 0 / 0
Регистрация: 28.03.2023
Сообщений: 28
06.04.2023, 08:59  [ТС]
Вот координаты
Вложения
Тип файла: xlsx 123.xlsx (44.4 Кб, 22 просмотров)
0
Динохромный
1636 / 774 / 287
Регистрация: 22.12.2015
Сообщений: 2,411
06.04.2023, 09:15
Babidjon, у вас 960 точек, значит размерность MxN может быть 240х4, 120х8, 60х16 и т.п., быть 3х3 она не может. Ну и координаты вроде бы сетке не соответствуют - они не рядами уложены.
А зачем вам именно сетка? Я не сильно знаю 3д акада, но вроде бы там есть поверхность, которая из произвольного набора точек формирует 3д-поверхность, это не то, что вам нужно? В сетке координаты нужно отсортировать в правильном порядке - сначала первый ряд, затем второй и тд, иначе не заработает.
0
-14 / 0 / 0
Регистрация: 28.03.2023
Сообщений: 28
06.04.2023, 09:32  [ТС]
Да у меня задача на работе на уровне циркового представления, сделать из классических комманд автокада, программу на VBA. Вот, сижу велосипед собираю. Сейчас попробую уложить координаты рядами спасибо вам!
0
-14 / 0 / 0
Регистрация: 28.03.2023
Сообщений: 28
06.04.2023, 10:44  [ТС]
212
0
 Аватар для Angry Old Man
2995 / 738 / 310
Регистрация: 26.03.2022
Сообщений: 1,379
Записей в блоге: 1
06.04.2023, 16:03
Цитата Сообщение от Babidjon Посмотреть сообщение
Сейчас попробую уложить координаты рядами
Не понимаю, это как?
Что такое mSize = 3: nSize = 3?
У меня ощущение, что на вход процедуры должен поступить двумерный массив.
Вот два варианта с чтением координат из таблицы Excel в массив: двумерный (намного быстрее!) и одномерный
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
Sub Create3DMesh_two_dimensional()
 
Const fStart As String = "D:\"              'Папка по умолчанию для выбора файлов
Const R0 As String = "B2"                   'Адрес первой верхней левой ячейки с координатами
Const Sh As String = "Лист1"
 
Dim AP As Object
Dim fldr As String
Dim points, i0 As Long, irow As Long, icol As Long
 
Set AP = CreateObject("Excel.Application")
 
If Not FileName(AP, fldr, fStart) Then
    MsgBox "Excel-файл с координатами не выбран"
    Exit Sub
End If
 
With AP
    .Visible = False 'True  '  False
    .Application.DisplayAlerts = False
    .Application.ScreenUpdating = False
    .Workbooks.Open (fldr)
    
    points = .Sheets(Sh).Range(R0).Resize(.Range(R0).End(-4121).Row - .Range(R0).Row + 1, 3)
        
    .ActiveWorkbook.Close
    .Application.DisplayAlerts = True
    .Application.ScreenUpdating = True
End With
Set AP = Nothing
 
i0 = LBound(points, 1): irow = UBound(points, 1): icol = UBound(points, 2)
 
MsgBox CStr(points(i0, i0)) + vbTab + CStr(points(i0, i0 + 1)) + vbTab + CStr(points(i0, i0 + 2)) + vbCr + _
        CStr(points(irow, i0)) + vbTab + CStr(points(irow, i0 + 1)) + vbTab + CStr(points(irow, i0 + 2))
 
'    Dim meshObj As AcadPolygonMesh
'    Dim mSize, nSize, Count As Integer
'    Set meshObj = Nothing
'    Set meshObj = ThisDrawing.ModelSpace.Add3DMesh(mSize, nSize, points)
'    ZoomAll
End Sub
 
Sub Create3DMesh_one_dimensional()
 
Const fStart As String = "D:\"              'Папка по умолчанию для выбора файлов
Const R0 As String = "B2"                   'Адрес первой верхней левой ячейки с координатами
Const Sh As String = "Лист1"
 
Dim AP As Object
Dim fldr As String
Dim points, i0 As Long, irow As Long, icol As Long, i As Long
Dim Rpoints As Object, xyz As Object
 
Set AP = CreateObject("Excel.Application")
 
If Not FileName(AP, fldr, fStart) Then
    MsgBox "Excel-файл с координатами не выбран"
    Exit Sub
End If
 
With AP
    .Visible = False 'True  '  False
    .Application.DisplayAlerts = False
    .Application.ScreenUpdating = False
    .Workbooks.Open (fldr)
    
    
    Set Rpoints = .Sheets(Sh).Range(R0).Resize(.Range(R0).End(-4121).Row - .Range(R0).Row + 1, 3)
    i0 = 0: icol = Rpoints.Count
    
    ReDim points(i0 To icol - 1)
    i = i0
    For Each xyz In Rpoints
        points(i) = xyz
        i = i + 1
    Next
    .ActiveWorkbook.Close
    .Application.DisplayAlerts = True
    .Application.ScreenUpdating = True
End With
Set AP = Nothing
 
i0 = LBound(points, 1): icol = UBound(points, 1)
 
MsgBox CStr(points(i0)) + vbTab + CStr(points(i0 + 1)) + vbTab + CStr(points(i0 + 2)) + vbCr + _
        CStr(points(icol - 2)) + vbTab + CStr(points(icol - 1)) + vbTab + CStr(points(icol))
 
'    Dim meshObj As AcadPolygonMesh
'    Dim mSize, nSize, Count As Integer
'    Set meshObj = Nothing
'    Set meshObj = ThisDrawing.ModelSpace.Add3DMesh(mSize, nSize, points)
'    ZoomAll
End Sub
 
 
Function FileName(AP As Object, FileXls As String, StartF As String) As Boolean
 
With AP.FileDialog(3)
    .AllowMultiSelect = False
    .Title = "Выбирайте файл с координатами"        'заголовок окна диалога
    .Filters.Clear                                  'очищаем установленные ранее типы файлов
    .Filters.Add "Файлы Excel", "*.xls*", 1         'устанавливаем возможность выбора только файлов Excel
    .FilterIndex = 1                                'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
    .InitialFileName = StartF                       'назначаем папку отображения и имя файла по умолчанию
    .InitialView = 2                                'вид диалогового окна(доступно 9 вариантов)
 
    FileName = Not .Show = 0
    If FileName Then FileXls = .SelectedItems(1) Else FileXls = ""
End With
End Function
Добавлено через 54 минуты
xldown необходимо заменить на -4121
0
Динохромный
1636 / 774 / 287
Регистрация: 22.12.2015
Сообщений: 2,411
06.04.2023, 17:04
Цитата Сообщение от Angry Old Man Посмотреть сообщение
на вход процедуры должен поступить двумерный массив.
Метод Add3DMesh требует аргумента одного одномерного массива Double, в котором координаты перечислены в таком порядке: x0, y0, z0, x1, y1, z1, x2, y2, z2, ... xn, yn, zn.
Цитата Сообщение от Angry Old Man Посмотреть сообщение
Не понимаю, это как?
Если точки обозначить как А1, А2, ... Аn, то на координатной плоскости (т.е. на графике) точки должны располагаться так:
А1, А2, А3,
А4, А5, А6,
А7, А8, А9.
Если в метод точки отправить в порядке скажем {А1, А7, А2, А9, А3, А4, А8, А7}, то вершины он соединит в этом порядке, т.к. примитив строится построчно в порядке очередности внесенных координат, вместо ортогональной сетки получится ломаная в соответствии с порядком координат.
Цитата Сообщение от Angry Old Man Посмотреть сообщение
Что такое mSize = 3: nSize = 3?
Это размерность, как автокад должен нарезать одномерный массив, чтобы получился примитив, лежит в пределах от 2 до 256 точек. Если у меня всего 64 точки, я могу сделать поверхность 2х32, могу 8х8, могу 32х2.

Соответственно, если в одномерном массиве количество координат равно K, а размерность элемента MxN точек, то должно соблюдаться условие M*N=K/3, иначе автокад будет ругаться на неправильное количество координат.
0
Динохромный
1636 / 774 / 287
Регистрация: 22.12.2015
Сообщений: 2,411
06.04.2023, 17:13
Результат работы кода для размерности 4х4 (красный), а также для 2х8 и 8х2 с одинаковыми координатами (просто сместил начерченное вбок, чтобы было видно).
Миниатюры
[AutoCAD] Построение 2D сетки по координатам из эксель  
1
 Аватар для Angry Old Man
2995 / 738 / 310
Регистрация: 26.03.2022
Сообщений: 1,379
Записей в блоге: 1
06.04.2023, 17:26
Цитата Сообщение от Dinoxromniy Посмотреть сообщение
Метод Add3DMesh требует аргумента одного одномерного массива Double, в котором координаты перечислены в таком порядке: x0, y0, z0, x1, y1, z1, x2, y2, z2, ... xn, yn, zn.
моя процедурка Create3DMesh_one_dimensional() в предыдущем посте делает массив именно так. Не догоняю, что еще нужно?
Разве что подправить
ReDim points(i0 To icol - 1) As Double
1
Динохромный
1636 / 774 / 287
Регистрация: 22.12.2015
Сообщений: 2,411
06.04.2023, 18:21
Цитата Сообщение от Angry Old Man Посмотреть сообщение
Не догоняю, что еще нужно?
От процедуры насколько я понимаю ничего не нужно, с ней все ок.

Нужно чтобы в экселе координаты были введены в порядке, который диктует метод.

На скрине результат работы кода для координат из экселевского файла для размерностей 192х5, 96х10, 48х20, 24х40, 12х80, 6х160, 3х320. Что-то мне подсказывает, что порядок координат в файле не сильно правильный (вершины все на своих местах, а вот порядок их соединения - ну как бы размерностей не так много, вряд ли существует правильная я вроде бы все перебрал).

У акада civil 3d есть возможность отрисовки по точкам, абсолютно не важно в каком порядке они висят. А AcadPolygonMesh мне видится неподходящим инструментом для реализации хотелок, но ТС виднее.
Миниатюры
[AutoCAD] Построение 2D сетки по координатам из эксель  
0
Динохромный
1636 / 774 / 287
Регистрация: 22.12.2015
Сообщений: 2,411
06.04.2023, 18:23
Вот как это вблизи выглядит, и они все такие:
Миниатюры
[AutoCAD] Построение 2D сетки по координатам из эксель  
0
-14 / 0 / 0
Регистрация: 28.03.2023
Сообщений: 28
07.04.2023, 05:40  [ТС]
Нет на этой недели возможности поставить Civil на рабочий пк, в понедельник поставят. Можно вас попросить для наглядности прогнать координаты через него? Буду крайне благодарен

Добавлено через 1 минуту
Цитата Сообщение от Angry Old Man Посмотреть сообщение
Вот два варианта с чтением координат из таблицы Excel в массив: двумерный (намного быстрее!) и одномерный
Добавлено через 7 минут
Спасибо за ответ!!! подогнал под себя, но всё равно всё строится криво косо. Дело видать действительно в координатах эксель
0
Динохромный
1636 / 774 / 287
Регистрация: 22.12.2015
Сообщений: 2,411
07.04.2023, 08:16
Цитата Сообщение от Babidjon Посмотреть сообщение
прогнать координаты через него?
У меня нет civila, да и работал я в нем лет около 12 назад. Но поверхности я помнится строил, да и в поиске пишут, что это возможно.
Цитата Сообщение от Babidjon Посмотреть сообщение
подогнал под себя
Я вот VBA начинал кодить именно под автокад и только потом перешел на офис. При переходе на 64 бита некоторые модули, которые я написал для стандартного взаимодействия (и затачивал остальной код на работу с ними), работать перестали.

С задачами, подобными вашей, таких проблем нет, но нужно себе и другую сторону представлять - перенести координаты из экселя прямо в код VBA - задача минут на 5, решается условным форматированием или текстовыми функциями, плюс - поиск и замена "," на ".".

VBA доступ предпочтителен, но если нужно допустим залить координаты в GPS трекер, то приходится прописывать теги, а там порядок не всегда математический, и тогда - работать с экселем несколько удобнее, чем с VBA (ну или приходится комбинировать, что чаще). Короче, желательно уметь и так и эдак.

В приложенном файле достаточно скопировать желтые ячейки прямо в VBA редактор, оформление заняло минут 5.
Вложения
Тип файла: xlsx 12345.xlsx (64.4 Кб, 24 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.04.2023, 08:16
Помогаю со студенческими работами здесь

Построить графики функций (на одной координатной сетке)
Срочно нужна помощь по графике. Задача. Построить графики функций (на одной координатной сетке)....

Построить график функций на одной координатной сетке
Построить график функций(на одной координатной сетке) Вывести всю сопроводительную...

График в полярных координатах на форме координатной сеткой
Здравствуйте Дело вот в чем, нарисовал координатную сетку, код представлен ниже, теперь надо...

Нарисовать схему по координатам на сетке и получить их значения отдельно для расчетов
В общих словах нужно сделать форму, в которой можно будет нарисовать различные варианты рамных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru