梦想CAD控件自定义实体实现
一、增加自定义实体对象
调用DrawCustomEntity函数,绘制一个自定义实体对象。
下面代码绘制一个自定义实体,C#代码实现如下:
private void DrawMlineCommand()
{
MxDrawUiPrPoint getPt = new MxDrawUiPrPoint();
getPt.message = "点取第一点";
if (getPt.go() != MCAD_McUiPrStatus.mcOk)
{
return;
}
var frstPt = getPt.value();
if (frstPt == null)
{
return;
}
MxDrawUiPrPoint getSecondPt = new MxDrawUiPrPoint();
getSecondPt.message = "点取第二点";
getSecondPt.basePoint = frstPt;
getSecondPt.setUseBasePt(false);
MxDrawCustomEntity spDrawData = getSecondPt.InitUserDraw("DrawCustEntity");
spDrawData.SetDouble("Width", 30);
spDrawData.SetPoint("Point1", frstPt);
Int32 lCount = 1;
spDrawData.SetLong("Count", 1);
while (true)
{
if (getSecondPt.go() != MCAD_McUiPrStatus.mcOk)
break;
var secondPt = getSecondPt.value();
if (secondPt == null)
break;
lCount++;
String sPointName = "Point" + lCount.ToString();
spDrawData.SetPoint(sPointName, secondPt);
spDrawData.SetLong("Count", lCount);
}
if (lCount > 1)
axMxDrawX1.DrawEntity(spDrawData);
}
|
js代码实现如下:
//绘制自定义实体
function DyInsertCustomEntity() {
//清空当前显示内容
mxOcx.NewFile();
var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getPt.message = "点取第一点";
if (getPt.go() != 1)
return;
var frstPt = getPt.value();
if (frstPt == null)
return;
var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");
getSecondPt.message = "点取第二点";
getSecondPt.basePoint = frstPt;
getSecondPt.setUseBasePt(true);
if (getSecondPt.go() != 1)
return;
var secondPt = getSecondPt.value();
if (secondPt == null)
return;
var ent = mxOcx.DrawCustomEntity("TestMxCustomEntity", "");
ent.SetPoint("spt", frstPt);
ent.SetPoint("ept", secondPt);
}
|
//绘制自定义实体1
function MyInsertCustomEntity()
{ //清空当前显示内容
mxOcx.NewFile();
var spDrawData;
var getPt1 = mxOcx.NewComObject("IMxDrawUiPrPoint");
{
getPt1.message = "点取第一点";
spDrawData = getPt1.InitUserDraw("DynDrawEnt1");
if (getPt1.go() != 1) {
return;
}
}
var getPt2 = mxOcx.NewComObject("IMxDrawUiPrPoint");
{
getPt2.message = "点取第二点";
spDrawData = getPt2.InitUserDraw("DynDrawEnt2");
spDrawData.SetPoint("vFirst", getPt1.value());
if (getPt2.go() != 1) {
return;
}
}
var getPt3 = mxOcx.NewComObject("IMxDrawUiPrPoint");
{
getPt3.message = "点取第三点";
spDrawData = getPt3.InitUserDraw("DynDrawEnt3");
spDrawData.SetPoint("vFirst", getPt1.value());
spDrawData.SetPoint("vSecond", getPt2.value());
if (getPt3.go() != 1) {
return;
}
}
var getPt4 = mxOcx.NewComObject("IMxDrawUiPrPoint");
{
getPt4.message = "点取第四点";
spDrawData = getPt4.InitUserDraw("DynDrawEnt4");
spDrawData.SetPoint("vFirst", getPt1.value());
spDrawData.SetPoint("vSecond", getPt2.value());
spDrawData.SetPoint("vThird", getPt3.value());
if (getPt4.go() != 1) {
return;
}
}
{
spDrawData = mxOcx.DrawCustomEntity("DrawEnt", "");
spDrawData.SetPoint("vFirst", getPt1.value());
spDrawData.SetPoint("vSecond", getPt2.value());
spDrawData.SetPoint("vThird", getPt3.value());
spDrawData.SetPoint("vFour", getPt4.value());
}
}
|
二、响应自定义事件,绘制自定义实体
需要响应DMxDrawXEvents::CustomEntity_Explode事件。
下面例子,得到自实体的数据,C#代码实现如下:
private void axMxDrawX1_CustomEntity_Explode(object sender, AxMxDrawXLib._DMxDrawXEvents_CustomEntity_ExplodeEvent e)
{
MxDrawCustomEntity pCustomEntity = (MxDrawCustomEntity)e.pCustomEntity;
var sGuid = pCustomEntity.Guid;
MxDrawWorldDraw pWorldDraw = (MxDrawWorldDraw)e.pDraw;
if (sGuid == "DrawCustEntity")
{
MyDrawMline(pWorldDraw, pCustomEntity, null);
e.pRet = 1;
}
}
private void MyDrawMline(MxDrawWorldDraw pWorldDraw, MxDrawCustomEntity pCustomEntity, MxDrawPoint curPt)
{
// 取自定义实体的端点数目,属性。
if (!pCustomEntity.IsHave("Count"))
return;
long lCount = pCustomEntity.GetLong("Count");
MxDrawPolyline tmpPl = new MxDrawPolyline();
for (long i = 0; i < lCount; i++)
{
String sName;
sName = "Point" + (i + 1).ToString();
if (!pCustomEntity.IsHave(sName))
break;
// 取自定义实体的端点坐标。
MxDrawPoint pt = pCustomEntity.GetPoint(sName);
// 把端点坐标,传给pl线,用于生成双线。
tmpPl.AddVertexAt(pt);
}
if (curPt != null)
tmpPl.AddVertexAt(curPt);
if (tmpPl.NumVerts < 2)
{
// 端点数少于2就,不构成直线,就不需要显示。
return;
}
// 求pl线,开始点的导数.
MxDrawVector3d vecFx;
if (!tmpPl.GetFirstDeriv(tmpPl.GetStartParam(), out vecFx))
return;
if (vecFx.IsZeroLength())
return;
// 把向量旋转90度.
vecFx.RotateByXyPlan(3.14159265 / 2.0);
vecFx.Normalize();
// 得到双线的宽度属性。
double dWidth = pCustomEntity.GetDouble("Width");
vecFx.Mult(dWidth);
MxDrawPoint startPt = tmpPl.GetStartPoint();
// 向pl线,两个方向偏移,
MxDrawPoint offsetPt1 = new MxDrawPoint();
offsetPt1.x = startPt.x;
offsetPt1.y = startPt.y;
offsetPt1.Add(vecFx);
MxDrawPoint offsetPt2 = new MxDrawPoint();
offsetPt2.x = startPt.x;
offsetPt2.y = startPt.y;
offsetPt2.Sum(vecFx);
MxDrawText text = new MxDrawText();
text.TextString = "Test";
text.Height = 100;
text.Position = startPt;
text.AlignmentPoint = startPt;
MxDrawPoint pt1, pt2;
text.GetBoundingBox(out pt1, out pt2);
MxDrawPoint pt3 = new MxDrawPoint();
pt3.x = pt1.x;
pt3.y = pt2.y;
MxDrawPoint pt4 = new MxDrawPoint();
pt4.x = pt2.x;
pt4.y = pt1.y;
MxDrawPoints pts = new MxDrawPoints();
pts.Add(pt1.x, pt1.y, 0);
pts.Add(pt3.x, pt3.y, 0);
pts.Add(pt2.x, pt2.y, 0);
pts.Add(pt4.x, pt4.y, 0);
Int32 lDraworder = pWorldDraw.Draworder;
pWorldDraw.Draworder = lDraworder + 1;
pWorldDraw.DrawWipeout(pts);
pWorldDraw.Draworder = lDraworder + 2;
pWorldDraw.DrawEntity((MxDrawEntity)text);
pWorldDraw.Draworder = lDraworder;
// pWorldDraw->
{
MxDrawResbuf newobj;
if (tmpPl.OffsetCurves(dWidth, offsetPt1, out newobj))
{
for (Int32 j = 0; j < newobj.Count; j++)
{
MxDrawEntity tmpObj = (MxDrawEntity)newobj.AtObject(j);
if (tmpObj == null)
continue;
pWorldDraw.DrawEntity(tmpObj);
}
newobj.RemoveAll();
}
}
{
MxDrawResbuf newobj;
if (tmpPl.OffsetCurves(dWidth, offsetPt2, out newobj))
{
for (Int32 j = 0; j < newobj.Count; j++)
{
MxDrawEntity tmpObj = (MxDrawEntity)newobj.AtObject(j);
if (tmpObj == null)
continue;
pWorldDraw.DrawEntity(tmpObj);
}
// 这不使用newobj,需要显示调用RemoveAll函数清楚内存。
// 不然这个可能就会程序退出时才释放,这时它会去释放控件对象指针,有可能会出错。
newobj.RemoveAll();
}
}
}
|
js代码实现如下:
// 自定义实体绘制函数
function ExplodeFun(pCustomEntity, pWorldDraw, txt) {
var sGuid = pCustomEntity.Guid;
if (sGuid == "TestMxCustomEntity") {
if (!pCustomEntity.IsHave("ept"))
return;
var stp = pCustomEntity.GetPoint("spt");
if (stp == null)
return;
var ept = pCustomEntity.GetPoint("ept");
if (ept == null)
return;
var mxUtility = mxOcx.NewUtility();
var vec = ept.SumVector(stp);
vec.Mult(0.5);
var midPt = mxOcx.NewPoint();
midPt.x = stp.x;
midPt.y = stp.y;
midPt.Add(vec);
var dAng = vec.Angle();
//计算一个标注角度,使用文字对象始终头朝上
dAng = mxUtility.GetDimAngle(dAng);
var dDis = 0.0;
dDis = stp.DistanceTo(ept);
var sTxt = "L=" + formatNumber(dDis, '#.##');
dAng = dAng * 180.0 / 3.14159265;
vec.RotateByXyPlan(3.14159265 / 2.0);
vec.Normalize();
vec.Mult(10);
stp.Add(vec);
ept.Add(vec);
pWorldDraw.DrawLine(stp.x, stp.y, ept.x, ept.y);
vec.Mult(2);
stp.Sum(vec);
ept.Sum(vec);
pWorldDraw.DrawLine(stp.x, stp.y, ept.x, ept.y);
pWorldDraw.SetColorIndex(1);
pWorldDraw.DrawText(midPt.x, midPt.y, sTxt, 5, dAng,
1, 2);
mxOcx.SetEventRet(1);
}
var dHeigth = mxOcx.ViewLongToDocCoord(5);
// 绘制绘制自定义实体1
if(sGuid == "DrawEnt"){
{
if (!pCustomEntity.IsHave("vFour"))
return;
if (!pCustomEntity.IsHave("vThird"))
return;
if (!pCustomEntity.IsHave("vSecond"))
return;
if (!pCustomEntity.IsHave("vFirst"))
return;
}
{
var vFourPt = pCustomEntity.GetPoint("vFour");
var dX = vFourPt.x;
var dY = vFourPt.y;
var vThirdPt = pCustomEntity.GetPoint("vThird");
pWorldDraw.DrawLine(vThirdPt.x, vThirdPt.y, dX, dY);
pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);
var dX = vThirdPt.x;
var dY = vThirdPt.y;
var vSecondPt = pCustomEntity.GetPoint("vSecond");
pWorldDraw.DrawLine(vSecondPt.x, vSecondPt.y, dX, dY);
pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);
dX = vSecondPt.x;
dY = vSecondPt.y;
var vFirstPt = pCustomEntity.GetPoint("vFirst");
pWorldDraw.DrawLine(vFirstPt.x, vFirstPt.y, dX, dY);
pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);
dX = vFirstPt.x;
dY = vFirstPt.y;
pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);
}
mxOcx.SetEventRet(1);
}
}
|
三、响应自定义事件,动态绘制
C#代码实现如下:
private void axMxDrawX1_DynWorldDraw(object sender, AxMxDrawXLib._DMxDrawXEvents_DynWorldDrawEvent e)
{
MxDrawCustomEntity pCustomEntity = (MxDrawCustomEntity)e.pData;
String sGuid = pCustomEntity.Guid;
e.pRet = 0;
MxDrawWorldDraw pWorldDraw = (MxDrawWorldDraw)e.pWorldDraw;
MxDrawPoint curPt = new MxDrawPoint();
curPt.x = e.dX;
curPt.y = e.dY;
if (sGuid == "DrawCustEntity")
{
MyDrawMline(pWorldDraw, pCustomEntity, curPt);
}
}
|
js代码实现如下:
//动态施放绘制事件回调函数指针
//动态拖放时的绘制事件
//参数一为当前鼠标位置X坐标;参数为二当前鼠标位置Y坐标;
// 参数三为IMxDrawWorldDraw对象,用于动态绘制;参数四为IMxDrawCustomEntity对象,动态绘制数据
function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) {
//自定义实体的GUID标识符
var sGuid = pData.Guid;
//设置自定义事件的返回值
mxOcx.SetEventRet(0);
var curPt = mxOcx.NewPoint();
curPt.x = dX;
curPt.y = dY;
var dHeigth = mxOcx.ViewLongToDocCoord(5);
//自定义实体的GUID标识符
switch (pData.Guid) {
case "DynDrawEnt4":
{
var vThirdPt = pData.GetPoint("vThird");
pWorldDraw.DrawLine(vThirdPt.x, vThirdPt.y, dX, dY);
pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);
dX = vThirdPt.x;
dY = vThirdPt.y;
}
case "DynDrawEnt3":
{
var vSecondPt = pData.GetPoint("vSecond");
pWorldDraw.DrawLine(vSecondPt.x, vSecondPt.y, dX, dY);
pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);
dX = vSecondPt.x;
dY = vSecondPt.y;
}
case "DynDrawEnt2":
{
var vFirstPt = pData.GetPoint("vFirst");
pWorldDraw.DrawLine(vFirstPt.x, vFirstPt.y, dX, dY);
pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);
dX = vFirstPt.x;
dY = vFirstPt.y;
}
case "DynDrawEnt1":
{
pWorldDraw.DrawText(dX, dY, "(" + dX.toFixed(1) + "," + dY.toFixed(1) + ")", dHeigth, 0, 1, 1);
}
}
//设置自定义事件的返回值
mxOcx.SetEventRet(0);
}
|
四、响应自定义事件,返回自定义实体夹点
需要响应_DMxDrawXEvents::CustomEntity_getGripPoints事件,C#代码实现如下:
private void axMxDrawX1_CustomEntity_getGripPoints(object sender, AxMxDrawXLib._DMxDrawXEvents_CustomEntity_getGripPointsEvent e)
{
MxDrawCustomEntity pCustomEntity = (MxDrawCustomEntity)e.pCustomEntity;
var sGuid = pCustomEntity.Guid;
e.pOk = 0;
if (sGuid == "DrawCustEntity")
{
if (!pCustomEntity.IsHave("Count"))
return;
long lCount = pCustomEntity.GetLong("Count");
MxDrawResbuf ret = (MxDrawResbuf)axMxDrawX1.NewResbuf();
for (long i = 0; i < lCount; i++)
{
String sName;
sName = "Point" + (i + 1).ToString();
if (!pCustomEntity.IsHave(sName))
break;
// 取自定义实体的端点坐标。
MxDrawPoint pt = pCustomEntity.GetPoint(sName);
ret.AddPoint(pt);
}
e.pOk = 1;
axMxDrawX1.SetEventRetEx(ret);
}
}
|
js代码实现如下:
// 返回自定义实体夹点
function GetGripPointsFun(pCustomEntity) {
var sGuid = pCustomEntity.Guid;
//自定义实体绘制两条直线
if (sGuid == "TestMxCustomEntity") {
if (!pCustomEntity.IsHave("ept"))
return;
var stp = pCustomEntity.GetPoint("spt");
if (stp == null)
return;
var ept = pCustomEntity.GetPoint("ept");
if (ept == null)
return;
var ret = mxOcx.NewResbuf();
ret.AddPoint(stp);
ret.AddPoint(ept);
mxOcx.SetEventRetEx(ret);
}
//自定义实体1
if (sGuid == "DrawEnt") {
if (!pCustomEntity.IsHave("vFour"))
return;
var stp = pCustomEntity.GetPoint("vFirst");
if (stp == null)
return;
var ept = pCustomEntity.GetPoint("vSecond");
if (ept == null)
return;
var tpt = pCustomEntity.GetPoint("vThird");
if (tpt == null)
return;
var fpt = pCustomEntity.GetPoint("vFour");
if (fpt == null)
return;
var ret = mxOcx.NewResbuf();
ret.AddPoint(stp);
ret.AddPoint(ept);
ret.AddPoint(tpt);
ret.AddPoint(fpt);
mxOcx.SetEventRetEx(ret);
}
}
|
五、响应自定义事件,夹点移动后的处理
需要响应CustomEntity_moveGripPointsAt事件。
下面例子,夹点移动后,修改自定义实体的属性,C#代码实现如下:
private void axMxDrawX1_CustomEntity_moveGripPointsAt(object sender, AxMxDrawXLib._DMxDrawXEvents_CustomEntity_moveGripPointsAtEvent e)
{
e.pRet = 1;
MxDrawCustomEntity pCustomEntity = (MxDrawCustomEntity)e.pCustomEntity;
var sGuid = pCustomEntity.Guid;
if (sGuid == "DrawCustEntity")
{
if (!pCustomEntity.IsHave("Count"))
return;
long lCount = pCustomEntity.GetLong("Count");
for (long i = 0; i < lCount; i++)
{
String sName;
sName = "Point" + (i + 1).ToString();
if (!pCustomEntity.IsHave(sName))
break;
// 取自定义实体的端点坐标。
MxDrawPoint pt = pCustomEntity.GetPoint(sName);
if (i == e.lGridIndex)
{
pt.x = pt.x + e.dOffsetX;
pt.y = pt.y + e.dOffsetY;
pCustomEntity.SetPoint(sName, pt);
}
}
}
}
|
js代码实现如下:
// 移动自定义实体夹点
function MoveGripPointsFun(pCustomEntity, lGridIndex, dOffsetX, dOffsetY) {
var sGuid = pCustomEntity.Guid;
if (sGuid == "TestMxCustomEntity") {
if (!pCustomEntity.IsHave("ept"))
return;
var stp = pCustomEntity.GetPoint("spt");
if (stp == null)
return;
var ept = pCustomEntity.GetPoint("ept");
if (ept == null)
return;
if (lGridIndex == 0) {
stp.x = stp.x + dOffsetX;
stp.y = stp.y + dOffsetY;
pCustomEntity.SetPoint("spt", stp);
}
else {
ept.x = ept.x + dOffsetX;
ept.y = ept.y + dOffsetY;
pCustomEntity.SetPoint("ept", ept);
}
mxOcx.SetEventRet(1);
}
if (sGuid == "DrawEnt") {
if (!pCustomEntity.IsHave("vFour"))
return;
var stp = pCustomEntity.GetPoint("vFirst");
if (stp == null)
return;
var ept = pCustomEntity.GetPoint("vSecond");
if (ept == null)
return;
var tpt = pCustomEntity.GetPoint("vThird");
if (tpt == null)
return;
var fpt = pCustomEntity.GetPoint("vFour");
if (fpt == null)
return;
{
stp.x = stp.x + dOffsetX;
stp.y = stp.y + dOffsetY;
pCustomEntity.SetPoint("vFirst", stp);
ept.x = ept.x + dOffsetX;
ept.y = ept.y + dOffsetY;
pCustomEntity.SetPoint("vSecond", ept);
tpt.x = tpt.x + dOffsetX;
tpt.y = tpt.y + dOffsetY;
pCustomEntity.SetPoint("vThird", tpt);
fpt.x = fpt.x + dOffsetX;
fpt.y = fpt.y + dOffsetY;
pCustomEntity.SetPoint("vFour", fpt);
}
mxOcx.SetEventRet(1);
}
}
|
六、自定义实体之打碎
c#代码实现如下
// 打开图纸文件。
axMxDrawX1.OpenDwgFile("C:\西桥头村.dwg");
// 打碎图纸上的自定义实体。
MxDrawResbuf filter = new MxDrawResbuf();
// 设置选择过滤条件,只选择自定义实体。
filter.AddStringEx("ACAD_PROXY_ENTITY", 5020);
MxDrawSelectionSet ss = new MxDrawSelectionSet();
// 得到所有自定义实体。
ss.AllSelect(filter);
// 遍历自定义实体
for (Int32 i = 0; i < ss.Count; i++)
{
MxDrawEntity ent = ss.Item(i);
MxDrawResbuf param = new MxDrawResbuf();
param.AddObjectId(ent.ObjectID);
// 打碎自定义实体。
MxDrawResbuf ret = (MxDrawResbuf)axMxDrawX1.CallEx("Mx_Explode", param);
// 删除自定义实体。
if(ret.AtString(0) == "Ok")
ent.Erase();
}
// 把图纸所有内容都放到当前视区。
axMxDrawX1.ZoomAll();
|
七、在块表记录中添加一个自定义实体
c#代码实现如下
MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
MxDrawBlockTableRecord blkRec = database.CurrentSpace();
// 调用AddCustomEntity函数绘制自定义实体。 逗号后的字符串"DrawCustEntity"是自定义实体的GUID
MxDrawResbuf ret = blkRec.GetProp("AddCustomEntity,DrawCustEntity");
// 得到自定义实体。
MxDrawCustomEntity ent = (MxDrawCustomEntity)database.ObjectIdToObject(ret.AtObjectId(0));
// 设置自定义实体的属性。
ent.BeginSetValue();
ent.SetDouble("Width", 30);
MxDrawPoint pt1 = new MxDrawPoint();
pt1.x = 10;
pt1.y = 10;
MxDrawPoint pt2 = new MxDrawPoint();
pt2.x = 20;
pt2.y = 20;
ent.SetPoint("Point1", pt1);
ent.SetPoint("Point2", pt2);
ent.SetLong("Count", 2);
ent.EntSetValue();
|
梦想CAD控件自定义实体实现的更多相关文章
- 如何在网页中浏览和编辑DWG文件 梦想CAD控件
如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2 是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...
- 梦想CAD控件图块COM接口知识点
梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...
- 梦想CAD控件图层COM接口知识点
梦想CAD控件图层COM接口知识点 一.新建图层 主要用到函数说明: _DMxDrawX::AddLayer 增加新的图层.详细说明如下: 参数 说明 BSTR pszName 图层名 c#中实现代码 ...
- 梦想CAD控件COM接口自定义命令
在CAD软件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处下载演示实例. _DMxDrawX::RegistUserCustomCommand 向CAD控件注 ...
- 梦想CAD控件网页版关于自定义命令
在CAD控件操作中,为方便使用者,使用自定义命令发出命令,完成CAD绘图,修改,保存等操作.点击此处在线演示. _DMxDrawX::RegistUserCustomCommand 向CAD控件注册一 ...
- 梦想CAD控件,用于浏览和编辑DWG文件,在脱离AUTOCAD的情况下独立运行,相当于简易CAD
(百度百科连接) 梦想绘图控件5.2 是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 2010开发,最早从2007年第一个版本完成,经过多年的累积已经非常 ...
- 梦想CAD控件文字COM接口知识点
一.参数绘制文字 在CAD设计时,需要绘制文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawText 绘制一个单行文字.详细说明如下: 参数 说明 DOU ...
- 梦想CAD控件网页版搜索图面上的文字
在网页中查找到CAD控件图纸上的文字.点击此处在线演示. 主要用到函数说明: _DMxDrawX::NewSelectionSet 实例化一个构造选择集进行过滤,该类封装了选择集及其处理函数. _DM ...
- 梦想CAD控件安卓交互绘图
在cad使用过程中,动态绘制的使用会使我们绘图速度大大加快.在此演示中,我们绘制了直线.多段线.点.样条线.圆.圆弧.椭圆.椭圆弧等实体. 用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明 ...
随机推荐
- jQuery無刷新上傳之uploadify簡單試用
先簡單的侃兩句:貌似已經有兩個月的時間沒有寫過文章了,不過仍會像以前那样每天至少有一至兩個小時是泡在园子裏看各位大神的文章.前些天在研究“ajax無刷新上傳”方面的一些插件,用SWFUpload實現了 ...
- (十七)LU分解
#encoding=utf-8 import numpy as np # 输入数据 # a用来记录x的系数 a=[[2.0,2.0,3.0],[4.0,7.0,7.0],[-2.0,4.0,5.0]] ...
- swoole简易实时聊天
最近公司拓展业务,需要做一个即时聊天业务,就顺带研究了一下swoole,文档地址贴出来:https://wiki.swoole.com/ 文档写得很详细,demo也很简洁明了,所以废话就不多说了. 工 ...
- 【POJ 3233】Matrix Power Series
[题目链接] 点击打开链接 [算法] 要求 A^1 + A^2 + A^3 + ... + A^k 考虑通过二分来计算这个式子 : 令f(k) = A^1 + A^2 + A ^ 3 + ... + ...
- Linux压缩命令(zip/gz/bz2/tar/tar.gz/tar.bz2)
一.Linux的压缩格式 .zip . gz . bz2 .tar 1..zip格式(Linux和Windows是可以互传的) 压缩命令 语法:zip 文件名.zip 文件名 ------压缩 ...
- 关于file文件操作的头文件 【LINUX】 (转载)
转自:http://blog.csdn.net/figo77ll/article/details/3156052 Linux下如果要对文件进行读取访问,需要包含至少以下两个头文件: #inlcude ...
- bzoj4890[Tjoi2017]城市(树的半径)
4890: [Tjoi2017]城市 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 149 Solved: 91[Submit][Status][D ...
- nginx部署vue项目 解决方案
给前端同事部署了web项目之后,访问发现除了index.html可以访问,其他的路径使用了“伪静态”.比如访问:http://localhost:8081/user/login,访问即报404错误,这 ...
- 枚举+贪心 HDOJ 4932 Miaomiao's Geometry
题目传送门 /* 题意:有n个点,用相同的线段去覆盖,当点在线段的端点才行,还有线段之间不相交 枚举+贪心:有坑点是两个点在同时一条线段的两个端点上,枚举两点之间的距离或者距离一半,尽量往左边放,否则 ...
- 《编写可维护的Javascript》学习总结
第一部分 一.基本规范 1.缩进:一般以四个空格为一个缩进. 2.语句结尾:最好加上分号,因为虽然“自动分号插入(ASI)”机制在没有分号的位置会插入分号,但是ASI规则复杂而且会有特殊情况发生 // ...