我需要创建一个 C# objectarx 函数来检查折线是否已连接并打开。如果是这样,则关闭它们的折线。此示例代码无法使用,因为它不会检查它是否已连接:
if (polyline.Closed == false)
{
// Close polyline
polyline.Closed = true;
}
我发现了如何做到这一点,但它在 LISP 中。有谁知道如何将其转换为 C# objectarx .net?
;; PLsCloseCorners.lsp [command name: PLsCL for PolyLines CLose]
;; To Close all open lightweight Polylines, with the start/end
;; vertex at the [apparent] intersection of the starting and
;; ending segments, without coincident start/end vertices.
;; If one "looks" closed (i.e. last vertex coincides with first one),
;; but is not closed in Polyline terms, this will close it from
;; the next-to-last vertex, not by adding a zero-length segment.
;; [If beginning and/or ending Polyline segment is/are arcs, and
;; start/end vertices are not coincident, will locate new corner
;; as if endpoints of arc(s) are endpoints of line segment(s);
;; if ending segment is an arc and start/end vertices are not
;; coincident, will alter arc's path.]
;; Kent Cooper, July 2009
;;
(defun C:PLsCL (/ plset pl plverts corner)
(setq cmde (getvar 'cmdecho))
(setvar 'cmdecho 0)
(command "_.undo" "_begin")
(setq plset (ssget "X" '((0 . "LWPOLYLINE"))))
; omit the "X" from the above line to let User select them
(while (> (sslength plset) 0)
(setq pl (ssname plset 0))
(if (not (vlax-curve-isclosed pl))
(progn
(setq
plverts (cdr (assoc 90 (entget pl))); number of vertices
corner
(inters
(vlax-curve-getStartPoint pl)
(vlax-curve-getPointAtParam pl 1)
(vlax-curve-getPointAtParam pl (1- plverts))
(vlax-curve-getPointAtParam pl (- plverts 2))
nil
); end inters & corner
); end setq
(command
"_.pedit"
pl
"_edit"
"_move"
corner
); end command
(repeat (- plverts 2)
(command "_next"); move to next-to-last vertex
); end repeat
(command
"_break"
"_next"
"_go"
"_eXit"
"_close"
""
); end command
); end progn
); end if
(ssdel (ssname plset 0) plset)
); end while
(command "_.undo" "_end")
(setvar 'cmdecho cmde)
(princ)
); end defun
更新#1
我实际上想要做的是确定是否应该关闭折线。想象一条形状为字母 C 的折线和另一条形状为字母 O 的折线。在这种情况下,我想关闭形状为字母 O 的折线。
例子:
public bool IsPolylineConnected(Polyline pline)
{
// Convert the code from the LSP to C#
// A polyline with the shape of the letter C would return false
// A polyline with the shape of the letter O would return true
}