Message 1 of 9
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi,
Unable to get intersection point of 3dpolylines in Autocad visual lisp/ .NET.
Solved! Go to Solution.
Hi,
Unable to get intersection point of 3dpolylines in Autocad visual lisp/ .NET.
Solved! Go to Solution.
Maybe you show your code?
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | 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
![]() | ![]() |
(defun GetIntersectPoints
(sourName destName
/ sourObj destObj intPnts)
(setq sourObj (vlax-ename->vla-object sourName)
destObj (vlax-ename->vla-object destName)
intPnts (vlax-invoke-method sourObj 'intersectwith destObj acExtendThisentity)
);setq
(mapcar 'vlax-release-object (list sourObj destObj))
(setq intPnts (vlax-variant-value intPnts))
(if (/= (vlax-safearray-get-u-bound intPnts 1) -1)
(progn
(setq rawPoints (vlax-safearray->list intPnts)
coordInc 0
coordLen (length rawPoints)
intPnts '()
);setq
(while (< coordInc (- coordLen 2))
(setq intPnts (append intPnts (list (list (nth coordInc rawPoints) (nth (1+ coordInc) rawPoints))))
coordInc (+ coordInc 3)
);setq
);while
intPnts
);progn
nil
);if
);defun
In top view 3d polylines intersecting.
IntersectWith method do not return projected intersections.
If you want to get projected intersections, you have to "project" the polyline 3d segment onto the XY plane (i.e. convert 3d points into 2d points) before looking for intersections.
Here's an AutoLISP example:
(defun GetProjectIntersection (sourceName destName / ;; sub functions getProjectVertices getProjectedSegments ;; local variables sourceSegments destSegments intersPoint intersPoints) (defun getVertices (poly3d / elst points) (setq elst (entget (entnext poly3d))) (while (= "VERTEX" (cdr (assoc 0 elst))) (setq points (cons (cdr (assoc 10 elst)) points) elst (entget (entnext (cdr (assoc -1 elst)))) ) ) (reverse points) ) (defun getProjectedSegments (vertices) (mapcar '(lambda (p1 p2) (list (list (car p1) (cadr p1)) (list (car p2) (cadr p2))) ) vertices (cdr vertices) ) ) (setq sourceSegments (getProjectedSegments (getVertices sourceName)) destSegments (getProjectedSegments (getVertices destName)) ) (foreach sourceSegment sourceSegments (foreach destSegment destSegments (if (setq intersPoint (inters (car sourceSegment) (cadr sourceSegment) (car destSegment) (cadr destSegment) ) ) (setq intersPoints (cons intersPoint intersPoints)) ) ) ) (reverse intersPoints) )
Working,Thank you so much Gilles Chanteau.
Now i have another problem with vlax-curve-getclosestpointto function not working for 3d polyline
If vlax-curve-getclosestpointto function doen't work as you expect (IMO, it works as described in the documentation), you can have a look to vlax-curveGetClosestPointToProjection as it seems to me you need 2d behavior with a 3d entity.
PS: you should have posted in the LISP forum.