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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Возможно ли сделать визуальный эффект как при перемещении?

Возможно ли сделать визуальный эффект как при перемещении?

Ответ
Поиск в этой теме
Непрочитано 03.07.2019, 17:11 #1
Возможно ли сделать визуальный эффект как при перемещении?
iskatel111
 
Регистрация: 13.06.2012
Сообщений: 98

При использовании команды move перемещаемые объекты визуально следуют за мышкой, что довольно удобно.

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

Конкретно моя задача - вставка MText, генерируемого в программе. Точку вставки получаю через Editor.GetPoint. Соответственно вставляю почти наугад, и часто приходится потом двигать текст, чтобы найти оптимальное расположение.
Просмотров: 7630
 
Непрочитано 03.07.2019, 17:31
1 | #2
Do$

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


Да, возможно. Гуглите по "autocad net entity jig".
P.S. под мультитекст даже есть пример: https://spiderinnet1.typepad.com/blo...-reliably.html
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 05.07.2019, 01:34
#3
iskatel111


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


Спасибо все работает по тому примеру, но вот както странно это выглядит.


Возможно ли точку привязки переместить куда-то в сторону, чтоб не загораживался текст?
iskatel111 вне форума  
 
Непрочитано 08.07.2019, 14:24
#4
Do$

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


Попробуйте поменять значение свойства MText.Attachment.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 14.07.2019, 13:25
#5
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


А можно ли при jig-итовке сделать так, чтобы при пересечении координаты Х базовой точки jiga, текст оказывался слева/справа от перекрестья соответственно?
Вложения
Тип файла: flv jig mtext.flv (4.25 Мб, 33 просмотров)
p_sh вне форума  
 
Непрочитано 15.07.2019, 08:19
#6
Boxa

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


p_sh, можно.
Текущие координаты отображаемого объекта у Вас есть, сам объект текста и его выравнивание у Вас так же есть. В чем проблема вообще не вижу.
Boxa вне форума  
 
Непрочитано 15.07.2019, 08:36
#7
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


Дело в том, что у текста должно быть выравнивание "середина/посередине", т.е. симметричный и красивый. Необходимо, чтобы его отображение перепрыгивало "туда-сюда" относительно перекрестья при проходе через Х координату базовой точки

Последний раз редактировалось p_sh, 15.07.2019 в 08:55.
p_sh вне форума  
 
Непрочитано 15.07.2019, 10:30
#8
Boxa

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


Все равно не понимаю, что Вас останавливает и в чем проблема. Вы не знаете как пересчитать координаты точки вставки текста с учетом смещения? Не знаете как задать условие или не знаете где это условие поставить?

В любом случае, дальше давать советы без кода уже бесполезно, показывайте что у Вас есть, "будем посмотреть"

Последний раз редактировалось Boxa, 15.07.2019 в 10:40.
Boxa вне форума  
 
Непрочитано 15.07.2019, 14:46
#9
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


видимо, не знаю где и какое условие поставить. Догадываюсь, что в Do...Loop While. Вычисление nlocation и применение к ent.Location = nlocation ровным счетом ничего не меняет.
Код:
[Выделить все]
        Public Shared Function Jig(ent As MText, basePt As Point3d) As Boolean
            Dim jigger As EntityMoveJigger = Nothing
            'Dim sj As EntityJig
            Try
                jigger = New EntityMoveJigger(ent, basePt)

                Dim pr As PromptResult

                Dim ft As Integer = 1

                Do
                    pr = MgdAcApplication.DocumentManager.MdiActiveDocument.Editor.Drag(jigger)
                    ' Add keyword handling code below
#Region
                    Dim nlocation As Point3d = ent.Location
                    If ent.Location.X >= basePt.X Then
                        nlocation = New Point3d(ent.Location.X + ft * ent.Width / 2, ent.Location.Y, ent.Location.Z)
                    Else
                        nlocation = New Point3d(ent.Location.X - ft * ent.Width / 2, ent.Location.Y, ent.Location.Z)
                    End If
                    ent.Location = nlocation
                    ft = 2
#End Region
                    If pr.Status = PromptStatus.Keyword Then
                    Else
                        jigger.mCurJigFactorIndex += 1
                    End If
                Loop While pr.Status <> PromptStatus.Cancel AndAlso pr.Status <> PromptStatus.[Error] AndAlso jigger.mCurJigFactorIndex <= 1

                If pr.Status = PromptStatus.Cancel OrElse pr.Status = PromptStatus.[Error] Then
                    If jigger IsNot Nothing AndAlso jigger.Entity IsNot Nothing Then
                        jigger.Entity.Dispose()
                    End If

                    Return False
                Else
                    Return True
                End If
            Catch
                If jigger IsNot Nothing AndAlso jigger.Entity IsNot Nothing Then
                    jigger.Entity.Dispose()
                End If

                Return False
            End Try
        End Function
----- добавлено через ~46 мин. -----
И такой вариант, кажущийся более осмысленным не приводит к результату
Код:
[Выделить все]
#Region "Methods to Call"

        Public Shared Function Jig(ent As MText, basePt As Point3d) As Boolean
            Dim jigger As EntityMoveJigger = Nothing
            'Dim sj As EntityJig
            Try
                jigger = New EntityMoveJigger(ent, basePt)

                Dim pr As PromptResult

                Dim ft As Integer = 1
                Dim nlocation As Point3d
                Dim lr As Integer = 0

                Do
                    pr = MgdAcApplication.DocumentManager.MdiActiveDocument.Editor.Drag(jigger)
                    ' Add keyword handling code below
#Region "Расчет смещения"
                    nlocation = jigger.mBasePoint
                    If ent.Location.X >= basePt.X Then
                        If lr = 0 Or lr < 0 Then
                            nlocation = New Point3d(jigger.mBasePoint.X + 1000 * ft, jigger.mBasePoint.Y, jigger.mBasePoint.Z)
                            jigger.mBasePoint = nlocation
                            lr = 1
                            ft = 2
                        End If
                    Else
                        If lr = 0 Or lr > 0 Then
                            nlocation = New Point3d(jigger.mBasePoint.X - 1000 * ft, jigger.mBasePoint.Y, jigger.mBasePoint.Z)
                            jigger.mBasePoint = nlocation
                            lr = -1
                            ft = 2
                        End If
                    End If

#End Region
                    If pr.Status = PromptStatus.Keyword Then
                    Else
                        jigger.mCurJigFactorIndex += 1
                    End If
                Loop While pr.Status <> PromptStatus.Cancel AndAlso pr.Status <> PromptStatus.[Error] AndAlso jigger.mCurJigFactorIndex <= 1

                If pr.Status = PromptStatus.Cancel OrElse pr.Status = PromptStatus.[Error] Then
                    If jigger IsNot Nothing AndAlso jigger.Entity IsNot Nothing Then
                        jigger.Entity.Dispose()
                    End If

                    Return False
                Else
                    Return True
                End If
            Catch
                If jigger IsNot Nothing AndAlso jigger.Entity IsNot Nothing Then
                    jigger.Entity.Dispose()
                End If

                Return False
            End Try
        End Function
p_sh вне форума  
 
Непрочитано 15.07.2019, 15:37
#10
Boxa

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


и не приведет, Вы взяли готовый код и пытаетесь его использовать не разобравшись, результат вполне закономерный.
Ваша задача решается дописыванием в Sampler пяти строчек:
Код:
[Выделить все]
If prResult1.Value.X > 0 Then
    mPosition = prResult1.Value + New Vector3d(700, 0, 0)
Else
    mPosition = prResult1.Value - New Vector3d(700, 0, 0)
End If
'mPosition = prResult1.Value
Думаю из кода и так все понятно, что зачем и пояснений не потребуется.
Boxa вне форума  
 
Непрочитано 15.07.2019, 19:09
#11
p_sh

новичок
 
Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396


эффект есть но, т.к. слишком часто, перерисовывает, то не видно половины текста.
посмотрел https://www.keanw.com/2016/09/jiggin...using-net.html
у товарища в Update перерисовка.
попробую дожать
p_sh вне форума  
 
Непрочитано 15.07.2019, 20:20
#12
Boxa

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


p_sh, опять Вы не разобрались в коде =о( . Понижение частоты прорисовки решается одной строчкой условия, с проверкой величиной смещения.
Если позволите, мой Вам совет, попробуйте сами с нуля написать, многое станет понятно и детских вопросов не будет.

Зачем правда смешивать два кода, с разными подходом...
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Возможно ли сделать визуальный эффект как при перемещении?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Возможно ли сделать чердачное перекрытие по деревянным балкам в 16 квартирном доме? Velkin Деревянные конструкции 5 15.05.2013 16:22
Возможно ли сделать так, что бы рядом с курсором отражались не большие значки состояния системы? Alexg-12 Программирование 30 10.10.2012 13:44
18-квартирный дом. Возможно ли сделать квартиру без лоджии? Velkin Архитектура 2 12.09.2012 19:15
Возможно ли сделать команду на лиспе,чтобы при копировании вводить расстояние не от исходного объекта, а от только что скопированного vlas32 AutoCAD 2 19.08.2012 13:38