;|
Plugin name: Distance Tolerance Polygon
Author: XDSoft
Running environment: XDRX API OpenDCL Xiaodong toolbox
Release time: 2024-01-20
Command name: xdtb_topochktoldist
Plug-in introduction: [Topology Check] Polygons whose distance is less than the tolerance, do not intersect, do not fit, and have no gaps, but the distance is less than the tolerance
|;
(defun c:xdtb_topochktoldist
(/ #i box cen1 cen cen2 cens cenx e ents ents1 h ii nums pt ss ss1 tf var w x y myerr epoly e1 txth
dist pnt context vs cir1 cir2 #mem_text #ents_pair
)
(xdrx_pointmonitor)
(xdrx_sysvar_pop)
(xdrx-end)
)
(defun _callback
(dynpt
/ e1
) (xdrx-getpropertyvalue e "startpoint" "endpoint")
(xd::doc:drawcrosshair #startpoint (/ pi 4) 0.03)
(xd::doc:drawcrosshair #endpoint (/ pi 4) 0.03)
(setq cen
(xdrx_getpropertyvalue e1
"centroid") cen
(xdrx
-vector
-product
(getvar "ucsydir") (* vs
0.05)) )
txth (* vs 0.02)
dist
(xdrx
-getpropertyvalue
(car epoly
) "distanceto"
)
pnt
(xdrx
-getpropertyvalue
(car epoly
) "closestpointto"
)
context (xdrx-string-formatex (xdrx-string-multilanguage "距离容差:%.2f\n当前间距:%.2f"
"Distance Tol:%.2f\nCurrent Gap:%.2f"
)
#xd_var_global_tol
dist
)
)
(xdrx-setpropertyvalue cir1
"center"
"radius"
(* 0.005 vs)
)
(xdrx-setpropertyvalue cir2
"center"
"radius"
(* 0.005 vs)
)
(xd::
grdraw:drawtext #mem
-text
context
cen
2
txth
9
t
9
)
)
)
)
(xdrx_begin)
*error* myerr
)
(if (not #xd_var_global_tol
) (setq #xd_var_global_tol
0.1) )
(xdrx_prompt (xdrx-string-formatex (xdrx-string-multilanguage "\n距离容差<%.2f>:"
"\nDistance tolerance<%.2f>"
)
#xd_var_global_tol
)
t
)
)
)
(setq #xd_var_global_tol var
) )
(if (not #xd_var_global_topo_mark_height
) (setq #xd_var_global_topo_mark_height
3.0) )
(xdrx_prompt (xdrx-string-formatex (xdrx-string-multilanguage "\n标记线宽度<%.1f>:"
"\nMarker line width<%.1f>:"
)
#xd_var_global_topo_mark_height
)
t
)
)
)
(setq #xd_var_global_topo_mark_height var
) )
(xdrx_sysvar_push
(list (list "toldist" #xd_var_global_tol
) '("boxfillet" 1)
'("boxclosed" 0)
)
)
(if (setq ss
(xdrx_ssget
(xdrx
-string
-multilanguage
"\n选择要检查的多段线<退出>:" "\nSelect polylines to inspect <Exit>:"
)
'((0 . "*polyline") (-4 . "&=") (70 . 1))
)
)
(setq ents
(xdrx_pickset
->ents ss
)) (xdrx-document-safezoom ss t)
#ents nil
)
(xdrx_entity_delete
(xdrx_entity_box ss)
(xdrx-string-multilanguage "拓扑核查"
"Topology Verification"
)
)
'(62 . 4)
)
)
)
(xd::odcl:progress-begin ""
(xdrx-string-multilanguage "正在搜索缝隙的多边形"
"Searching polygons for gaps"
)
1
392
24
4
0
)
nums 0
#fengxis nil
)
(xd::odcl:progress
-setpos1
(setq ii
(1+ ii
)) 1) (xd::odcl:progress-settext
(xdrx-string-formatex (xdrx-string-multilanguage "正在搜索缝隙的多边形(%d of %d)"
"Searching for gap polygons (%d of %d)"
)
ii
)
)
(setq cen
(xdrx_getpropertyvalue x
"centroid") verts (xdrx-getpropertyvalue x "vertices")
verts (xdrx-points-compress verts)
box (xdrx-points-offset #xd_var_global_tol verts)
)
(if (and (setq ss1
(ssget "cp" box '
((0 .
"*polyline") (-4 .
"&=") (70 .
1)))) )
)
)
(xdrx_pickset->ents ss1)
)
(if (= XD:kOutsideTol
(xdrx
-geom
-relation x y
)) )
)
)
cen1 (xdrx_getpropertyvalue x "centroid")
cen2 (xdrx_getpropertyvalue y "centroid")
)
(progn (xdrx_polyline_make cen1 cen2
) "constantwidth"
#xd_var_global_topo_mark_height
"layer"
(xdrx-string-multilanguage "拓扑核查"
"Topology Verification"
)
"color"
4
)
)
)
)
)
)
ents1
)
)
)
)
ents
)
(xd::odcl:progress-end)
(xdrx_prompt
(xdrx-string-formatex (xdrx-string-multilanguage "\n搜索到符合条件的多边形 %d 组."
"\nPolygon %d groups matching the criteria were found."
)
nums
)
)
#i 0
)
(setq #mem
-text
(xdrx
-mtext
-make
)) (setq cir1
(xdrx
-circle
-make
) cir2 (xdrx-circle-make)
)
(xdrx-pointmonitor "_callback")
(xdrx_initget "S")
(xdrx-string-multilanguage "\n缩放屏幕查看[查看下一个(S)]<退出>:"
"\nZoom screen to view [View next(S)]<Exit>:"
)
)
)
)
box (xdrx_entity_box e)
)
(xdrx_document_zoomcenter cen (* 2.5 h))
(xdrx_document_setDwgViewfocus)
)
(xdrx-string-multilanguage "\n>>已经查看完所有重叠多边形."
"\n>>All overlapping polygons have been viewed."
)
)
epoly nil
e nil
)
(setq box
(xdrx_entity_box #fengxis
) )
(xdrx_document_zoomcenter cen (* 2 h))
)
)
)
)
)
)
(xdrx-pointmonitor)
(xdrx_initget)
)
)
)
)
(xdrx_end)
)