i have a set of coordinates, not on the polyline. i want to find the polyline width where that coodinate intersects perpendicular to the polyline (shortest distance). without going through all the vertices.
i have a polyline with many segments with varying width, which are constant through the each segments (no taper width). need to read off the "instantaneous" width.
just 2dpoly or lwpoly not 3d.
i found this
not quite what i want.
thanks
Solved! Go to Solution.
Solved by Alexander.Rivilis. Go to Solution.
i thought about going through the polyline vertices one at a time and then take my point and calculate distance. find the shortest distance from that and then record the index where that happens.
but i am afraid it may slow down my program. i have 1000 of these to run and if it goes through 1000 vertices could be slow. but i am gonna try it with my way first and hopefully someone has a better way.
thanks jeff very helpful. not figured out yet but getting there.
where is the help file for all these rare functions? i think there is none. like roughly explains what the arguments you need to feed it do.
not just for this but generally for everything.
how do you get closest index giving a point?
doesn't have a "GetIndexAt" function
the getparameteratpoint returns a double? what is it which parameter does it return?
i need to get the index without going through the vertices as this will slow down my subassembly.
@wang890 wrote:
the getparameteratpoint returns a double? what is it which parameter does it return?
For Polyline parameter is number of vertex. For example parameter == 1 means second vertex, parameter = 2.5 means middle between third and fourth vertex.
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
seen.
i am off testing this now.
2.6 of a vertex lol.
works, here's the code
Dim oEmbankmentTypeTarget As WidthOffsetTarget
Try
oEmbankmentTypeTarget = oParamsOffsetTarget.Value("TargetHA1")
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim acCurDb As Database = acDoc.Database
Using lock As DocumentLock = acDoc.LockDocument
Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
'' Open the Block table for read
Dim acBlkTbl As BlockTable
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
'' Open the Block table record Model space for write
Dim acBlkTblRec As BlockTableRecord
acBlkTblRec = CType(acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
OpenMode.ForWrite), BlockTableRecord)
Dim obj As DBObject = acTrans.GetObject(oEmbankmentTypeTarget.TargetId, OpenMode.ForWrite)
If TypeOf obj Is Polyline Then
Dim oPoly2dOrig As Polyline = CType(obj, Polyline)
'get the index where the current station is closest to
Dim x, y, z As Double
corridorState.SoeToXyz(corridorState.CurrentAlignmentId, corridorState.CurrentStation, 0, 0, x, y, z)
Dim oPt3D_CL As New Point3d(x, y, z)
'get vertex index (fraction)
Dim dVertex As Double = oPoly2dOrig.GetParameterAtPoint(oPoly2dOrig.GetClosestPointTo(oPt3D_CL, True))
'get polyline width
dSegmentWidth = oPoly2dOrig.GetStartWidthAt(Truncate(dVertex))
End If
End Using
End Using
IMHO method Truncate should be replaced with method Round.
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
no, have to round down.
say point 0 to 10 is 0.5m wide, 10-20 is 1.0m wide. when hit 9.99 say it is still within the 0.5m geotechnical zone.
don't worry i am all good.
cheers mate.
Can't find what you're looking for? Ask the community or share your knowledge.