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

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

Работа с массивами Mtext

Ответ
Поиск в этой теме
Непрочитано 07.02.2014, 23:40 #1
Работа с массивами Mtext
joomandji
 
инженер КИПиА
 
Сумы
Регистрация: 06.02.2014
Сообщений: 8

Добрый день, уважаемые участники форума! Работаю проектировщиком части проекта КИПиА и часто сталкиваюсь с задачами:

1) перенумеровать выделенный массив mText, например увеличить все числа, выделенные пользователем на 2 или уменьшить.
2) отсортировать массив номеров кабелей по возрастанию.
3) имеется 2 потока кабелей, необходимо сравнить эти потоки и выдать результирующий поток, удалив повторяющиеся номера.
4) необходимо автоматически подсчитать длины кабелей и труб на схеме подключения внешних проводок.

Дорогие друзья, если у кого-нибудь есть наработки в этой области буду рад.

С ув. Вячеслав!
Просмотров: 5486
 
Непрочитано 09.02.2014, 11:09
#2
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,855


Две вещи не понятные в вопросе. О какой программе идёт речь. Втрое массив это как функцтия Автокада или ваше условное название выбранных mText_тов. Если речь идёт всётаки об Автокаде то это чертёжная программа, или как иногда её называют чертилка и он не анализирует ни какие потоки без сторонних программ. В данной ситуации нужно выбирать программу в которой можно проектировать и считать длинны и объёмы по сетям.

Последний раз редактировалось Valery Brelovsky, 09.02.2014 в 17:56.
Valery Brelovsky вне форума  
 
Непрочитано 09.02.2014, 12:17
#3
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


Valery Brelovsky, не так категорично... Первое можно сделать командой их экспрессов (только если задача, чтобы было по порядку). Порядок присвоения по x или y или в порядке указания. Остальные вопросы, небось, тоже можно в какой-то мере решить силами наших лисп-овцев. Автору стоило бы пошерстить форум (в т.ч. вручную потратить время). Подобные вопросы уже были. Может, и не совсем 100% такие, но похожие.
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 09.02.2014, 18:01
#4
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,855


Категорично не категорично. Да можно и лиспы пошерстить, Но всё таки для начала попробовать специализированные программы для сетей. И возможно вопросы отпадут.
Valery Brelovsky вне форума  
 
Автор темы   Непрочитано 09.02.2014, 19:03
#5
joomandji

инженер КИПиА
 
Регистрация: 06.02.2014
Сумы
Сообщений: 8


Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
Две вещи не понятные в вопросе. О какой программе идёт речь. Втрое массив это как функцтия Автокада или ваше условное название выбранных mText_тов. Если речь идёт всётаки об Автокаде то это чертёжная программа, или как иногда её называют чертилка и он не анализирует ни какие потоки без сторонних программ. В данной ситуации нужно выбирать программу в которой можно проектировать и считать длинны и объёмы по сетям.
Во-первых речь идет о LISP или VBA программе, также если есть другие варианты (напр. установочные файлы) для ACAD. Во-вторых, возможно я двузначно выразился, но под массивом mText_тов я подразумевал совокупность объектов типа mText, выделенных пользователем (естественно состоящих из чисел).

C ув. Вячеслав!
joomandji вне форума  
 
Непрочитано 09.02.2014, 20:49
#6
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,376


Попробуйте такой калькулятор:
Вложения
Тип файла: rar Geo_Calk_09.rar (2.4 Кб, 94 просмотров)
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 09.02.2014, 21:42
#7
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от joomandji Посмотреть сообщение
Во-первых речь идет о LISP или VBA программе
Тогда какого черта вопрос делает в "AutoCAD", а не в "Программирование"? Тема перенесена
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 09.02.2014 в 21:50.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.02.2014, 21:46
#8
joomandji

инженер КИПиА
 
Регистрация: 06.02.2014
Сумы
Сообщений: 8


как запустить Вашу программу?

----- добавлено через ~3 мин. -----
У меня так:
Команда: (load "Geo_Calk_09.vlx")
; ошибка: сбой при выполнении LOAD: "Geo_Calk_09.vlx"
joomandji вне форума  
 
Непрочитано 09.02.2014, 21:55
#9
Boxa

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


т.к. хобби у меня написание утилит под автокад, то наработок много, в том числе и с теми функциями которые указали и Вы.
Это я к чему, надеюсь поднял Вам настроение и Вы рады.

Цитата:
Сообщение от joomandji Посмотреть сообщение
Дорогие друзья, если у кого-нибудь есть наработки в этой области буду рад.
Boxa вне форума  
 
Автор темы   Непрочитано 09.02.2014, 22:48
#10
joomandji

инженер КИПиА
 
Регистрация: 06.02.2014
Сумы
Сообщений: 8


К сожалению не нашел у Вас на сайте необходимого
joomandji вне форума  
 
Непрочитано 09.02.2014, 23:21
#11
Boxa

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


1 "наработки" это не синоним "готовая программа"
2 Плохо искали, как минимум под Ваш четвертый вопрос имеется две программы. Одна (старая) выложена в свободный доступ, вторая (новая) в стадии бета теста.
3 Моё предыдущее сообщение, это некоторый сарказм на формулировку сообщения в заголовке темы. Вы спрашиваете есть ли у кого то что-то и если это есть, то Вы счастливы. Заметьте, Вы не просите поделиться с Вами, не просите написать для Вас эти приложения. Вам вполне достаточно самого факта наличия таких наработок.
Boxa вне форума  
 
Автор темы   Непрочитано 11.02.2014, 01:14
#12
joomandji

инженер КИПиА
 
Регистрация: 06.02.2014
Сумы
Сообщений: 8


Уважаемый, Boxa. Я понимаю, что Вам возможно весело, но мне, уважаемый, не до смеха. Вопрос задан конкретно - если есть программа-помощник поделитесь.

С ув. Вячеслав!
joomandji вне форума  
 
Непрочитано 11.02.2014, 07:02
1 | #13
Boxa

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


Уважаемый joomandji.
Обращаю Ваше внимание, что слово "поделитесь" появилось только в 12 сообщении темы, так же обращаю Ваше внимание что изначально Вы пытались выяснить есть ли наработки, по интересующей Вас теме. Я уже писал, что наработки, это не значит готовая программа. Определитесь, Вам фрагменты кода нужны, которые помогут Вам самому написать то, что вы хотите или Вам готовая программа нужна.

Если Вам нужен код, то мне не жалко.
Код для первых двух пунктов Вашего списка (так, как я понял написанное Вами), в конце сообщения.
Касательно четвертого пункта, то я уже говорил где брать решение, в контексте того, как я понял написанное Вами.
Ваш третий пункт, я вообще не понимаю.

Однако, если Вам нужны готовые программы, то Вы явно ошиблись разделом и Вам сюда: http://forum.dwg.ru/forumdisplay.php?f=33

Код:
[Выделить все]
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.DatabaseServices
Public Class acad__boxashu
    <CommandMethod("bx_textAddInt")> _
    Public Sub bx_textAddInt()
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim acEd As Editor = acDoc.Editor
        Dim IntOpt As PromptIntegerOptions = New PromptIntegerOptions(ControlChars.CrLf & "Сколько вешать в граммах: ")
        IntOpt.AllowNone = False
        Dim IntRes As PromptIntegerResult = acEd.GetInteger(IntOpt)
        If IntRes.Status <> PromptStatus.OK Then
            Exit Sub
        End If
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            Dim acTypValAr(0) As TypedValue
            acTypValAr.SetValue(New TypedValue(DxfCode.Start, "MTEXT"), 0)
            Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
            Dim acSSPrompt As PromptSelectionResult = acDoc.Editor.GetSelection(acSelFtr)
            If acSSPrompt.Status <> PromptStatus.OK Then
                Exit Sub
            End If
            Dim acSSet As SelectionSet = acSSPrompt.Value
            For Each acSSObj As SelectedObject In acSSet
                If Not IsDBNull(acSSObj) Then
                    Dim acEnt As Entity = CType(acTrans.GetObject(acSSObj.ObjectId, _
                                                            OpenMode.ForRead), Entity)
                    If Not IsDBNull(acEnt) Then
                        If TypeOf acEnt Is MText Then
                            Dim acDBText As MText = CType(acEnt, MText)
                            Dim value As Double = 0
                            Double.TryParse(acDBText.Text, value)
                            acDBText.UpgradeOpen()
                            acDBText.Contents = (value + IntRes.Value).ToString
                            acDBText.DowngradeOpen()
                        End If
                    End If
                End If
            Next
            acTrans.Commit()
        End Using
    End Sub

    <CommandMethod("bx_textSorted")> _
    Public Sub bx_textSorted()
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim acEd As Editor = acDoc.Editor
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
            Dim cabelList As New List(Of Integer)

            Dim acTypValAr(0) As TypedValue
            acTypValAr.SetValue(New TypedValue(DxfCode.Start, "MTEXT"), 0)
            Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
            Dim acSSPrompt As PromptSelectionResult = acDoc.Editor.GetSelection(acSelFtr)
            If acSSPrompt.Status <> PromptStatus.OK Then
                Exit Sub
            End If
            Dim acSSet As SelectionSet = acSSPrompt.Value
            For Each acSSObj As SelectedObject In acSSet
                If Not IsDBNull(acSSObj) Then
                    Dim acEnt As Entity = CType(acTrans.GetObject(acSSObj.ObjectId, _
                                                            OpenMode.ForRead), Entity)
                    If Not IsDBNull(acEnt) Then
                        If TypeOf acEnt Is MText Then
                            Dim acDBText As MText = CType(acEnt, MText)
                            Dim value As Integer = 0
                            Integer.TryParse(acDBText.Text, value)
                            cabelList.Add(value)
                        End If
                    End If
                End If
            Next
            acTrans.Commit()
            acEd.WriteMessage(ControlChars.CrLf & "Отсортерованный по возрастанию массив номеров кабелей: ")
            cabelList.Sort()
            For Each i As Integer In cabelList
                acEd.WriteMessage(ControlChars.CrLf & i.ToString)
            Next
        End Using
    End Sub
End Class

Дабы избежать непонимания, позволю себе закрепить Ваш заголовок цитатой в своем сообщении
Цитата:
Сообщение от joomandji Посмотреть сообщение
Добрый день, уважаемые участники форума! Работаю проектировщиком части проекта КИПиА и часто сталкиваюсь с задачами:
1) перенумеровать выделенный массив mText, например увеличить все числа, выделенные пользователем на 2 или уменьшить.
2) отсортировать массив номеров кабелей по возрастанию.
3) имеется 2 потока кабелей, необходимо сравнить эти потоки и выдать результирующий поток, удалив повторяющиеся номера.
4) необходимо автоматически подсчитать длины кабелей и труб на схеме подключения внешних проводок.

Дорогие друзья, если у кого-нибудь есть наработки в этой области буду рад.

С ув. Вячеслав!

Последний раз редактировалось Boxa, 11.02.2014 в 07:19.
Boxa вне форума  
 
Непрочитано 11.02.2014, 10:19
#14
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от joomandji Посмотреть сообщение
Уважаемый, Boxa. Я понимаю, что Вам возможно весело, но мне, уважаемый, не до смеха. Вопрос задан конкретно - если есть программа-помощник поделитесь.

С ув. Вячеслав!

Offtop: Ну-ка быстро шутки в сторону и дали Вячеславу программу-помощника! Что Вы в самом-то деле Ваньку валяете? Все же подробно и с примерами и с чертежами описано в первом сообщении и даже видео снял для лучшего понимания вопроса! Сразу видно - серьезный человек и к делу подходит основательно! А еще вежливый и учтивый. И поиском уже все перешерстил и разобрался что подходит а что нет. Сразу так и хочется взять и помочь, прямо наперегонки
Boxa,
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 11.02.2014, 15:22
#15
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


кстати кабелиная тема в соседней ветке
gomer вне форума  
 
Автор темы   Непрочитано 11.02.2014, 23:44
#16
joomandji

инженер КИПиА
 
Регистрация: 06.02.2014
Сумы
Сообщений: 8


Цитата:
Сообщение от Boxa Посмотреть сообщение
Однако, если Вам нужны готовые программы, то Вы явно ошиблись разделом и Вам сюда: http://forum.dwg.ru/forumdisplay.php?f=33
Мне нужны программы для сокращения рутинных операций, а будут они готовыми или эскизными мне без разницы. Boxa, подскажите, пожалуйста, (я признаюсь честно в vba и autolisp не силен, потихоньку начинаю осваивать) как запустить Вашу программу приведенную в посте №13.
Приношу извинения, если непонятно дал запрос. Привожу файл для внесения, надеюсь, ясности.
Поток.dwg

Потоки формировал вручную, это довольно таки кропотливая работа если встречаются большие пучки кабелей.

С ув. Вячеслав!
joomandji вне форума  
 
Непрочитано 12.02.2014, 08:56
#17
Boxa

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


Цитата:
Сообщение от joomandji Посмотреть сообщение
Мне нужны программы для сокращения рутинных операций, а будут они готовыми или эскизными мне без разницы.
Еще раз. Если Вы не хотите сами ничего писать, разместите свой заказ в теме : http://forum.dwg.ru/forumdisplay.php?f=33
Там найдется много желающих выполнить эту работу на возмездной основе.
Если Вы не в ладах с программированием, но хотите сами написать (научиться программировать) то, что Вам нужно, показывайте что уже успели сделать и в чем затруднения, Вам неприменно помогут и подскажут.

Цитата:
Сообщение от joomandji Посмотреть сообщение
подскажите, пожалуйста, (я признаюсь честно в vba и autolisp не силен, потихоньку начинаю осваивать) как запустить Вашу программу приведенную в посте №13.
Это не готовое решение которое Вам нужно и которое можно применять в работе, это черновик, в котором показаны некоторые манипуляции с текстом, до программы там далеко.

Уже несколько лет не пишу на vba, Так что это не vba, это vb.net. Запускать просто, командами обозначенными в коде bx_textAddInt и bx_textSorted, можете поменять их на что угодно, как Вам нравится. Загвоздка в том, что сначала нужно скомпилировать этот код в библиотеку и загрузить скомпилированную библиотеку в автокад. После этого станут доступны эти команды. Как это сделать, на примере простейшего приложения, можно посмотреть тут: Элементарное приложение для AutoCAD


Цитата:
Сообщение от joomandji Посмотреть сообщение
Привожу файл для внесения, надеюсь, ясности.
Вложение 122198
Знаете что я вижу? Табличку из текста и линий. Как и откуда взялись данные и почему они расставлены именно так мне совершенно не понятно.
А вообще, тут правильно говорили, тема по электрике соседняя, посмотрите там, http://forum.dwg.ru/showthread.php?t=57484 , Вдруг есть готовое решение Вашей задачи.

Цитата:
Сообщение от joomandji Посмотреть сообщение
Потоки формировал вручную, это довольно таки кропотливая работа если встречаются большие пучки кабелей.
На тему потоков, я не электрик и мне Ваши потоки, как Вам мой пластический шарнир. Нифига не понятно и разбираться нет времени.


На тему понятности:
Вот эта строка
Цитата:
Сообщение от joomandji Посмотреть сообщение
1) перенумеровать выделенный массив mText, например увеличить все числа, выделенные пользователем на 2 или уменьшить.
Изменение только на целое число или возможен вариант с дробями?
Выбеленный текст содержит только целые числа или дробные?
Должна ли программа обрабатывать текст на заблокированном слое?
Применяется ли для mtext форматирование или нет?
Тест хранится только в mtext? text игнорируется?
и т.д.

Цитата:
Сообщение от joomandji Посмотреть сообщение
2) отсортировать массив номеров кабелей по возрастанию.
Что такое номер кабеля (text, mtext, block, attribute)?
Отсортировать номера кабеля во всем файле, тотально?
Программа считала и отсортировала "номера кабеля", дальше что?
Куда эти данные выводить? что с ними делать?

Отсюда вывод:
Перед разработкой и написанием программ, хорошо бы сесть с карандашиком и написать на бумаге, что у Вас есть и в каком виде, что вы хотите получить и в каком виде и главное, КАК Вы это хотите получить.

Удачи в работе.

ЗЫ. У Вас очень странный стиль письма, Вы требуйте и просите одновременно, при чтении Ваших сообщений есть ощущение диссонанса формы и содержания.

Последний раз редактировалось Boxa, 12.02.2014 в 09:11.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Работа с массивами Mtext



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется помощь,что бы Mleader не опускался Composter Программирование 79 04.12.2018 18:03
Акты скрытых работ Витос Прочее. Архитектура и строительство 324 05.03.2015 12:24
Как скопировать содержимое размера в буфер? arturbd AutoCAD 8 06.09.2011 20:38
Нахождение расстояния между точками на чертеже Макс_Кунгур Программирование 68 03.09.2010 22:01
Требуется помощь с циклом в лиспе Composter LISP 28 13.05.2009 11:14