@windypro-rourou/dsh-eda 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/README.md +71 -119
  2. package/cordis.patch.yml +9 -7
  3. package/lib/board.js +80 -0
  4. package/lib/client.js +2 -2
  5. package/lib/index.js +339 -11
  6. package/lib/installer.js +4 -4
  7. package/lib/skill.js +138 -0
  8. package/package.json +12 -2
  9. package/skill/INDEX.md +193 -0
  10. package/skill/README.official.md +125 -0
  11. package/skill/README.zh-Hans.official.md +125 -0
  12. package/skill/SKILL.md +746 -0
  13. package/skill/format/index.md +152 -0
  14. package/skill/format/pcb/3d.md +166 -0
  15. package/skill/format/pcb/attr.md +63 -0
  16. package/skill/format/pcb/common.md +306 -0
  17. package/skill/format/pcb/component.md +132 -0
  18. package/skill/format/pcb/dimension.md +58 -0
  19. package/skill/format/pcb/index.md +17 -0
  20. package/skill/format/pcb/obj.md +43 -0
  21. package/skill/format/pcb/pad_via.md +151 -0
  22. package/skill/format/pcb/panel.md +64 -0
  23. package/skill/format/pcb/partition.md +43 -0
  24. package/skill/format/pcb/primitive.md +196 -0
  25. package/skill/format/pcb/rule.md +71 -0
  26. package/skill/format/pcb/shape.md +441 -0
  27. package/skill/format/pcb/text.md +62 -0
  28. package/skill/format/project/blob.md +30 -0
  29. package/skill/format/project/common.md +42 -0
  30. package/skill/format/project/group.md +62 -0
  31. package/skill/format/project/index.md +12 -0
  32. package/skill/format/project/instance.md +32 -0
  33. package/skill/format/project/meta.md +189 -0
  34. package/skill/format/project/variant.md +30 -0
  35. package/skill/format/schematic/attr.md +41 -0
  36. package/skill/format/schematic/common.md +47 -0
  37. package/skill/format/schematic/component.md +91 -0
  38. package/skill/format/schematic/index.md +14 -0
  39. package/skill/format/schematic/obj.md +41 -0
  40. package/skill/format/schematic/pin.md +59 -0
  41. package/skill/format/schematic/shape.md +231 -0
  42. package/skill/format/schematic/structure.md +53 -0
  43. package/skill/format/schematic/table.md +109 -0
  44. package/skill/format/schematic/text.md +47 -0
  45. package/skill/format/schematic/wire.md +132 -0
  46. package/skill/guide/ancillary-projects/pro-api-sdk.md +1 -0
  47. package/skill/guide/ancillary-projects/pro-api-types.md +5 -0
  48. package/skill/guide/ancillary-projects.md +10 -0
  49. package/skill/guide/error-handling.md +38 -0
  50. package/skill/guide/extension-json.md +135 -0
  51. package/skill/guide/extensions-marketplace.md +61 -0
  52. package/skill/guide/how-to-start.md +301 -0
  53. package/skill/guide/i18n.md +57 -0
  54. package/skill/guide/index.md +7 -0
  55. package/skill/guide/inline-frame.md +20 -0
  56. package/skill/guide/invoke-apis.md +81 -0
  57. package/skill/guide/stability.md +37 -0
  58. package/skill/references/_index.md +398 -0
  59. package/skill/references/_quick-reference.md +3028 -0
  60. package/skill/references/classes/DMT_Board.md +533 -0
  61. package/skill/references/classes/DMT_EditorControl.md +1736 -0
  62. package/skill/references/classes/DMT_Event.md +356 -0
  63. package/skill/references/classes/DMT_Folder.md +775 -0
  64. package/skill/references/classes/DMT_Panel.md +531 -0
  65. package/skill/references/classes/DMT_Pcb.md +575 -0
  66. package/skill/references/classes/DMT_Project.md +573 -0
  67. package/skill/references/classes/DMT_Schematic.md +1477 -0
  68. package/skill/references/classes/DMT_SelectControl.md +96 -0
  69. package/skill/references/classes/DMT_Team.md +172 -0
  70. package/skill/references/classes/DMT_Workspace.md +198 -0
  71. package/skill/references/classes/EDA.md +961 -0
  72. package/skill/references/classes/IPCB_ComplexPolygon.md +299 -0
  73. package/skill/references/classes/IPCB_Polygon.md +175 -0
  74. package/skill/references/classes/IPCB_PrimitiveArc.md +1901 -0
  75. package/skill/references/classes/IPCB_PrimitiveAttribute.md +2993 -0
  76. package/skill/references/classes/IPCB_PrimitiveComponent.md +2627 -0
  77. package/skill/references/classes/IPCB_PrimitiveComponentPad.md +410 -0
  78. package/skill/references/classes/IPCB_PrimitiveDimension.md +1419 -0
  79. package/skill/references/classes/IPCB_PrimitiveFill.md +1325 -0
  80. package/skill/references/classes/IPCB_PrimitiveImage.md +1461 -0
  81. package/skill/references/classes/IPCB_PrimitiveLine.md +1639 -0
  82. package/skill/references/classes/IPCB_PrimitiveObject.md +1700 -0
  83. package/skill/references/classes/IPCB_PrimitivePad.md +3155 -0
  84. package/skill/references/classes/IPCB_PrimitivePolyline.md +1193 -0
  85. package/skill/references/classes/IPCB_PrimitivePour.md +1858 -0
  86. package/skill/references/classes/IPCB_PrimitivePoured.md +556 -0
  87. package/skill/references/classes/IPCB_PrimitiveRegion.md +1332 -0
  88. package/skill/references/classes/IPCB_PrimitiveString.md +2315 -0
  89. package/skill/references/classes/IPCB_PrimitiveVia.md +1588 -0
  90. package/skill/references/classes/ISCH_PrimitiveArc.md +1676 -0
  91. package/skill/references/classes/ISCH_PrimitiveAttribute.md +2541 -0
  92. package/skill/references/classes/ISCH_PrimitiveBus.md +973 -0
  93. package/skill/references/classes/ISCH_PrimitiveCbbSymbolComponent.md +260 -0
  94. package/skill/references/classes/ISCH_PrimitiveCircle.md +1392 -0
  95. package/skill/references/classes/ISCH_PrimitiveComponent.md +2913 -0
  96. package/skill/references/classes/ISCH_PrimitiveComponentPin.md +155 -0
  97. package/skill/references/classes/ISCH_PrimitiveObject.md +960 -0
  98. package/skill/references/classes/ISCH_PrimitivePin.md +2402 -0
  99. package/skill/references/classes/ISCH_PrimitivePolygon.md +1028 -0
  100. package/skill/references/classes/ISCH_PrimitiveRectangle.md +1777 -0
  101. package/skill/references/classes/ISCH_PrimitiveText.md +1771 -0
  102. package/skill/references/classes/ISCH_PrimitiveWire.md +973 -0
  103. package/skill/references/classes/LIB_3DModel.md +780 -0
  104. package/skill/references/classes/LIB_Cbb.md +957 -0
  105. package/skill/references/classes/LIB_Classification.md +965 -0
  106. package/skill/references/classes/LIB_Device.md +1221 -0
  107. package/skill/references/classes/LIB_Footprint.md +1153 -0
  108. package/skill/references/classes/LIB_LibrariesList.md +329 -0
  109. package/skill/references/classes/LIB_PanelLibrary.md +855 -0
  110. package/skill/references/classes/LIB_SelectControl.md +89 -0
  111. package/skill/references/classes/LIB_SimulationModel.md +821 -0
  112. package/skill/references/classes/LIB_Symbol.md +1195 -0
  113. package/skill/references/classes/PCB_Document.md +1754 -0
  114. package/skill/references/classes/PCB_Drc.md +3375 -0
  115. package/skill/references/classes/PCB_Event.md +1081 -0
  116. package/skill/references/classes/PCB_Layer.md +1911 -0
  117. package/skill/references/classes/PCB_ManufactureData.md +2968 -0
  118. package/skill/references/classes/PCB_MathPolygon.md +785 -0
  119. package/skill/references/classes/PCB_Net.md +1128 -0
  120. package/skill/references/classes/PCB_Primitive.md +217 -0
  121. package/skill/references/classes/PCB_PrimitiveArc.md +894 -0
  122. package/skill/references/classes/PCB_PrimitiveAttribute.md +717 -0
  123. package/skill/references/classes/PCB_PrimitiveComponent.md +1050 -0
  124. package/skill/references/classes/PCB_PrimitiveDimension.md +833 -0
  125. package/skill/references/classes/PCB_PrimitiveFill.md +861 -0
  126. package/skill/references/classes/PCB_PrimitiveImage.md +875 -0
  127. package/skill/references/classes/PCB_PrimitiveLine.md +858 -0
  128. package/skill/references/classes/PCB_PrimitiveObject.md +800 -0
  129. package/skill/references/classes/PCB_PrimitivePad.md +944 -0
  130. package/skill/references/classes/PCB_PrimitivePolyline.md +819 -0
  131. package/skill/references/classes/PCB_PrimitivePour.md +845 -0
  132. package/skill/references/classes/PCB_PrimitivePoured.md +363 -0
  133. package/skill/references/classes/PCB_PrimitiveRegion.md +799 -0
  134. package/skill/references/classes/PCB_PrimitiveString.md +910 -0
  135. package/skill/references/classes/PCB_PrimitiveVia.md +765 -0
  136. package/skill/references/classes/PCB_RayTracerEngine.md +263 -0
  137. package/skill/references/classes/PCB_SelectControl.md +495 -0
  138. package/skill/references/classes/PNL_Document.md +83 -0
  139. package/skill/references/classes/SCH_Document.md +809 -0
  140. package/skill/references/classes/SCH_Drc.md +242 -0
  141. package/skill/references/classes/SCH_Event.md +583 -0
  142. package/skill/references/classes/SCH_ManufactureData.md +1205 -0
  143. package/skill/references/classes/SCH_Net.md +200 -0
  144. package/skill/references/classes/SCH_Netlist.md +191 -0
  145. package/skill/references/classes/SCH_Primitive.md +337 -0
  146. package/skill/references/classes/SCH_PrimitiveArc.md +692 -0
  147. package/skill/references/classes/SCH_PrimitiveAttribute.md +590 -0
  148. package/skill/references/classes/SCH_PrimitiveBus.md +624 -0
  149. package/skill/references/classes/SCH_PrimitiveCircle.md +683 -0
  150. package/skill/references/classes/SCH_PrimitiveComponent.md +2240 -0
  151. package/skill/references/classes/SCH_PrimitiveObject.md +666 -0
  152. package/skill/references/classes/SCH_PrimitivePin.md +754 -0
  153. package/skill/references/classes/SCH_PrimitivePolygon.md +627 -0
  154. package/skill/references/classes/SCH_PrimitiveRectangle.md +731 -0
  155. package/skill/references/classes/SCH_PrimitiveText.md +746 -0
  156. package/skill/references/classes/SCH_PrimitiveWire.md +703 -0
  157. package/skill/references/classes/SCH_SelectControl.md +520 -0
  158. package/skill/references/classes/SCH_SimulationEngine.md +133 -0
  159. package/skill/references/classes/SCH_Utils.md +121 -0
  160. package/skill/references/classes/SYS_ClientUrl.md +173 -0
  161. package/skill/references/classes/SYS_Dialog.md +825 -0
  162. package/skill/references/classes/SYS_Environment.md +502 -0
  163. package/skill/references/classes/SYS_FileManager.md +1686 -0
  164. package/skill/references/classes/SYS_FileSystem.md +1171 -0
  165. package/skill/references/classes/SYS_FontManager.md +224 -0
  166. package/skill/references/classes/SYS_FormatConversion.md +349 -0
  167. package/skill/references/classes/SYS_HeaderMenu.md +479 -0
  168. package/skill/references/classes/SYS_I18n.md +861 -0
  169. package/skill/references/classes/SYS_IFrame.md +535 -0
  170. package/skill/references/classes/SYS_LoadingAndProgressBar.md +246 -0
  171. package/skill/references/classes/SYS_Log.md +424 -0
  172. package/skill/references/classes/SYS_Math.md +1565 -0
  173. package/skill/references/classes/SYS_Message.md +363 -0
  174. package/skill/references/classes/SYS_MessageBox.md +285 -0
  175. package/skill/references/classes/SYS_MessageBus.md +1618 -0
  176. package/skill/references/classes/SYS_PanelControl.md +696 -0
  177. package/skill/references/classes/SYS_RightClickMenu.md +175 -0
  178. package/skill/references/classes/SYS_Setting.md +85 -0
  179. package/skill/references/classes/SYS_ShortcutKey.md +623 -0
  180. package/skill/references/classes/SYS_Storage.md +484 -0
  181. package/skill/references/classes/SYS_Timer.md +447 -0
  182. package/skill/references/classes/SYS_ToastMessage.md +194 -0
  183. package/skill/references/classes/SYS_Tool.md +241 -0
  184. package/skill/references/classes/SYS_Unit.md +594 -0
  185. package/skill/references/classes/SYS_WebSocket.md +401 -0
  186. package/skill/references/classes/SYS_Window.md +850 -0
  187. package/skill/references/enums/EDMT_EditorDocumentType.md +279 -0
  188. package/skill/references/enums/EDMT_EditorSplitScreenDirection.md +48 -0
  189. package/skill/references/enums/EDMT_EditorTabEventType.md +63 -0
  190. package/skill/references/enums/EDMT_IndicatorMarkerType.md +81 -0
  191. package/skill/references/enums/EDMT_ItemType.md +158 -0
  192. package/skill/references/enums/EDMT_ProjectCollaborationMode.md +48 -0
  193. package/skill/references/enums/ELIB_DeviceJlcLibraryCategory.md +48 -0
  194. package/skill/references/enums/ELIB_LibraryType.md +114 -0
  195. package/skill/references/enums/ELIB_PreviewType.md +70 -0
  196. package/skill/references/enums/ELIB_SimulationModelType.md +48 -0
  197. package/skill/references/enums/ELIB_SymbolType.md +125 -0
  198. package/skill/references/enums/EPCB_AutoRoutingCornerStyle.md +48 -0
  199. package/skill/references/enums/EPCB_AutoRoutingExistingPrimitiveMode.md +48 -0
  200. package/skill/references/enums/EPCB_AutoRoutingOptimization.md +48 -0
  201. package/skill/references/enums/EPCB_DocumentCanvasUpdateCalculationActiveStatus.md +48 -0
  202. package/skill/references/enums/EPCB_DocumentRatlineCalculatingActiveStatus.md +52 -0
  203. package/skill/references/enums/EPCB_InactiveLayerDisplayMode.md +59 -0
  204. package/skill/references/enums/EPCB_LayerColorConfiguration.md +81 -0
  205. package/skill/references/enums/EPCB_LayerId.md +882 -0
  206. package/skill/references/enums/EPCB_LayerStatus.md +59 -0
  207. package/skill/references/enums/EPCB_LayerType.md +114 -0
  208. package/skill/references/enums/EPCB_MouseEventType.md +59 -0
  209. package/skill/references/enums/EPCB_NetEventType.md +59 -0
  210. package/skill/references/enums/EPCB_PcbPlateType.md +48 -0
  211. package/skill/references/enums/EPCB_PdfOutputMethod.md +59 -0
  212. package/skill/references/enums/EPCB_PrimitiveArcInteractiveMode.md +48 -0
  213. package/skill/references/enums/EPCB_PrimitiveDimensionType.md +59 -0
  214. package/skill/references/enums/EPCB_PrimitiveEventType.md +59 -0
  215. package/skill/references/enums/EPCB_PrimitiveFillMode.md +63 -0
  216. package/skill/references/enums/EPCB_PrimitivePadHeatWeldingConnectionMethod.md +59 -0
  217. package/skill/references/enums/EPCB_PrimitivePadHoleType.md +59 -0
  218. package/skill/references/enums/EPCB_PrimitivePadShapeType.md +81 -0
  219. package/skill/references/enums/EPCB_PrimitivePadType.md +59 -0
  220. package/skill/references/enums/EPCB_PrimitivePourFillMethod.md +59 -0
  221. package/skill/references/enums/EPCB_PrimitiveRegionRuleType.md +96 -0
  222. package/skill/references/enums/EPCB_PrimitiveStringAlignMode.md +125 -0
  223. package/skill/references/enums/EPCB_PrimitiveType.md +202 -0
  224. package/skill/references/enums/EPCB_PrimitiveViaType.md +59 -0
  225. package/skill/references/enums/ESCH_DynamicSimulationEnginePullEventType.md +103 -0
  226. package/skill/references/enums/ESCH_DynamicSimulationEnginePushEventType.md +81 -0
  227. package/skill/references/enums/ESCH_ExportDocumentFileType.md +59 -0
  228. package/skill/references/enums/ESCH_MouseEventType.md +48 -0
  229. package/skill/references/enums/ESCH_PrimitiveComponentType.md +125 -0
  230. package/skill/references/enums/ESCH_PrimitiveEventType.md +70 -0
  231. package/skill/references/enums/ESCH_PrimitiveFillStyle.md +114 -0
  232. package/skill/references/enums/ESCH_PrimitiveLineType.md +70 -0
  233. package/skill/references/enums/ESCH_PrimitivePinShape.md +70 -0
  234. package/skill/references/enums/ESCH_PrimitivePinType.md +147 -0
  235. package/skill/references/enums/ESCH_PrimitiveTextAlignMode.md +125 -0
  236. package/skill/references/enums/ESCH_PrimitiveType.md +180 -0
  237. package/skill/references/enums/ESCH_SimulationNetlistType.md +37 -0
  238. package/skill/references/enums/ESCH_SpiceSimulationEnginePullEventType.md +48 -0
  239. package/skill/references/enums/ESCH_SpiceSimulationEnginePushEventType.md +70 -0
  240. package/skill/references/enums/ESYS_BottomPanelTab.md +81 -0
  241. package/skill/references/enums/ESYS_HeaderMenuEnvironment.md +158 -0
  242. package/skill/references/enums/ESYS_ImportProjectBoardOutlineSource.md +52 -0
  243. package/skill/references/enums/ESYS_ImportProjectImportOption.md +59 -0
  244. package/skill/references/enums/ESYS_ImportProjectSchematicObjectStyle.md +48 -0
  245. package/skill/references/enums/ESYS_ImportProjectViaSolderMaskExpansion.md +52 -0
  246. package/skill/references/enums/ESYS_LeftPanelTab.md +81 -0
  247. package/skill/references/enums/ESYS_LogType.md +103 -0
  248. package/skill/references/enums/ESYS_NetlistType.md +114 -0
  249. package/skill/references/enums/ESYS_RightPanelTab.md +202 -0
  250. package/skill/references/enums/ESYS_ShortcutKeyEffectiveEditorRange.md +191 -0
  251. package/skill/references/enums/ESYS_ShortcutKeyEffectiveEditorScene.md +92 -0
  252. package/skill/references/enums/ESYS_StartPageQuickStartItem.md +206 -0
  253. package/skill/references/enums/ESYS_Theme.md +48 -0
  254. package/skill/references/enums/ESYS_ToastMessageType.md +81 -0
  255. package/skill/references/enums/ESYS_Unit.md +103 -0
  256. package/skill/references/enums/ESYS_WindowEventType.md +48 -0
  257. package/skill/references/enums/ESYS_WindowOpenTarget.md +48 -0
  258. package/skill/references/enums/NetportDeviceName.md +147 -0
  259. package/skill/references/enums/SchToolBarDeviceName.md +279 -0
  260. package/skill/references/interfaces/BoardProps.md +169 -0
  261. package/skill/references/interfaces/ButtonProps.md +169 -0
  262. package/skill/references/interfaces/CheckBoxProps.md +196 -0
  263. package/skill/references/interfaces/ComponentPropsMap.md +448 -0
  264. package/skill/references/interfaces/DialogProps.md +385 -0
  265. package/skill/references/interfaces/FlexItemProps.md +116 -0
  266. package/skill/references/interfaces/FlexProps.md +224 -0
  267. package/skill/references/interfaces/GridItemProps.md +143 -0
  268. package/skill/references/interfaces/GridProps.md +143 -0
  269. package/skill/references/interfaces/IDMT_BoardItem.md +171 -0
  270. package/skill/references/interfaces/IDMT_BriefProjectItem.md +171 -0
  271. package/skill/references/interfaces/IDMT_EditorDocumentItem.md +169 -0
  272. package/skill/references/interfaces/IDMT_EditorSplitScreenItem.md +173 -0
  273. package/skill/references/interfaces/IDMT_EditorTabItem.md +169 -0
  274. package/skill/references/interfaces/IDMT_FolderItem.md +225 -0
  275. package/skill/references/interfaces/IDMT_IndicatorMarkerShape.md +393 -0
  276. package/skill/references/interfaces/IDMT_PanelItem.md +144 -0
  277. package/skill/references/interfaces/IDMT_PcbItem.md +171 -0
  278. package/skill/references/interfaces/IDMT_ProjectItem.md +143 -0
  279. package/skill/references/interfaces/IDMT_SchematicItem.md +225 -0
  280. package/skill/references/interfaces/IDMT_SchematicPageItem.md +198 -0
  281. package/skill/references/interfaces/IDMT_TeamItem.md +144 -0
  282. package/skill/references/interfaces/IDMT_WorkspaceItem.md +117 -0
  283. package/skill/references/interfaces/IDesignPortal.md +103 -0
  284. package/skill/references/interfaces/ILIB_3DModelItem.md +198 -0
  285. package/skill/references/interfaces/ILIB_3DModelSearchItem.md +277 -0
  286. package/skill/references/interfaces/ILIB_CbbItem.md +225 -0
  287. package/skill/references/interfaces/ILIB_CbbSearchItem.md +277 -0
  288. package/skill/references/interfaces/ILIB_ClassificationIndex.md +150 -0
  289. package/skill/references/interfaces/ILIB_DeviceAssociationItem.md +210 -0
  290. package/skill/references/interfaces/ILIB_DeviceExtendPropertyItem.md +304 -0
  291. package/skill/references/interfaces/ILIB_DeviceItem.md +279 -0
  292. package/skill/references/interfaces/ILIB_DevicePropertiesForSearch.md +250 -0
  293. package/skill/references/interfaces/ILIB_DeviceSearchItem.md +521 -0
  294. package/skill/references/interfaces/ILIB_ExtendLibrary3DModelFunctions.md +64 -0
  295. package/skill/references/interfaces/ILIB_ExtendLibraryCbbFunctions.md +99 -0
  296. package/skill/references/interfaces/ILIB_ExtendLibraryClassificationIndex.md +150 -0
  297. package/skill/references/interfaces/ILIB_ExtendLibraryDeviceFunctions.md +157 -0
  298. package/skill/references/interfaces/ILIB_ExtendLibraryFootprintFunctions.md +63 -0
  299. package/skill/references/interfaces/ILIB_ExtendLibraryFunctions.md +123 -0
  300. package/skill/references/interfaces/ILIB_ExtendLibraryItem.md +97 -0
  301. package/skill/references/interfaces/ILIB_ExtendLibraryItemIndex.md +98 -0
  302. package/skill/references/interfaces/ILIB_ExtendLibrarySearchProperty.md +115 -0
  303. package/skill/references/interfaces/ILIB_ExtendLibrarySearchResult.md +169 -0
  304. package/skill/references/interfaces/ILIB_ExtendLibrarySearchResultDataLine.md +234 -0
  305. package/skill/references/interfaces/ILIB_ExtendLibrarySymbolFunctions.md +105 -0
  306. package/skill/references/interfaces/ILIB_ExtendLibraryUserIndex.md +96 -0
  307. package/skill/references/interfaces/ILIB_FootprintItem.md +198 -0
  308. package/skill/references/interfaces/ILIB_FootprintPropertiesForSearch.md +61 -0
  309. package/skill/references/interfaces/ILIB_FootprintSearchItem.md +277 -0
  310. package/skill/references/interfaces/ILIB_LibraryInfo.md +92 -0
  311. package/skill/references/interfaces/ILIB_LibraryItem.md +115 -0
  312. package/skill/references/interfaces/ILIB_PanelLibraryItem.md +198 -0
  313. package/skill/references/interfaces/ILIB_PanelLibrarySearchItem.md +277 -0
  314. package/skill/references/interfaces/ILIB_SimulationModelItem.md +306 -0
  315. package/skill/references/interfaces/ILIB_SimulationModelSearchItem.md +304 -0
  316. package/skill/references/interfaces/ILIB_SymbolItem.md +279 -0
  317. package/skill/references/interfaces/ILIB_SymbolPropertiesForSearch.md +61 -0
  318. package/skill/references/interfaces/ILIB_SymbolSearchItem.md +304 -0
  319. package/skill/references/interfaces/IPCB_AutoLayoutResult.md +169 -0
  320. package/skill/references/interfaces/IPCB_AutoRoutingProps.md +220 -0
  321. package/skill/references/interfaces/IPCB_AutoRoutingResult.md +169 -0
  322. package/skill/references/interfaces/IPCB_BomPropertiesTableColumns.md +169 -0
  323. package/skill/references/interfaces/IPCB_DifferentialPairItem.md +115 -0
  324. package/skill/references/interfaces/IPCB_DiscretizeOptions.md +65 -0
  325. package/skill/references/interfaces/IPCB_DiscretizedPoint.md +88 -0
  326. package/skill/references/interfaces/IPCB_EqualLengthNetGroupItem.md +115 -0
  327. package/skill/references/interfaces/IPCB_LayerItem.md +277 -0
  328. package/skill/references/interfaces/IPCB_NetClassItem.md +115 -0
  329. package/skill/references/interfaces/IPCB_NetInfo.md +115 -0
  330. package/skill/references/interfaces/IPCB_PadPairGroupItem.md +88 -0
  331. package/skill/references/interfaces/IPCB_PadPairMinWireLengthItem.md +88 -0
  332. package/skill/references/interfaces/IPCB_PhysicalStackingConfiguration.md +115 -0
  333. package/skill/references/interfaces/IPCB_Primitive.md +218 -0
  334. package/skill/references/interfaces/IPCB_PrimitiveAPI.md +175 -0
  335. package/skill/references/interfaces/IPCB_PrimitivePadHeatWelding.md +151 -0
  336. package/skill/references/interfaces/IPCB_PrimitivePouredPourFill.md +142 -0
  337. package/skill/references/interfaces/IPCB_PrimitiveSolderMaskAndPasteMaskExpansion.md +154 -0
  338. package/skill/references/interfaces/IPCB_SubstratePhysicalProperties.md +88 -0
  339. package/skill/references/interfaces/IRawNet.md +103 -0
  340. package/skill/references/interfaces/IRawPureSchematic.md +80 -0
  341. package/skill/references/interfaces/IRawSchematic.md +103 -0
  342. package/skill/references/interfaces/IRawWire.md +149 -0
  343. package/skill/references/interfaces/ISCH_DrcError.md +142 -0
  344. package/skill/references/interfaces/ISCH_DrcErrorPrimitive.md +142 -0
  345. package/skill/references/interfaces/ISCH_ExportPngResolution.md +94 -0
  346. package/skill/references/interfaces/ISCH_NetInfo.md +88 -0
  347. package/skill/references/interfaces/ISCH_Primitive.md +219 -0
  348. package/skill/references/interfaces/ISCH_PrimitiveAPI.md +175 -0
  349. package/skill/references/interfaces/ISCH_ProjectNetInfo.md +142 -0
  350. package/skill/references/interfaces/ISCH_WireInfo.md +169 -0
  351. package/skill/references/interfaces/ISYS_FileSystemFileList.md +169 -0
  352. package/skill/references/interfaces/ISYS_HeaderMenuSub1MenuItem.md +174 -0
  353. package/skill/references/interfaces/ISYS_HeaderMenuSub2MenuItem.md +147 -0
  354. package/skill/references/interfaces/ISYS_HeaderMenuTopMenuItem.md +115 -0
  355. package/skill/references/interfaces/ISYS_HeaderMenus.md +408 -0
  356. package/skill/references/interfaces/ISYS_LogLine.md +115 -0
  357. package/skill/references/interfaces/ISYS_MathBBox.md +142 -0
  358. package/skill/references/interfaces/ISYS_MathPoint.md +88 -0
  359. package/skill/references/interfaces/ISYS_MathPolygonWithHoles.md +92 -0
  360. package/skill/references/interfaces/ISYS_MessageBusTask.md +115 -0
  361. package/skill/references/interfaces/ISYS_MultilingualLanguagesData.md +13 -0
  362. package/skill/references/interfaces/ISYS_PcbComparisonResponse.md +115 -0
  363. package/skill/references/interfaces/ISYS_RightClickMenuItem.md +174 -0
  364. package/skill/references/interfaces/ISYS_ShortcutKeyData.md +169 -0
  365. package/skill/references/interfaces/ISYS_ShortcutKeyDataWithCallFn.md +62 -0
  366. package/skill/references/interfaces/ISYS_ShortcutKeyDataWithUserDefinedShortcutKey.md +62 -0
  367. package/skill/references/interfaces/ISYS_WindowEventListenerRemovableObject.md +109 -0
  368. package/skill/references/interfaces/IconProps.md +88 -0
  369. package/skill/references/interfaces/ImageProps.md +115 -0
  370. package/skill/references/interfaces/InputProps.md +520 -0
  371. package/skill/references/interfaces/ListChildren.md +223 -0
  372. package/skill/references/interfaces/ListProps.md +223 -0
  373. package/skill/references/interfaces/ModalProps.md +358 -0
  374. package/skill/references/interfaces/RadioGroupProps.md +196 -0
  375. package/skill/references/interfaces/RadioItem.md +115 -0
  376. package/skill/references/interfaces/ScrollerProps.md +169 -0
  377. package/skill/references/interfaces/SelectListItem.md +142 -0
  378. package/skill/references/interfaces/SelectProps.md +169 -0
  379. package/skill/references/interfaces/SlotProps.md +88 -0
  380. package/skill/references/interfaces/StyleProps.md +385 -0
  381. package/skill/references/interfaces/TextAreaProps.md +196 -0
  382. package/skill/references/interfaces/TextProps.md +169 -0
  383. package/skill/references/types/ISYS_LanguageKeyValuePairs.md +13 -0
  384. package/skill/references/types/TPCB_LayerTypesOfInnerLayer.md +12 -0
  385. package/skill/references/types/TPCB_LayersInTheSelectable.md +43 -0
  386. package/skill/references/types/TPCB_LayersOfComponent.md +12 -0
  387. package/skill/references/types/TPCB_LayersOfCopper.md +16 -0
  388. package/skill/references/types/TPCB_LayersOfCustom.md +42 -0
  389. package/skill/references/types/TPCB_LayersOfDimension.md +17 -0
  390. package/skill/references/types/TPCB_LayersOfFill.md +29 -0
  391. package/skill/references/types/TPCB_LayersOfImage.md +23 -0
  392. package/skill/references/types/TPCB_LayersOfInner.md +42 -0
  393. package/skill/references/types/TPCB_LayersOfLine.md +26 -0
  394. package/skill/references/types/TPCB_LayersOfObject.md +13 -0
  395. package/skill/references/types/TPCB_LayersOfPad.md +12 -0
  396. package/skill/references/types/TPCB_LayersOfRegion.md +12 -0
  397. package/skill/references/types/TPCB_NumberOfCopperLayers.md +10 -0
  398. package/skill/references/types/TPCB_PolygonSourceArray.md +83 -0
  399. package/skill/references/types/TPCB_PrimitiveDimensionCoordinateSet.md +67 -0
  400. package/skill/references/types/TPCB_PrimitivePadHole.md +31 -0
  401. package/skill/references/types/TPCB_PrimitivePadShape.md +62 -0
  402. package/skill/references/types/TPCB_PrimitiveSpecialPadShape.md +20 -0
  403. package/skill/references/types/TSYS_MathPolygonGroup.md +16 -0
  404. package/skill/references/types/TSYS_MathPolygonInput.md +21 -0
  405. package/skill/references/types/TSYS_PcbComparisonErrorCode.md +10 -0
  406. package/skill/references/types/TSYS_ShortcutKeys.md +97 -0
  407. package/skill/user-guide/using-extension.md +47 -0
@@ -0,0 +1,1565 @@
1
+ # SYS\_Math class
2
+
3
+ System / math class
4
+
5
+ ## Signature
6
+
7
+ ```typescript
8
+ class SYS_Math
9
+ ```
10
+
11
+ ## Remarks
12
+
13
+ Provides polygon geometry calculation methods, supporting discrete point coordinates and [TPCB\_PolygonSourceArray](../types/TPCB_PolygonSourceArray.md) polygon data
14
+
15
+ ## Methods
16
+
17
+ <table><thead><tr><th>
18
+
19
+ Method
20
+
21
+ </th><th>
22
+
23
+ Modifiers
24
+
25
+ </th><th>
26
+
27
+ Description
28
+
29
+ </th></tr></thead>
30
+ <tbody><tr><td>
31
+
32
+ [bboxIntersects(bbox1, bbox2)](./SYS_Math.md)
33
+
34
+ </td><td>
35
+
36
+ </td><td>
37
+
38
+ Quickly determine whether two BBoxes intersect
39
+
40
+ </td></tr>
41
+ <tr><td>
42
+
43
+ [calculateArea(polygon)](./SYS_Math.md)
44
+
45
+ </td><td>
46
+
47
+ </td><td>
48
+
49
+ Calculate the area of a polygon
50
+
51
+ </td></tr>
52
+ <tr><td>
53
+
54
+ [calculatePerimeter(polygon)](./SYS_Math.md)
55
+
56
+ </td><td>
57
+
58
+ </td><td>
59
+
60
+ Calculate the perimeter of a polygon
61
+
62
+ </td></tr>
63
+ <tr><td>
64
+
65
+ [contains(polygon1, polygon2)](./SYS_Math.md)
66
+
67
+ </td><td>
68
+
69
+ </td><td>
70
+
71
+ Determine whether polygon1 completely contains polygon2
72
+
73
+ </td></tr>
74
+ <tr><td>
75
+
76
+ [containsPoint(polygon, point)](./SYS_Math.md)
77
+
78
+ </td><td>
79
+
80
+ </td><td>
81
+
82
+ Determine whether the point is inside the polygon
83
+
84
+ </td></tr>
85
+ <tr><td>
86
+
87
+ [distanceToPoint(polygon, point)](./SYS_Math.md)
88
+
89
+ </td><td>
90
+
91
+ </td><td>
92
+
93
+ Calculate the shortest distance from a point to the polygon boundary
94
+
95
+ </td></tr>
96
+ <tr><td>
97
+
98
+ [getBBox(polygon)](./SYS_Math.md)
99
+
100
+ </td><td>
101
+
102
+ </td><td>
103
+
104
+ Get the minimum bounding rectangle (BBox) of the polygon
105
+
106
+ </td></tr>
107
+ <tr><td>
108
+
109
+ [getCentroid(polygon)](./SYS_Math.md)
110
+
111
+ </td><td>
112
+
113
+ </td><td>
114
+
115
+ Calculate the centroid of the polygon
116
+
117
+ </td></tr>
118
+ <tr><td>
119
+
120
+ [intersection(polygon1, polygon2)](./SYS_Math.md)
121
+
122
+ </td><td>
123
+
124
+ </td><td>
125
+
126
+ Calculate the intersection of two polygons
127
+
128
+ </td></tr>
129
+ <tr><td>
130
+
131
+ [intersects(polygon1, polygon2)](./SYS_Math.md)
132
+
133
+ </td><td>
134
+
135
+ </td><td>
136
+
137
+ Determine whether two polygons intersect
138
+
139
+ </td></tr>
140
+ <tr><td>
141
+
142
+ [rotate(polygon, angle, centerX, centerY)](./SYS_Math.md)
143
+
144
+ </td><td>
145
+
146
+ </td><td>
147
+
148
+ Rotate the polygon
149
+
150
+ </td></tr>
151
+ <tr><td>
152
+
153
+ [scale(polygon, scaleX, scaleY, centerX, centerY)](./SYS_Math.md)
154
+
155
+ </td><td>
156
+
157
+ </td><td>
158
+
159
+ Scale the polygon
160
+
161
+ </td></tr>
162
+ <tr><td>
163
+
164
+ [subtract(polygon1, polygon2)](./SYS_Math.md)
165
+
166
+ </td><td>
167
+
168
+ </td><td>
169
+
170
+ Calculate the difference of two polygons (polygon1 - polygon2)
171
+
172
+ </td></tr>
173
+ <tr><td>
174
+
175
+ [translate(polygon, dx, dy)](./SYS_Math.md)
176
+
177
+ </td><td>
178
+
179
+ </td><td>
180
+
181
+ Translate the polygon
182
+
183
+ </td></tr>
184
+ <tr><td>
185
+
186
+ [union(polygon1, polygon2)](./SYS_Math.md)
187
+
188
+ </td><td>
189
+
190
+ </td><td>
191
+
192
+ Calculate the union of two polygons
193
+
194
+ </td></tr>
195
+ <tr><td>
196
+
197
+ [xor(polygon1, polygon2)](./SYS_Math.md)
198
+
199
+ </td><td>
200
+
201
+ </td><td>
202
+
203
+ Calculate the symmetric difference (XOR) of two polygons
204
+
205
+ </td></tr>
206
+ </tbody></table>
207
+
208
+ ---
209
+
210
+ ## 方法详情
211
+
212
+ ### bboxintersects
213
+
214
+ # SYS\_Math.bboxIntersects() method
215
+
216
+ Quickly determine whether two BBoxes intersect
217
+
218
+ ## Signature
219
+
220
+ ```typescript
221
+ function bboxIntersects(bbox1: ISYS_MathBBox, bbox2: ISYS_MathBBox): boolean;
222
+ ```
223
+
224
+ ## Parameters
225
+
226
+ <table><thead><tr><th>
227
+
228
+ Parameter
229
+
230
+ </th><th>
231
+
232
+ Type
233
+
234
+ </th><th>
235
+
236
+ Description
237
+
238
+ </th></tr></thead>
239
+ <tbody><tr><td>
240
+
241
+ bbox1
242
+
243
+ </td><td>
244
+
245
+ [ISYS\_MathBBox](../interfaces/ISYS_MathBBox.md)
246
+
247
+ </td><td>
248
+
249
+ BBox 1
250
+
251
+ </td></tr>
252
+ <tr><td>
253
+
254
+ bbox2
255
+
256
+ </td><td>
257
+
258
+ [ISYS\_MathBBox](../interfaces/ISYS_MathBBox.md)
259
+
260
+ </td><td>
261
+
262
+ BBox 2
263
+
264
+ </td></tr>
265
+ </tbody></table>
266
+
267
+ ## Returns
268
+
269
+ boolean
270
+
271
+ Whether they intersect
272
+
273
+ ## Example
274
+
275
+ ```javascript
276
+ // 1. 两块铺铜区域的外接矩形(部分重叠)
277
+ const zoneA = { minX: 0, minY: 0, maxX: 100, maxY: 80 };
278
+ const zoneB = { minX: 50, minY: 20, maxX: 150, maxY: 60 };
279
+ console.log('区域 A 与区域 B 相交:', eda.sys_Math.bboxIntersects(zoneA, zoneB));
280
+
281
+ // 2. 完全分离的两个矩形(不相交,粗筛即可排除)
282
+ const zoneC = { minX: 200, minY: 200, maxX: 300, maxY: 280 };
283
+ console.log('区域 A 与区域 C 相交:', eda.sys_Math.bboxIntersects(zoneA, zoneC));
284
+
285
+ // 3. 仅有边界接触也算相交(贴合的两个矩形)
286
+ const zoneD = { minX: 100, minY: 0, maxX: 180, maxY: 40 };
287
+ console.log('区域 A 与区域 D 相交:', eda.sys_Math.bboxIntersects(zoneA, zoneD));
288
+ ```
289
+
290
+ ### calculatearea
291
+
292
+ # SYS\_Math.calculateArea() method
293
+
294
+ Calculate the area of a polygon
295
+
296
+ ## Signature
297
+
298
+ ```typescript
299
+ function calculateArea(polygon: TSYS_MathPolygonInput): number;
300
+ ```
301
+
302
+ ## Parameters
303
+
304
+ <table><thead><tr><th>
305
+
306
+ Parameter
307
+
308
+ </th><th>
309
+
310
+ Type
311
+
312
+ </th><th>
313
+
314
+ Description
315
+
316
+ </th></tr></thead>
317
+ <tbody><tr><td>
318
+
319
+ polygon
320
+
321
+ </td><td>
322
+
323
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
324
+
325
+ </td><td>
326
+
327
+ Polygon or polygon group
328
+
329
+ </td></tr>
330
+ </tbody></table>
331
+
332
+ ## Returns
333
+
334
+ number
335
+
336
+ Area (absolute area for a single polygon, net area for a polygon group)
337
+
338
+ ## Remarks
339
+
340
+ Calculated using the Shoelace formula: - When a single polygon is passed in, the absolute area of the polygon is returned - When a polygon group ([TSYS\_MathPolygonGroup](../types/TSYS_MathPolygonGroup.md)<!-- -->, such as the return value of Boolean operations) is passed in, the net area is obtained by subtracting the sum of all hole areas from the sum of all outer ring areas
341
+
342
+ ## Example
343
+
344
+ ```javascript
345
+ // 1. 单个矩形 100 x 80(单位随输入坐标系,PCB 场景下通常是 mil)
346
+ const rect = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
347
+ console.log('矩形面积:', eda.sys_Math.calculateArea(rect));
348
+
349
+ // 2. 单个三角形(底 100 高 60,面积应为 3000)
350
+ const triangle = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 50, y: 60 }];
351
+ console.log('三角形面积:', eda.sys_Math.calculateArea(triangle));
352
+
353
+ // 3. 布尔运算返回的多边形组直接作为输入,得到净面积(含孔洞时自动扣除)
354
+ const overlap = [{ x: 50, y: 20 }, { x: 150, y: 20 }, { x: 150, y: 60 }, { x: 50, y: 60 }];
355
+ const merged = eda.sys_Math.union(rect, overlap);
356
+ console.log('两矩形合并后的净面积:', eda.sys_Math.calculateArea(merged));
357
+ ```
358
+
359
+ ### calculateperimeter
360
+
361
+ # SYS\_Math.calculatePerimeter() method
362
+
363
+ Calculate the perimeter of a polygon
364
+
365
+ ## Signature
366
+
367
+ ```typescript
368
+ function calculatePerimeter(polygon: TSYS_MathPolygonInput): number;
369
+ ```
370
+
371
+ ## Parameters
372
+
373
+ <table><thead><tr><th>
374
+
375
+ Parameter
376
+
377
+ </th><th>
378
+
379
+ Type
380
+
381
+ </th><th>
382
+
383
+ Description
384
+
385
+ </th></tr></thead>
386
+ <tbody><tr><td>
387
+
388
+ polygon
389
+
390
+ </td><td>
391
+
392
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
393
+
394
+ </td><td>
395
+
396
+ Polygon
397
+
398
+ </td></tr>
399
+ </tbody></table>
400
+
401
+ ## Returns
402
+
403
+ number
404
+
405
+ Perimeter
406
+
407
+ ## Example
408
+
409
+ ```javascript
410
+ // 1. 矩形 100 x 80,周长应为 360
411
+ const rect = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
412
+ console.log('矩形周长:', eda.sys_Math.calculatePerimeter(rect));
413
+
414
+ // 2. L 形轮廓(缺口裁掉一个角,周长按实际边界累加)
415
+ const lShape = [
416
+ { x: 0, y: 0 },
417
+ { x: 100, y: 0 },
418
+ { x: 100, y: 40 },
419
+ { x: 40, y: 40 },
420
+ { x: 40, y: 80 },
421
+ { x: 0, y: 80 },
422
+ ];
423
+ console.log('L 形轮廓周长:', eda.sys_Math.calculatePerimeter(lShape));
424
+
425
+ // 3. 布尔运算返回的多边形组同样可以作为输入
426
+ const hole = [{ x: 30, y: 20 }, { x: 70, y: 20 }, { x: 70, y: 60 }, { x: 30, y: 60 }];
427
+ const cut = eda.sys_Math.subtract(rect, hole);
428
+ console.log('挖孔后多边形组的周长:', eda.sys_Math.calculatePerimeter(cut));
429
+ ```
430
+
431
+ ### contains
432
+
433
+ # SYS\_Math.contains() method
434
+
435
+ Determine whether polygon1 completely contains polygon2
436
+
437
+ ## Signature
438
+
439
+ ```typescript
440
+ function contains(polygon1: TSYS_MathPolygonInput, polygon2: TSYS_MathPolygonInput): boolean;
441
+ ```
442
+
443
+ ## Parameters
444
+
445
+ <table><thead><tr><th>
446
+
447
+ Parameter
448
+
449
+ </th><th>
450
+
451
+ Type
452
+
453
+ </th><th>
454
+
455
+ Description
456
+
457
+ </th></tr></thead>
458
+ <tbody><tr><td>
459
+
460
+ polygon1
461
+
462
+ </td><td>
463
+
464
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
465
+
466
+ </td><td>
467
+
468
+ Outer polygon
469
+
470
+ </td></tr>
471
+ <tr><td>
472
+
473
+ polygon2
474
+
475
+ </td><td>
476
+
477
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
478
+
479
+ </td><td>
480
+
481
+ Internal polygon
482
+
483
+ </td></tr>
484
+ </tbody></table>
485
+
486
+ ## Returns
487
+
488
+ boolean
489
+
490
+ Whether polygon1 completely contains polygon2
491
+
492
+ ## Example
493
+
494
+ ```javascript
495
+ // 1. 小矩形完全落在大矩形内部 → true
496
+ const board = [{ x: 0, y: 0 }, { x: 200, y: 0 }, { x: 200, y: 120 }, { x: 0, y: 120 }];
497
+ const device = [{ x: 50, y: 40 }, { x: 90, y: 40 }, { x: 90, y: 70 }, { x: 50, y: 70 }];
498
+ console.log('板框完全包含器件:', eda.sys_Math.contains(board, device));
499
+
500
+ // 2. 器件跨越板框边界(部分重叠,不是完全包含)→ false
501
+ const overhang = [{ x: 150, y: 40 }, { x: 250, y: 40 }, { x: 250, y: 70 }, { x: 150, y: 70 }];
502
+ console.log('板框完全包含越界器件:', eda.sys_Math.contains(board, overhang));
503
+
504
+ // 3. 只关心区域重叠不关心完全包含时,配合 intersects 使用
505
+ console.log('两器件区域有重叠:', eda.sys_Math.intersects(device, overhang));
506
+ ```
507
+
508
+ ### containspoint
509
+
510
+ # SYS\_Math.containsPoint() method
511
+
512
+ Determine whether the point is inside the polygon
513
+
514
+ ## Signature
515
+
516
+ ```typescript
517
+ function containsPoint(polygon: TSYS_MathPolygonInput, point: ISYS_MathPoint): boolean;
518
+ ```
519
+
520
+ ## Parameters
521
+
522
+ <table><thead><tr><th>
523
+
524
+ Parameter
525
+
526
+ </th><th>
527
+
528
+ Type
529
+
530
+ </th><th>
531
+
532
+ Description
533
+
534
+ </th></tr></thead>
535
+ <tbody><tr><td>
536
+
537
+ polygon
538
+
539
+ </td><td>
540
+
541
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
542
+
543
+ </td><td>
544
+
545
+ Polygon
546
+
547
+ </td></tr>
548
+ <tr><td>
549
+
550
+ point
551
+
552
+ </td><td>
553
+
554
+ [ISYS\_MathPoint](../interfaces/ISYS_MathPoint.md)
555
+
556
+ </td><td>
557
+
558
+ The point to determine
559
+
560
+ </td></tr>
561
+ </tbody></table>
562
+
563
+ ## Returns
564
+
565
+ boolean
566
+
567
+ Whether In polygon internal
568
+
569
+ ## Remarks
570
+
571
+ Use the ray casting method to determine whether the point is inside the polygon
572
+
573
+ Due to the characteristics of the ray casting method, points on the boundary behave inconsistently: some boundary points may return `true`<!-- -->, and some may return `false`<!-- -->, depending on the geometric relationship between the ray direction and the boundary
574
+
575
+ To strictly determine whether the point is on the boundary, combine [SYS\_Math.distanceToPoint()](./SYS_Math.md) to check whether the distance is `0`
576
+
577
+ ## Example
578
+
579
+ ```javascript
580
+ // 1. 定义一块禁布区,测试三个典型位置的点
581
+ const keepout = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
582
+ const inside = { x: 50, y: 40 }; // 区域中心,明显在内部
583
+ const outside = { x: 150, y: 40 }; // 区域右侧,明显在外部
584
+ const corner = { x: 0, y: 0 }; // 顶点,落在边界上
585
+
586
+ console.log('中心点在禁布区内:', eda.sys_Math.containsPoint(keepout, inside));
587
+ console.log('外部点在禁布区内:', eda.sys_Math.containsPoint(keepout, outside));
588
+ console.log('顶点在禁布区内:', eda.sys_Math.containsPoint(keepout, corner));
589
+
590
+ // 2. 严格判断边界点:距离为 0 说明点恰好在边界上
591
+ console.log('顶点到边界的距离:', eda.sys_Math.distanceToPoint(keepout, corner));
592
+ ```
593
+
594
+ ### distancetopoint
595
+
596
+ # SYS\_Math.distanceToPoint() method
597
+
598
+ Calculate the shortest distance from a point to the polygon boundary
599
+
600
+ ## Signature
601
+
602
+ ```typescript
603
+ function distanceToPoint(polygon: TSYS_MathPolygonInput, point: ISYS_MathPoint): number;
604
+ ```
605
+
606
+ ## Parameters
607
+
608
+ <table><thead><tr><th>
609
+
610
+ Parameter
611
+
612
+ </th><th>
613
+
614
+ Type
615
+
616
+ </th><th>
617
+
618
+ Description
619
+
620
+ </th></tr></thead>
621
+ <tbody><tr><td>
622
+
623
+ polygon
624
+
625
+ </td><td>
626
+
627
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
628
+
629
+ </td><td>
630
+
631
+ Polygon
632
+
633
+ </td></tr>
634
+ <tr><td>
635
+
636
+ point
637
+
638
+ </td><td>
639
+
640
+ [ISYS\_MathPoint](../interfaces/ISYS_MathPoint.md)
641
+
642
+ </td><td>
643
+
644
+ The point to calculate
645
+
646
+ </td></tr>
647
+ </tbody></table>
648
+
649
+ ## Returns
650
+
651
+ number
652
+
653
+ Shortest distance. If the point is inside the polygon, `0` is returned
654
+
655
+ ## Example
656
+
657
+ ```javascript
658
+ // 1. 定义矩形区域(右边界在 x = 100)
659
+ const zone = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
660
+
661
+ // 2. 外部点:到右边界的水平距离为 50
662
+ const outsidePoint = { x: 150, y: 40 };
663
+ console.log('外部点到边界的最短距离:', eda.sys_Math.distanceToPoint(zone, outsidePoint));
664
+
665
+ // 3. 内部点:在多边形内部时返回 0
666
+ const insidePoint = { x: 50, y: 40 };
667
+ console.log('内部点到边界的最短距离:', eda.sys_Math.distanceToPoint(zone, insidePoint));
668
+
669
+ // 4. 斜向最近边不是正对的那条边时,结果取真实垂线距离
670
+ const diagonalPoint = { x: 130, y: 110 };
671
+ console.log('斜向点到边界的最短距离:', eda.sys_Math.distanceToPoint(zone, diagonalPoint));
672
+ ```
673
+
674
+ ### getbbox
675
+
676
+ # SYS\_Math.getBBox() method
677
+
678
+ Get the minimum bounding rectangle (BBox) of the polygon
679
+
680
+ ## Signature
681
+
682
+ ```typescript
683
+ function getBBox(polygon: TSYS_MathPolygonInput): ISYS_MathBBox;
684
+ ```
685
+
686
+ ## Parameters
687
+
688
+ <table><thead><tr><th>
689
+
690
+ Parameter
691
+
692
+ </th><th>
693
+
694
+ Type
695
+
696
+ </th><th>
697
+
698
+ Description
699
+
700
+ </th></tr></thead>
701
+ <tbody><tr><td>
702
+
703
+ polygon
704
+
705
+ </td><td>
706
+
707
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
708
+
709
+ </td><td>
710
+
711
+ Polygon
712
+
713
+ </td></tr>
714
+ </tbody></table>
715
+
716
+ ## Returns
717
+
718
+ [ISYS\_MathBBox](../interfaces/ISYS_MathBBox.md)
719
+
720
+ BBox
721
+
722
+ ## Example
723
+
724
+ ```javascript
725
+ // 1. 斜置的三角形,外接矩形由三个顶点的极值决定
726
+ const triangle = [{ x: 30, y: 10 }, { x: 120, y: 50 }, { x: 60, y: 90 }];
727
+ const bbox = eda.sys_Math.getBBox(triangle);
728
+ console.log('三角形的最小外接矩形:', JSON.stringify(bbox));
729
+
730
+ // 2. 布尔运算得到的多边形组同样可以求 BBox(取整组的外包范围)
731
+ const rectA = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
732
+ const rectB = [{ x: 50, y: 20 }, { x: 150, y: 20 }, { x: 150, y: 60 }, { x: 50, y: 60 }];
733
+ const merged = eda.sys_Math.union(rectA, rectB);
734
+ console.log('合并区域的最小外接矩形:', JSON.stringify(eda.sys_Math.getBBox(merged)));
735
+
736
+ // 3. BBox 直接作为 bboxIntersects() 的输入做快速相交预检
737
+ const other = { minX: 200, minY: 0, maxX: 280, maxY: 40 };
738
+ console.log('两区域外接矩形相交:', eda.sys_Math.bboxIntersects(bbox, other));
739
+ ```
740
+
741
+ ### getcentroid
742
+
743
+ # SYS\_Math.getCentroid() method
744
+
745
+ Calculate the centroid of the polygon
746
+
747
+ ## Signature
748
+
749
+ ```typescript
750
+ function getCentroid(polygon: TSYS_MathPolygonInput): ISYS_MathPoint;
751
+ ```
752
+
753
+ ## Parameters
754
+
755
+ <table><thead><tr><th>
756
+
757
+ Parameter
758
+
759
+ </th><th>
760
+
761
+ Type
762
+
763
+ </th><th>
764
+
765
+ Description
766
+
767
+ </th></tr></thead>
768
+ <tbody><tr><td>
769
+
770
+ polygon
771
+
772
+ </td><td>
773
+
774
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
775
+
776
+ </td><td>
777
+
778
+ Polygon
779
+
780
+ </td></tr>
781
+ </tbody></table>
782
+
783
+ ## Returns
784
+
785
+ [ISYS\_MathPoint](../interfaces/ISYS_MathPoint.md)
786
+
787
+ Centroid coordinate
788
+
789
+ ## Example
790
+
791
+ ```javascript
792
+ // 1. 规则矩形:质心就是几何中心 (50, 40)
793
+ const rect = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
794
+ console.log('矩形质心:', JSON.stringify(eda.sys_Math.getCentroid(rect)));
795
+
796
+ // 2. L 形轮廓:质心向材料厚的一侧偏移,不再等于外接矩形中心 (50, 40)
797
+ const lShape = [
798
+ { x: 0, y: 0 },
799
+ { x: 100, y: 0 },
800
+ { x: 100, y: 40 },
801
+ { x: 40, y: 40 },
802
+ { x: 40, y: 80 },
803
+ { x: 0, y: 80 },
804
+ ];
805
+ const centroid = eda.sys_Math.getCentroid(lShape);
806
+ console.log('L 形质心:', JSON.stringify(centroid));
807
+
808
+ // 3. 以质心为中心做旋转,图形绕自身几何中心原地转动
809
+ const rotated = eda.sys_Math.rotate(rect, 90);
810
+ console.log('绕质心旋转 90 度后的第一个点:', JSON.stringify(rotated[0]));
811
+ ```
812
+
813
+ ### intersection
814
+
815
+ # SYS\_Math.intersection() method
816
+
817
+ Calculate the intersection of two polygons
818
+
819
+ ## Signature
820
+
821
+ ```typescript
822
+ function intersection(
823
+ polygon1: TSYS_MathPolygonInput,
824
+ polygon2: TSYS_MathPolygonInput,
825
+ ): TSYS_MathPolygonGroup;
826
+ ```
827
+
828
+ ## Parameters
829
+
830
+ <table><thead><tr><th>
831
+
832
+ Parameter
833
+
834
+ </th><th>
835
+
836
+ Type
837
+
838
+ </th><th>
839
+
840
+ Description
841
+
842
+ </th></tr></thead>
843
+ <tbody><tr><td>
844
+
845
+ polygon1
846
+
847
+ </td><td>
848
+
849
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
850
+
851
+ </td><td>
852
+
853
+ Polygon 1
854
+
855
+ </td></tr>
856
+ <tr><td>
857
+
858
+ polygon2
859
+
860
+ </td><td>
861
+
862
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
863
+
864
+ </td><td>
865
+
866
+ Polygon 2
867
+
868
+ </td></tr>
869
+ </tbody></table>
870
+
871
+ ## Returns
872
+
873
+ [TSYS\_MathPolygonGroup](../types/TSYS_MathPolygonGroup.md)
874
+
875
+ Polygon group of the intersection result. An empty array means no intersection
876
+
877
+ ## Example
878
+
879
+ ```javascript
880
+ // 1. 两块部分重叠的矩形区域
881
+ const copperA = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
882
+ const copperB = [{ x: 50, y: 20 }, { x: 150, y: 20 }, { x: 150, y: 60 }, { x: 50, y: 60 }];
883
+
884
+ // 2. 求交集,结果为一个新的多边形组
885
+ const overlap = eda.sys_Math.intersection(copperA, copperB);
886
+ console.log('重叠区域个数:', overlap.length);
887
+ console.log('重叠区域外环顶点:', overlap[0].outer.length, '个');
888
+ console.log('重叠区域孔洞数:', overlap[0].holes.length);
889
+
890
+ // 3. 交集面积:100 x 100 与 100 x 80 的重叠部分为 50 x 40 = 2000
891
+ console.log('重叠区域面积:', eda.sys_Math.calculateArea(overlap));
892
+
893
+ // 4. 完全分离的两个多边形没有交集,返回空数组
894
+ const far = [{ x: 200, y: 0 }, { x: 280, y: 0 }, { x: 280, y: 40 }, { x: 200, y: 40 }];
895
+ console.log('分离区域的交集个数:', eda.sys_Math.intersection(copperA, far).length);
896
+ ```
897
+
898
+ ### intersects
899
+
900
+ # SYS\_Math.intersects() method
901
+
902
+ Determine whether two polygons intersect
903
+
904
+ ## Signature
905
+
906
+ ```typescript
907
+ function intersects(polygon1: TSYS_MathPolygonInput, polygon2: TSYS_MathPolygonInput): boolean;
908
+ ```
909
+
910
+ ## Parameters
911
+
912
+ <table><thead><tr><th>
913
+
914
+ Parameter
915
+
916
+ </th><th>
917
+
918
+ Type
919
+
920
+ </th><th>
921
+
922
+ Description
923
+
924
+ </th></tr></thead>
925
+ <tbody><tr><td>
926
+
927
+ polygon1
928
+
929
+ </td><td>
930
+
931
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
932
+
933
+ </td><td>
934
+
935
+ Polygon 1
936
+
937
+ </td></tr>
938
+ <tr><td>
939
+
940
+ polygon2
941
+
942
+ </td><td>
943
+
944
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
945
+
946
+ </td><td>
947
+
948
+ Polygon 2
949
+
950
+ </td></tr>
951
+ </tbody></table>
952
+
953
+ ## Returns
954
+
955
+ boolean
956
+
957
+ Whether they intersect
958
+
959
+ ## Remarks
960
+
961
+ Determine whether the regions of two polygons have any overlap (including containment, partial intersection, and boundary contact)
962
+
963
+ ## Example
964
+
965
+ ```javascript
966
+ // 1. 部分重叠的两个矩形 → true
967
+ const trace = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
968
+ const keepout = [{ x: 50, y: 20 }, { x: 150, y: 20 }, { x: 150, y: 60 }, { x: 50, y: 60 }];
969
+ console.log('走线闯入禁布区:', eda.sys_Math.intersects(trace, keepout));
970
+
971
+ // 2. 完全分离 → false
972
+ const far = [{ x: 200, y: 0 }, { x: 280, y: 0 }, { x: 280, y: 40 }, { x: 200, y: 40 }];
973
+ console.log('走线远离另一区域:', eda.sys_Math.intersects(trace, far));
974
+
975
+ // 3. 完全包含也是相交的一种 → true
976
+ const small = [{ x: 20, y: 20 }, { x: 60, y: 20 }, { x: 60, y: 50 }, { x: 20, y: 50 }];
977
+ console.log('小区域整体在走线范围内:', eda.sys_Math.intersects(trace, small));
978
+
979
+ // 4. 仅边界贴合同样算相交 → true
980
+ const touching = [{ x: 100, y: 0 }, { x: 180, y: 0 }, { x: 180, y: 40 }, { x: 100, y: 40 }];
981
+ console.log('两区域边界贴合:', eda.sys_Math.intersects(trace, touching));
982
+ ```
983
+
984
+ ### rotate
985
+
986
+ # SYS\_Math.rotate() method
987
+
988
+ Rotate the polygon
989
+
990
+ ## Signature
991
+
992
+ ```typescript
993
+ function rotate(
994
+ polygon: TSYS_MathPolygonInput,
995
+ angle: number,
996
+ centerX?: number,
997
+ centerY?: number,
998
+ ): Array<ISYS_MathPoint>;
999
+ ```
1000
+
1001
+ ## Parameters
1002
+
1003
+ <table><thead><tr><th>
1004
+
1005
+ Parameter
1006
+
1007
+ </th><th>
1008
+
1009
+ Type
1010
+
1011
+ </th><th>
1012
+
1013
+ Description
1014
+
1015
+ </th></tr></thead>
1016
+ <tbody><tr><td>
1017
+
1018
+ polygon
1019
+
1020
+ </td><td>
1021
+
1022
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
1023
+
1024
+ </td><td>
1025
+
1026
+ Polygon
1027
+
1028
+ </td></tr>
1029
+ <tr><td>
1030
+
1031
+ angle
1032
+
1033
+ </td><td>
1034
+
1035
+ number
1036
+
1037
+ </td><td>
1038
+
1039
+ Rotation angle (in degrees, positive values are counterclockwise)
1040
+
1041
+ </td></tr>
1042
+ <tr><td>
1043
+
1044
+ centerX
1045
+
1046
+ </td><td>
1047
+
1048
+ number
1049
+
1050
+ </td><td>
1051
+
1052
+ _(Optional)_ X coordinate of the rotation center, defaulting to the centroid
1053
+
1054
+ </td></tr>
1055
+ <tr><td>
1056
+
1057
+ centerY
1058
+
1059
+ </td><td>
1060
+
1061
+ number
1062
+
1063
+ </td><td>
1064
+
1065
+ _(Optional)_ Y coordinate of the rotation center, defaulting to the centroid
1066
+
1067
+ </td></tr>
1068
+ </tbody></table>
1069
+
1070
+ ## Returns
1071
+
1072
+ Array&lt;[ISYS\_MathPoint](../interfaces/ISYS_MathPoint.md)<!-- -->&gt;
1073
+
1074
+ Array of discrete points after rotation
1075
+
1076
+ ## Example
1077
+
1078
+ ```javascript
1079
+ // 1. 定义一个矩形安装座
1080
+ const mount = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
1081
+
1082
+ // 2. 不传中心:绕质心 (50, 40) 逆时针旋转 90 度,占位原地转身
1083
+ const selfRotated = eda.sys_Math.rotate(mount, 90);
1084
+ console.log('绕质心旋转后的顶点:', JSON.stringify(selfRotated));
1085
+
1086
+ // 3. 传中心参数:绕坐标原点 (0, 0) 旋转 90 度,图形整体公转
1087
+ // 逆时针 90 度把 (x, y) 映射为 (-y, x)
1088
+ const originRotated = eda.sys_Math.rotate(mount, 90, 0, 0);
1089
+ console.log('绕原点旋转后的顶点:', JSON.stringify(originRotated));
1090
+
1091
+ // 4. 负角度顺时针旋转,与正角度互为逆变换
1092
+ const back = eda.sys_Math.rotate(originRotated, -90, 0, 0);
1093
+ console.log('再顺时针转回后的第一个点:', JSON.stringify(back[0]));
1094
+ ```
1095
+
1096
+ ### scale
1097
+
1098
+ # SYS\_Math.scale() method
1099
+
1100
+ Scale the polygon
1101
+
1102
+ ## Signature
1103
+
1104
+ ```typescript
1105
+ function scale(
1106
+ polygon: TSYS_MathPolygonInput,
1107
+ scaleX: number,
1108
+ scaleY?: number,
1109
+ centerX?: number,
1110
+ centerY?: number,
1111
+ ): Array<ISYS_MathPoint>;
1112
+ ```
1113
+
1114
+ ## Parameters
1115
+
1116
+ <table><thead><tr><th>
1117
+
1118
+ Parameter
1119
+
1120
+ </th><th>
1121
+
1122
+ Type
1123
+
1124
+ </th><th>
1125
+
1126
+ Description
1127
+
1128
+ </th></tr></thead>
1129
+ <tbody><tr><td>
1130
+
1131
+ polygon
1132
+
1133
+ </td><td>
1134
+
1135
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
1136
+
1137
+ </td><td>
1138
+
1139
+ Polygon
1140
+
1141
+ </td></tr>
1142
+ <tr><td>
1143
+
1144
+ scaleX
1145
+
1146
+ </td><td>
1147
+
1148
+ number
1149
+
1150
+ </td><td>
1151
+
1152
+ X direction scale ratio
1153
+
1154
+ </td></tr>
1155
+ <tr><td>
1156
+
1157
+ scaleY
1158
+
1159
+ </td><td>
1160
+
1161
+ number
1162
+
1163
+ </td><td>
1164
+
1165
+ _(Optional)_ Y direction scale ratio, defaulting to the same as scaleX
1166
+
1167
+ </td></tr>
1168
+ <tr><td>
1169
+
1170
+ centerX
1171
+
1172
+ </td><td>
1173
+
1174
+ number
1175
+
1176
+ </td><td>
1177
+
1178
+ _(Optional)_ X coordinate of the scaling center, defaulting to the centroid
1179
+
1180
+ </td></tr>
1181
+ <tr><td>
1182
+
1183
+ centerY
1184
+
1185
+ </td><td>
1186
+
1187
+ number
1188
+
1189
+ </td><td>
1190
+
1191
+ _(Optional)_ Y coordinate of the scaling center, defaulting to the centroid
1192
+
1193
+ </td></tr>
1194
+ </tbody></table>
1195
+
1196
+ ## Returns
1197
+
1198
+ Array&lt;[ISYS\_MathPoint](../interfaces/ISYS_MathPoint.md)<!-- -->&gt;
1199
+
1200
+ Array of discrete points after scaling
1201
+
1202
+ ## Example
1203
+
1204
+ ```javascript
1205
+ // 1. 定义一个矩形焊区
1206
+ const pad = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
1207
+
1208
+ // 2. 等比放大 1.5 倍:绕质心原地放大,面积变为 2.25 倍
1209
+ const enlarged = eda.sys_Math.scale(pad, 1.5);
1210
+ console.log('放大 1.5 倍后的顶点:', JSON.stringify(enlarged));
1211
+ console.log('放大后的面积:', eda.sys_Math.calculateArea(enlarged));
1212
+
1213
+ // 3. X、Y 采用不同比例:只在 X 方向拉宽 2 倍(绕质心,Y 不变)
1214
+ const stretched = eda.sys_Math.scale(pad, 2, 1);
1215
+ console.log('仅 X 方向放大 2 倍后的顶点:', JSON.stringify(stretched));
1216
+
1217
+ // 4. 指定缩放中心 (0, 0):各点坐标直接乘以比例
1218
+ const fromOrigin = eda.sys_Math.scale(pad, 2, 2, 0, 0);
1219
+ console.log('绕原点放大后的第一个点:', JSON.stringify(fromOrigin[0]));
1220
+ ```
1221
+
1222
+ ### subtract
1223
+
1224
+ # SYS\_Math.subtract() method
1225
+
1226
+ Calculate the difference of two polygons (polygon1 - polygon2)
1227
+
1228
+ ## Signature
1229
+
1230
+ ```typescript
1231
+ function subtract(
1232
+ polygon1: TSYS_MathPolygonInput,
1233
+ polygon2: TSYS_MathPolygonInput,
1234
+ ): TSYS_MathPolygonGroup;
1235
+ ```
1236
+
1237
+ ## Parameters
1238
+
1239
+ <table><thead><tr><th>
1240
+
1241
+ Parameter
1242
+
1243
+ </th><th>
1244
+
1245
+ Type
1246
+
1247
+ </th><th>
1248
+
1249
+ Description
1250
+
1251
+ </th></tr></thead>
1252
+ <tbody><tr><td>
1253
+
1254
+ polygon1
1255
+
1256
+ </td><td>
1257
+
1258
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
1259
+
1260
+ </td><td>
1261
+
1262
+ Minuend polygon
1263
+
1264
+ </td></tr>
1265
+ <tr><td>
1266
+
1267
+ polygon2
1268
+
1269
+ </td><td>
1270
+
1271
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
1272
+
1273
+ </td><td>
1274
+
1275
+ Subtrahend polygon
1276
+
1277
+ </td></tr>
1278
+ </tbody></table>
1279
+
1280
+ ## Returns
1281
+
1282
+ [TSYS\_MathPolygonGroup](../types/TSYS_MathPolygonGroup.md)
1283
+
1284
+ Polygon group of the difference result, preserving the association between outer rings and holes
1285
+
1286
+ ## Example
1287
+
1288
+ ```javascript
1289
+ // 1. 大矩形铺铜区域与一个完全落在其内部的矩形开孔区
1290
+ const copper = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
1291
+ const hole = [{ x: 30, y: 20 }, { x: 70, y: 20 }, { x: 70, y: 60 }, { x: 30, y: 60 }];
1292
+
1293
+ // 2. 挖孔:差集结果的多边形组里,开孔区被记为孔洞
1294
+ const cut = eda.sys_Math.subtract(copper, hole);
1295
+ console.log('差集结果多边形个数:', cut.length);
1296
+ console.log('孔洞数:', cut[0].holes.length);
1297
+
1298
+ // 3. 挖孔后的净面积:100 x 80 - 40 x 40 = 6400
1299
+ console.log('挖孔后的净面积:', eda.sys_Math.calculateArea(cut));
1300
+
1301
+ // 4. 减去完全分离的多边形不产生任何变化(结果仍是原形状的等价组)
1302
+ const far = [{ x: 200, y: 0 }, { x: 280, y: 0 }, { x: 280, y: 40 }, { x: 200, y: 40 }];
1303
+ const untouched = eda.sys_Math.subtract(copper, far);
1304
+ console.log('减去分离区域后的面积:', eda.sys_Math.calculateArea(untouched));
1305
+ ```
1306
+
1307
+ ### translate
1308
+
1309
+ # SYS\_Math.translate() method
1310
+
1311
+ Translate the polygon
1312
+
1313
+ ## Signature
1314
+
1315
+ ```typescript
1316
+ function translate(polygon: TSYS_MathPolygonInput, dx: number, dy: number): Array<ISYS_MathPoint>;
1317
+ ```
1318
+
1319
+ ## Parameters
1320
+
1321
+ <table><thead><tr><th>
1322
+
1323
+ Parameter
1324
+
1325
+ </th><th>
1326
+
1327
+ Type
1328
+
1329
+ </th><th>
1330
+
1331
+ Description
1332
+
1333
+ </th></tr></thead>
1334
+ <tbody><tr><td>
1335
+
1336
+ polygon
1337
+
1338
+ </td><td>
1339
+
1340
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
1341
+
1342
+ </td><td>
1343
+
1344
+ Polygon
1345
+
1346
+ </td></tr>
1347
+ <tr><td>
1348
+
1349
+ dx
1350
+
1351
+ </td><td>
1352
+
1353
+ number
1354
+
1355
+ </td><td>
1356
+
1357
+ X direction offset
1358
+
1359
+ </td></tr>
1360
+ <tr><td>
1361
+
1362
+ dy
1363
+
1364
+ </td><td>
1365
+
1366
+ number
1367
+
1368
+ </td><td>
1369
+
1370
+ Y direction offset
1371
+
1372
+ </td></tr>
1373
+ </tbody></table>
1374
+
1375
+ ## Returns
1376
+
1377
+ Array&lt;[ISYS\_MathPoint](../interfaces/ISYS_MathPoint.md)<!-- -->&gt;
1378
+
1379
+ Array of discrete points after translation
1380
+
1381
+ ## Example
1382
+
1383
+ ```javascript
1384
+ // 1. 定义一个器件占位轮廓
1385
+ const footprint = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
1386
+
1387
+ // 2. 向右平移 200、向上平移 150(得到排布到新位置的轮廓)
1388
+ const placed = eda.sys_Math.translate(footprint, 200, 150);
1389
+ console.log('平移后的顶点:', JSON.stringify(placed));
1390
+
1391
+ // 3. 负偏移向左下方平移
1392
+ const back = eda.sys_Math.translate(placed, -200, -150);
1393
+ console.log('再平移回原位后的第一个点:', JSON.stringify(back[0]));
1394
+
1395
+ // 4. 平移前后形状不变,周长与面积保持一致
1396
+ console.log('平移前后周长:', eda.sys_Math.calculatePerimeter(footprint), '/', eda.sys_Math.calculatePerimeter(placed));
1397
+ ```
1398
+
1399
+ ### union
1400
+
1401
+ # SYS\_Math.union() method
1402
+
1403
+ Calculate the union of two polygons
1404
+
1405
+ ## Signature
1406
+
1407
+ ```typescript
1408
+ function union(
1409
+ polygon1: TSYS_MathPolygonInput,
1410
+ polygon2: TSYS_MathPolygonInput,
1411
+ ): TSYS_MathPolygonGroup;
1412
+ ```
1413
+
1414
+ ## Parameters
1415
+
1416
+ <table><thead><tr><th>
1417
+
1418
+ Parameter
1419
+
1420
+ </th><th>
1421
+
1422
+ Type
1423
+
1424
+ </th><th>
1425
+
1426
+ Description
1427
+
1428
+ </th></tr></thead>
1429
+ <tbody><tr><td>
1430
+
1431
+ polygon1
1432
+
1433
+ </td><td>
1434
+
1435
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
1436
+
1437
+ </td><td>
1438
+
1439
+ Polygon 1
1440
+
1441
+ </td></tr>
1442
+ <tr><td>
1443
+
1444
+ polygon2
1445
+
1446
+ </td><td>
1447
+
1448
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
1449
+
1450
+ </td><td>
1451
+
1452
+ Polygon 2
1453
+
1454
+ </td></tr>
1455
+ </tbody></table>
1456
+
1457
+ ## Returns
1458
+
1459
+ [TSYS\_MathPolygonGroup](../types/TSYS_MathPolygonGroup.md)
1460
+
1461
+ Polygon group of the union result, preserving the association between outer rings and holes
1462
+
1463
+ ## Example
1464
+
1465
+ ```javascript
1466
+ // 1. 两块部分重叠的铺铜区域
1467
+ const copperA = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
1468
+ const copperB = [{ x: 50, y: 20 }, { x: 150, y: 20 }, { x: 150, y: 60 }, { x: 50, y: 60 }];
1469
+
1470
+ // 2. 合并:结果是一个多边形组(重叠区域融合成单一外环,无孔洞)
1471
+ const merged = eda.sys_Math.union(copperA, copperB);
1472
+ console.log('合并后多边形个数:', merged.length);
1473
+ console.log('合并后外环顶点数:', merged[0].outer.length);
1474
+ console.log('合并后孔洞数:', merged[0].holes.length);
1475
+
1476
+ // 3. 合并后的净面积:8000 + 4000 - 重叠的 2000 = 10000(重叠只算一次)
1477
+ console.log('合并后面积:', eda.sys_Math.calculateArea(merged));
1478
+
1479
+ // 4. 完全分离的两个多边形合并时仍是两个独立多边形
1480
+ const far = [{ x: 200, y: 0 }, { x: 280, y: 0 }, { x: 280, y: 40 }, { x: 200, y: 40 }];
1481
+ console.log('分离区域合并后个数:', eda.sys_Math.union(copperA, far).length);
1482
+ ```
1483
+
1484
+ ### xor
1485
+
1486
+ # SYS\_Math.xor() method
1487
+
1488
+ Calculate the symmetric difference (XOR) of two polygons
1489
+
1490
+ ## Signature
1491
+
1492
+ ```typescript
1493
+ function xor(
1494
+ polygon1: TSYS_MathPolygonInput,
1495
+ polygon2: TSYS_MathPolygonInput,
1496
+ ): TSYS_MathPolygonGroup;
1497
+ ```
1498
+
1499
+ ## Parameters
1500
+
1501
+ <table><thead><tr><th>
1502
+
1503
+ Parameter
1504
+
1505
+ </th><th>
1506
+
1507
+ Type
1508
+
1509
+ </th><th>
1510
+
1511
+ Description
1512
+
1513
+ </th></tr></thead>
1514
+ <tbody><tr><td>
1515
+
1516
+ polygon1
1517
+
1518
+ </td><td>
1519
+
1520
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
1521
+
1522
+ </td><td>
1523
+
1524
+ Polygon 1
1525
+
1526
+ </td></tr>
1527
+ <tr><td>
1528
+
1529
+ polygon2
1530
+
1531
+ </td><td>
1532
+
1533
+ [TSYS\_MathPolygonInput](../types/TSYS_MathPolygonInput.md)
1534
+
1535
+ </td><td>
1536
+
1537
+ Polygon 2
1538
+
1539
+ </td></tr>
1540
+ </tbody></table>
1541
+
1542
+ ## Returns
1543
+
1544
+ [TSYS\_MathPolygonGroup](../types/TSYS_MathPolygonGroup.md)
1545
+
1546
+ Polygon group of the symmetric difference result, preserving the association between outer rings and holes
1547
+
1548
+ ## Example
1549
+
1550
+ ```javascript
1551
+ // 1. 新旧两版部分重叠的板框轮廓
1552
+ const oldOutline = [{ x: 0, y: 0 }, { x: 100, y: 0 }, { x: 100, y: 80 }, { x: 0, y: 80 }];
1553
+ const newOutline = [{ x: 50, y: 20 }, { x: 150, y: 20 }, { x: 150, y: 60 }, { x: 50, y: 60 }];
1554
+
1555
+ // 2. 异或:重叠的中间区域被扣除,剩下两侧不重叠的部分
1556
+ const diff = eda.sys_Math.xor(oldOutline, newOutline);
1557
+ console.log('差异区域多边形个数:', diff.length);
1558
+
1559
+ // 3. 异或面积:8000 + 4000 - 2 x 重叠 2000 = 8000(重叠部分两次都不算)
1560
+ console.log('差异区域总面积:', eda.sys_Math.calculateArea(diff));
1561
+
1562
+ // 4. 完全相同的两个多边形异或结果为空数组(无差异;空组不能再传给
1563
+ // calculateArea,空输入会抛『无法识别的多边形输入格式』)
1564
+ console.log('自身与自身异或的差异区域个数:', eda.sys_Math.xor(oldOutline, oldOutline).length);
1565
+ ```