热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

edu.uci.ics.jung.visualization.RenderContext.getGraphicsContext()方法的使用及代码示例

本文整理了Java中edu.uci.ics.jung.visualization.RenderContext.getGraphicsContext方法的一些代码示例,展

本文整理了Java中edu.uci.ics.jung.visualization.RenderContext.getGraphicsContext方法的一些代码示例,展示了RenderContext.getGraphicsContext的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RenderContext.getGraphicsContext方法的具体详情如下:
包路径:edu.uci.ics.jung.visualization.RenderContext
类名称:RenderContext
方法名:getGraphicsContext

RenderContext.getGraphicsContext介绍

暂无

代码示例

代码示例来源:origin: jrtom/jung

@Override
public void paintIconForNode(
RenderContext renderContext, VisualizationModel model, N v) {
Point p = model.getLayoutModel().apply(v);
Point2D p2d =
renderContext
.getMultiLayerTransformer()
.transform(Layer.LAYOUT, new Point2D.Double(p.x, p.y));
float x = (float) p2d.getX();
float y = (float) p2d.getY();
GraphicsDecorator g = renderContext.getGraphicsContext();
boolean outlineImages = false;
Function nodeIcOnFunction= renderContext.getNodeIconFunction();
if (nodeIconFunction instanceof DemoNodeIconTransformer) {
outlineImages = ((DemoNodeIconTransformer) nodeIconFunction).isOutlineImages();
}
Icon icon = nodeIconFunction.apply(v);
if (icon == null || outlineImages) {
Shape s =
AffineTransform.getTranslateInstance(x, y)
.createTransformedShape(renderContext.getNodeShapeFunction().apply(v));
paintShapeForNode(renderContext, model, v, s);
}
if (icon != null) {
int xLoc = (int) (x - icon.getIconWidth() / 2);
int yLoc = (int) (y - icon.getIconHeight() / 2);
icon.paintIcon(renderContext.getScreenDevice(), g.getDelegate(), xLoc, yLoc);
}
}
}

代码示例来源:origin: net.sf.jung/jung-visualization

/**
* Paint v's icon on g at (x,y).
*/
protected void paintIconForVertex(RenderContext rc, V v, Layout layout) {
GraphicsDecorator g = rc.getGraphicsContext();
boolean vertexHit = true;
int[] coords = new int[2];
Shape shape = vertexShapeMap.get(v);
if(shape == null || dirtyVertices.contains(v)) {
shape = prepareFinalVertexShape(rc, v, layout, coords);
vertexShapeMap.put(v, shape);
dirtyVertices.remove(v);
}
vertexHit = vertexHit(rc, shape);
if (vertexHit) {
if(rc.getVertexIconTransformer() != null) {
Icon icon = rc.getVertexIconTransformer().apply(v);
if(icon != null) {

g.draw(icon, rc.getScreenDevice(), shape, coords[0], coords[1]);
} else {
paintShapeForVertex(rc, v, shape);
}
} else {
paintShapeForVertex(rc, v, shape);
}
}
}

代码示例来源:origin: net.sf.jung/jung-visualization

/**
* Labels the specified vertex with the specified label.
* Uses the font specified by this instance's
* VertexFontFunction. (If the font is unspecified, the existing
* font for the graphics context is used.) If vertex label centering
* is active, the label is centered on the position of the vertex; otherwise
* the label is offset slightly.
*/
public void labelVertex(RenderContext rc, Layout layout, V v, String label) {
Graph graph = layout.getGraph();
if (rc.getVertexIncludePredicate().apply(Context.,V>getInstance(graph,v)) == false) {
return;
}
GraphicsDecorator g = rc.getGraphicsContext();
Component compOnent= prepareRenderer(rc, rc.getVertexLabelRenderer(), label,
rc.getPickedVertexState().isPicked(v), v);
Dimension d = component.getPreferredSize();

int h_offset = -d.width / 2;
int v_offset = -d.height / 2;

Point2D p = layout.apply(v);
p = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p);
int x = (int)p.getX();
int y = (int)p.getY();
g.draw(component, rc.getRendererPane(), x+h_offset, y+v_offset, d.width, d.height, true);
Dimension size = component.getPreferredSize();
Rectangle bounds = new Rectangle(-size.width/2 -2, -size.height/2 -2, size.width+4, size.height);
shapes.put(v, bounds);
}

代码示例来源:origin: jrtom/jung

@Override
public void paintEdge(
RenderContext renderContext, VisualizationModel visualizationModel, E e) {
GraphicsDecorator g2d = renderContext.getGraphicsContext();
if (!renderContext.getEdgeIncludePredicate().test(e)) {
return;
}
// don't draw edge if either incident node is not drawn
EndpointPair endpoints = visualizationModel.getNetwork().incidentNodes(e);
N u = endpoints.nodeU();
N v = endpoints.nodeV();
Predicate nodeIncludePredicate = renderContext.getNodeIncludePredicate();
if (!nodeIncludePredicate.test(u) || !nodeIncludePredicate.test(v)) {
return;
}
Stroke new_stroke = renderContext.edgeStrokeFunction().apply(e);
Stroke old_stroke = g2d.getStroke();
if (new_stroke != null) {
g2d.setStroke(new_stroke);
}
drawSimpleEdge(renderContext, visualizationModel, e);
// restore paint and stroke
if (new_stroke != null) {
g2d.setStroke(old_stroke);
}
}

代码示例来源:origin: jrtom/jung

/**
* Paint v's icon on g at (x,y).
*
* @param v the node to be painted
*/
protected void paintIconForNode(
RenderContext renderContext, VisualizationModel visualizationModel, N v) {
GraphicsDecorator g = renderContext.getGraphicsContext();
int[] coords = new int[2];
Shape shape = prepareFinalNodeShape(renderContext, visualizationModel, v, coords);
if (renderContext.getNodeIconFunction() != null) {
Icon icon = renderContext.getNodeIconFunction().apply(v);
if (icon != null) {
g.draw(icon, renderContext.getScreenDevice(), shape, coords[0], coords[1]);
} else {
paintShapeForNode(renderContext, visualizationModel, v, shape);
}
} else {
paintShapeForNode(renderContext, visualizationModel, v, shape);
}
}

代码示例来源:origin: net.sf.jung/jung-visualization

public void paintEdge(RenderContext rc, Layout layout, E e) {
GraphicsDecorator g2d = rc.getGraphicsContext();
Graph graph = layout.getGraph();
if (!rc.getEdgeIncludePredicate().apply(Context.,E>getInstance(graph,e)))
return;

// don't draw edge if either incident vertex is not drawn
Pair endpoints = graph.getEndpoints(e);
V v1 = endpoints.getFirst();
V v2 = endpoints.getSecond();
if (!rc.getVertexIncludePredicate().apply(Context.,V>getInstance(graph,v1)) ||
!rc.getVertexIncludePredicate().apply(Context.,V>getInstance(graph,v2)))
return;

Stroke new_stroke = rc.getEdgeStrokeTransformer().apply(e);
Stroke old_stroke = g2d.getStroke();
if (new_stroke != null)
g2d.setStroke(new_stroke);

drawSimpleEdge(rc, layout, e);
// restore paint and stroke
if (new_stroke != null)
g2d.setStroke(old_stroke);
}

代码示例来源:origin: net.sf.jung/jung-visualization

protected void paintShapeForVertex(RenderContext rc, V v, Shape shape) {
GraphicsDecorator g = rc.getGraphicsContext();
Paint oldPaint = g.getPaint();
Paint fillPaint = rc.getVertexFillPaintTransformer().apply(v);
if(fillPaint != null) {
g.setPaint(fillPaint);
g.fill(shape);
g.setPaint(oldPaint);
}
Paint drawPaint = rc.getVertexDrawPaintTransformer().apply(v);
if(drawPaint != null) {
g.setPaint(drawPaint);
Stroke oldStroke = g.getStroke();
Stroke stroke = rc.getVertexStrokeTransformer().apply(v);
if(stroke != null) {
g.setStroke(stroke);
}
g.draw(shape);
g.setPaint(oldPaint);
g.setStroke(oldStroke);
}
}
}

代码示例来源:origin: com.github.fburato/highwheel-core

public void labelVertex(final RenderContext rc,
final Layout layout, final ElementName v,
final String label) {
final Graph graph = layout.getGraph();
if (rc.getVertexIncludePredicate().evaluate(
Context., ElementName> getInstance(
graph, v)) == false) {
return;
}
final GraphicsDecorator g = rc.getGraphicsContext();
final Component compOnent= prepareRenderer(rc,
rc.getVertexLabelRenderer(), label,
rc.getPickedVertexState().isPicked(v), v);
final Dimension d = component.getPreferredSize();
final int h_offset = -d.width / 2;
final int v_offset = -d.height / 2;
Point2D p = layout.transform(v);
p = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p);
final int x = (int) p.getX();
final int y = (int) p.getY();
g.draw(component, rc.getRendererPane(), x + h_offset, y + v_offset,
d.width, d.height, true);
}

代码示例来源:origin: org.pitest/highwheel-core

public void labelVertex(final RenderContext rc,
final Layout layout, final ElementName v,
final String label) {
final Graph graph = layout.getGraph();
if (rc.getVertexIncludePredicate().evaluate(
Context., ElementName> getInstance(
graph, v)) == false) {
return;
}
final GraphicsDecorator g = rc.getGraphicsContext();
final Component compOnent= prepareRenderer(rc,
rc.getVertexLabelRenderer(), label,
rc.getPickedVertexState().isPicked(v), v);
final Dimension d = component.getPreferredSize();
final int h_offset = -d.width / 2;
final int v_offset = -d.height / 2;
Point2D p = layout.transform(v);
p = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p);
final int x = (int) p.getX();
final int y = (int) p.getY();
g.draw(component, rc.getRendererPane(), x + h_offset, y + v_offset,
d.width, d.height, true);
}

代码示例来源:origin: org.apache.batchee/batchee-maven-plugin

final Point2D p2 = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, layout.transform(v2));
final GraphicsDecorator g = rc.getGraphicsContext();
final Component compOnent= prepareRenderer(rc, rc.getEdgeLabelRenderer(), label, rc.getPickedEdgeState().isPicked(e), e);
final Dimension d = component.getPreferredSize();

代码示例来源:origin: jrtom/jung

public MagnifyImageLensSupport(
VisualizationViewer vv,
LensTransformer lensTransformer,
ModalGraphMouse lensGraphMouse) {
super(vv, lensGraphMouse);
this.renderCOntext= vv.getRenderContext();
this.pickSupport = renderContext.getPickSupport();
this.renderer = vv.getRenderer();
this.transformingRenderer = new BasicRenderer<>();
this.savedGraphicsDecorator = renderContext.getGraphicsContext();
this.lensTransformer = lensTransformer;
Dimension d = vv.getSize();
if (d.width == 0 || d.height == 0) {
d = vv.getPreferredSize();
}
this.lensGraphicsDecorator = new MagnifyIconGraphics(lensTransformer);
}

代码示例来源:origin: net.sf.jung/jung-visualization

/**
* Paint v's icon on g at (x,y).
*
* @param rc the render context used for rendering the vertex
* @param v the vertex to be painted
* @param layout the layout algorithm that provides coordinates for the vertex
*/
protected void paintIconForVertex(RenderContext rc, V v, Layout layout) {
GraphicsDecorator g = rc.getGraphicsContext();
boolean vertexHit = true;
int[] coords = new int[2];
Shape shape = prepareFinalVertexShape(rc, v, layout, coords);
vertexHit = vertexHit(rc, shape);
if (vertexHit) {
if(rc.getVertexIconTransformer() != null) {
Icon icon = rc.getVertexIconTransformer().apply(v);
if(icon != null) {

g.draw(icon, rc.getScreenDevice(), shape, coords[0], coords[1]);
} else {
paintShapeForVertex(rc, v, shape);
}
} else {
paintShapeForVertex(rc, v, shape);
}
}
}

代码示例来源:origin: hcoles/highwheel

public void labelVertex(final RenderContext rc,
final Layout layout, final ElementName v,
final String label) {
final Graph graph = layout.getGraph();
if (rc.getVertexIncludePredicate().evaluate(
Context., ElementName> getInstance(
graph, v)) == false) {
return;
}
final GraphicsDecorator g = rc.getGraphicsContext();
final Component compOnent= prepareRenderer(rc,
rc.getVertexLabelRenderer(), label,
rc.getPickedVertexState().isPicked(v), v);
final Dimension d = component.getPreferredSize();
final int h_offset = -d.width / 2;
final int v_offset = -d.height / 2;
Point2D p = layout.transform(v);
p = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p);
final int x = (int) p.getX();
final int y = (int) p.getY();
g.draw(component, rc.getRendererPane(), x + h_offset, y + v_offset,
d.width, d.height, true);
}

代码示例来源:origin: jrtom/jung

public ViewLensSupport(
VisualizationViewer vv,
LensTransformer lensTransformer,
ModalGraphMouse lensGraphMouse) {
super(vv, lensGraphMouse);
this.renderCOntext= vv.getRenderContext();
this.pickSupport = renderContext.getPickSupport();
this.savedGraphicsDecorator = renderContext.getGraphicsContext();
this.lensTransformer = lensTransformer;
LayoutModel layoutModel = vv.getModel().getLayoutModel();
Dimension d = new Dimension(layoutModel.getWidth(), layoutModel.getHeight());
lensTransformer.getLens().setSize(d);
this.lensGraphicsDecorator = new TransformingFlatnessGraphics(lensTransformer);
this.savedEdgeRenderer = vv.getRenderer().getEdgeRenderer();
}

代码示例来源:origin: jrtom/jung

protected void paintShapeForNode(
RenderContext renderContext,
VisualizationModel visualizationModel,
N v,
Shape shape) {
GraphicsDecorator g = renderContext.getGraphicsContext();
Paint oldPaint = g.getPaint();
Paint fillPaint = renderContext.getNodeFillPaintFunction().apply(v);
if (fillPaint != null) {
g.setPaint(fillPaint);
g.fill(shape);
g.setPaint(oldPaint);
}
Paint drawPaint = renderContext.getNodeDrawPaintFunction().apply(v);
if (drawPaint != null) {
g.setPaint(drawPaint);
Stroke oldStroke = g.getStroke();
Stroke stroke = renderContext.getNodeStrokeFunction().apply(v);
if (stroke != null) {
g.setStroke(stroke);
}
g.draw(shape);
g.setPaint(oldPaint);
g.setStroke(oldStroke);
}
}
}

代码示例来源:origin: net.sf.jung/jung-jai

public PerspectiveViewTransformSupport(VisualizationViewer vv) {
super(vv);
this.renderer = vv.getRenderer();
this.renderCOntext= vv.getRenderContext();
this.pickSupport = renderContext.getPickSupport();
this.perspectiveTransformer =
new PerspectiveShapeTransformer(new PerspectiveTransform(),
vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW));
this.savedGraphicsDecorator = renderContext.getGraphicsContext();
this.lensGraphicsDecorator = new TransformingGraphics(perspectiveTransformer);
}

代码示例来源:origin: net.sf.jung/jung-visualization

public ViewLensSupport(VisualizationViewer vv,
LensTransformer lensTransformer,
ModalGraphMouse lensGraphMouse) {
super(vv, lensGraphMouse);
this.renderCOntext= vv.getRenderContext();
this.pickSupport = renderContext.getPickSupport();
this.savedGraphicsDecorator = renderContext.getGraphicsContext();
this.lensTransformer = lensTransformer;
Dimension d = vv.getSize();
lensTransformer.setViewRadius(d.width/5);
this.lensGraphicsDecorator = new TransformingFlatnessGraphics(lensTransformer);
this.savedEdgeRenderer = vv.getRenderer().getEdgeRenderer();
this.reshapingEdgeRenderer = new ReshapingEdgeRenderer();
this.reshapingEdgeRenderer.setEdgeArrowRenderingSupport(savedEdgeRenderer.getEdgeArrowRenderingSupport());
}
public void activate() {

代码示例来源:origin: net.sf.jung/jung-jai

/**
* @param vv the VisualizationViewer to work on
*/
public PerspectiveImageLensSupport(VisualizationViewer vv) {
super(vv);
this.renderCOntext= vv.getRenderContext();
this.pickSupport = renderContext.getPickSupport();
this.renderer = vv.getRenderer();
this.transformingRenderer = new BasicRenderer();
this.perspectiveTransformer =
new PerspectiveShapeTransformer(new PerspectiveTransform(), vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW));
this.transformingRenderer.setVertexRenderer(new TransformingImageVertexIconRenderer());
this.lensGraphicsDecorator = new TransformingGraphics(perspectiveTransformer);
this.savedGraphicsDecorator = renderContext.getGraphicsContext();
this.renderer = vv.getRenderer();
}

代码示例来源:origin: net.sf.jung/jung-visualization

public MagnifyImageLensSupport(VisualizationViewer vv, LensTransformer lensTransformer,
ModalGraphMouse lensGraphMouse) {
super(vv, lensGraphMouse);
this.renderCOntext= vv.getRenderContext();
this.pickSupport = renderContext.getPickSupport();
this.renderer = vv.getRenderer();
this.transformingRenderer = new BasicRenderer();
this.savedGraphicsDecorator = renderContext.getGraphicsContext();
this.lensTransformer = lensTransformer;
this.savedEdgeRenderer = vv.getRenderer().getEdgeRenderer();
this.reshapingEdgeRenderer = new ReshapingEdgeRenderer();
this.reshapingEdgeRenderer.setEdgeArrowRenderingSupport(savedEdgeRenderer.getEdgeArrowRenderingSupport());
Dimension d = vv.getSize();
if(d.width == 0 || d.height == 0) {
d = vv.getPreferredSize();
}
lensTransformer.setViewRadius(d.width/5);
this.lensGraphicsDecorator = new MagnifyIconGraphics(lensTransformer);
}

代码示例来源:origin: net.sf.jung/jung-jai

/**
* create the base class, setting common members and creating
* a custom GraphMouse
* @param vv the VisualizationViewer to work on
*/
public HyperbolicImageLensSupport(VisualizationViewer vv, LensTransformer lensTransformer,
ModalGraphMouse lensGraphMouse) {
super(vv, lensGraphMouse);
this.renderCOntext= vv.getRenderContext();
this.pickSupport = renderContext.getPickSupport();
this.renderer = vv.getRenderer();
this.transformingRenderer = new BasicRenderer();
this.transformingRenderer.setVertexRenderer(new TransformingImageVertexIconRenderer());

this.savedGraphicsDecorator = renderContext.getGraphicsContext();
this.lensTransformer = lensTransformer;
this.savedEdgeRenderer = vv.getRenderer().getEdgeRenderer();
this.reshapingEdgeRenderer = new ReshapingEdgeRenderer();
this.reshapingEdgeRenderer.setEdgeArrowRenderingSupport(savedEdgeRenderer.getEdgeArrowRenderingSupport());
Dimension d = vv.getSize();
// if(d.width == 0 || d.height == 0) {
// d = vv.getPreferredSize();
// }
lensTransformer.setViewRadius(d.width/5);
this.lensGraphicsDecorator = new TransformingFlatnessGraphics(lensTransformer);
}

推荐阅读
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 如何使用 `org.apache.poi.openxml4j.opc.PackagePart` 类中的 `loadRelationships()` 方法及其代码示例详解 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 在 Angular Google Maps 中实现图片嵌入信息窗口的功能,可以通过使用 `@agm/core` 库来实现。该库提供了丰富的 API 和组件,使得开发者可以轻松地在地图上的信息窗口中嵌入图片。本文将详细介绍如何配置和使用这些组件,以实现动态加载和显示图片的功能。此外,还将探讨一些常见的问题和解决方案,帮助开发者更好地集成这一功能。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 如何在C#中配置组合框的背景颜色? ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 针对图像分类任务的训练方案进行了优化设计。通过引入PyTorch等深度学习框架,利用其丰富的工具包和模块,如 `torch.nn` 和 `torch.nn.functional`,提升了模型的训练效率和分类准确性。优化方案包括数据预处理、模型架构选择和损失函数的设计等方面,旨在提高图像分类任务的整体性能。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 在Kohana 3框架中,实现最优的即时消息显示方法是许多开发者关注的问题。本文将探讨如何高效、优雅地展示flash消息,包括最佳实践和技术细节,以提升用户体验和代码可维护性。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
author-avatar
mobiledu2502858253
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有