Список форумов Конференция САПР Bentley MicroStation Конференция САПР Bentley MicroStation
www.ustation.ru
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

определение минимального расстояния между 2-мя смартлиниями

 
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное
Предыдущая тема :: Следующая тема  
Автор Сообщение
Фланд



Зарегистрирован: 30.09.2013
Сообщения: 2

СообщениеДобавлено: Вт Окт 01, 2013 9:19 pm    Заголовок сообщения: определение минимального расстояния между 2-мя смартлиниями Ответить с цитатой

По сути вопроса, я у же безрезультатно распинался на другом форуме http://forum.dwg.ru/showthread.php?t=104265, если надо могу скопипастить сюда. Помогите. )
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Ср Окт 02, 2013 1:29 pm    Заголовок сообщения: Ответить с цитатой

Попробуйте использовать функцию MDL
Код:

int       mdlMinDist_betweenElms 
(
DPoint3d*       point1 ,
DPoint3d*       point2 ,
double*       distance ,
MSElementDescr*       edP1 ,
MSElementDescr*       edP2 ,
DPoint3d*       closestPoint ,
double       inputTolerance 
);


На VBA эта функция должна быть объявлена
Код:
Declare Function mdlMinDist_betweenElms Lib "stdmdlbltin.dll" ( ByRef point1 As Point3d , ByRef point2 As Point3d , ByRef distance As Double , ByVal edP1 As Long , ByVal edP2 As Long , ByRef closestPoint As Point3d , ByVal inputTolerance As Double ) As Long


Return Value
int SUCCESS if the minima is successfully calculated.

Parameters
DPoint3d* point1 OUT minimum point on elm 1
DPoint3d* point2 OUT minimum point on elm 2
double* distance OUT minimum distance
MSElementDescr* edP1 IN first element
MSElementDescr* edP2 IN second element
DPoint3d* closestPoint IN point close to minima
double inputTolerance IN UNUSED. Formerly tolerance for approximating curved elements. All calculations are currently done to maximium precision.


Remarks
Distance is set to the distance between these point1 and point2. If the elements intersect, the intersection points are returned and distance is set to zero.
This function was previously named mdlMeasure_minimumDistance. Only the name has changed; the functionality remains intact.
This function measures the distance of a mesh element from its edges, just as it measures from the wireframe (rather than the surface) of other solid and surface elements.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Фланд



Зарегистрирован: 30.09.2013
Сообщения: 2

СообщениеДобавлено: Ср Окт 02, 2013 8:37 pm    Заголовок сообщения: Ответить с цитатой

Спасибо большое.
Но мне азов не хватает, мне б еще пару строчек кода который организует минимальный диалог со мной - куда вводить условный горизонт и в какую линию тыкать.
И... вообще я неправильно задачу поставил, простите (((
мне не минимальное расстояние надо, а строго по по вертикали вверх до земли, это будет глубина заложения лотка к ней потом прибавлю конструкцию, будет глубина траншеи, и нужно расстояние по вертикали вниз до линии условного горизонта - будут отметки лотка...
я когда писал:
dist1 (distance (vlax-curve-getClosestPointToProjection earth (vlax-curve-getpointatparam lotok i) '(0 1 0)) (vlax-curve-getpointatparam lotok i) )
указывал вектор в какую сторону измерять.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Leonid
давно здесь сидим


Зарегистрирован: 28.01.2006
Сообщения: 598
Откуда: С.-Петербург

СообщениеДобавлено: Пт Окт 04, 2013 8:39 am    Заголовок сообщения: Ответить с цитатой

Если дружите с бейсиком, то проще всего реализовать через класс с интерфейсом ILocateCommandEvents. В хелпе куча примеров...
Если нет, то начинать лучше с метода GetInput
Код:


    Dim oMessage As CadInputMessage

    Set oMessage = CadInputQueue.GetInput

    if oMessage.InputType = msdCadInputTypeDataPoint then
        Dim point As Point3d
        point = oMessage.point
    end if





Получаем точку, а дальше берем элемент

Код:

    Dim ele As Element
    Set ele = CommandState.LocateElement(Point, View, True)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Конференция САПР Bentley MicroStation -> Прикладное Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group