我有一个模板文件(.vsdx),其中包含带有固定x和y轴的图形,并将其加载到新的Visio文档中。我设法在Visio文档上插入了一个形状,但是它没有根据图形的x和y轴定位。 示例:将vshape(坐标为0,0位置)设置到文档的左下角边缘。
到目前为止,我有以下代码:
<el-upload
class="avatar-uploader"
ref="upload"
action="/app/admin/product-image"
:with-credentials="true"
:thumbnail-mode="true"
:file-list="fileList"
:on-success="handleAvatarSuccess"
:on-change="picPreview"
:on-error="uploadError"
:auto-upload="true"
:data="{product_id:data.id}"
:multiple="false"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
list-type="picture-card"
:before-upload="beforeAvatarUpload">
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
要加载到Visio文档上的图形是here
答案 0 :(得分:0)
好的,谢谢您的更新评论。在这种情况下,这是一个快速示例。我创建了一个具有基本“图形”母版形状(定义了原点)和“点”母版的图形,该点只是作为dta标记可放下的一个小圆圈。
代码(using LINQPad)查找Graph master的第一个实例,然后查找(由您定义)“已知”单元格以掌握原点。然后,它相对于Graph原点放置两个“点”形。
这是Graph形状的样子:
[注意-您可以在X或Y单元格中引用PNT类型,Visio会提取相应的X或Y坐标]
void Main()
{
var vApp = MyExtensions.GetRunningVisio();
var vPag = vApp.ActivePage;
var graphShp = vPag.Shapes.Cast<Visio.Shape>()
.FirstOrDefault(s => s.Master?.Name == "Graph");
if (graphShp != null)
{
var dotMst = vPag.Document.Masters["Dot"];
//Get x / y back as a named tuple
var origin = GetGraphOrigin(graphShp);
//Green fill is the default defined in the master
var greenDotShp = vPag.Drop(dotMst, origin.x, origin.y);
//Use offest based on graph origin
var redDotOffsetX = -0.5;
var redDotOffsetY = 0.25;
var redDotShp = vPag.Drop(dotMst, origin.x + redDotOffsetX, origin.y + redDotOffsetY);
redDotShp.CellsU["FillForegnd"].FormulaU = "RGB(200,40,40)";
}
}
private (double x, double y) GetGraphOrigin(Visio.Shape targetShp)
{
const string originX = "User.OriginOnPageX";
const string originY = "User.OriginOnPageY";
if (targetShp == null)
{
throw new ArgumentNullException();
}
if (targetShp.CellExistsU[originX, (short)Visio.VisExistsFlags.visExistsAnywhere] != 0
&& targetShp.CellExistsU[originY, (short)Visio.VisExistsFlags.visExistsAnywhere] != 0)
{
return (x: targetShp.CellsU[originX].ResultIU,
y: targetShp.CellsU[originY].ResultIU);
}
return default;
}
因此,如果您运行此代码,则应该以如下形式结束(假设您如上所述从图纸开始):
因此,有很多方法可以解决此问题,但是可能需要一些方法或读取Graph形状中的原点,然后将其用于定位“点”形。