ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Revit记录需要涂黑的格子---供自己使用

2021-08-28 13:33:26  阅读:184  来源: 互联网

标签:XYZVALUE wb2 wb1 int double Cells --- 涂黑 Revit


class Program
{
public class Map_divide
{
//XYZ的个数
public int XNum
{
get { return XNum; }
set { XNum = value; }
}
public int YNum
{
get { return YNum; }
set { YNum = value; }
}
public int ZNum
{
get { return ZNum; }
set { ZNum = value; }
}
public void Divide_para()
{
Console.WriteLine("start");
}
//X1-Z2是3方向的最大最小值
public double[] divide(double X1,double X2,double Y1,double Y2,double Z1,double Z2)

{
double[] StepXYZ = new double[3];

double Xrange = X2 - X1;
double Yrange = Y2 - Y1;
double Zrange = Z2 - Z1;
StepXYZ[0] = Xrange / XNum;
StepXYZ[1] = Yrange / YNum;
StepXYZ[2] = Zrange / ZNum;

return StepXYZ;

}

}
public bool IsBlank2(String ExcelPath, double h,double w,double l,double width,double xx, double yy)//这个excelpath是上文的生成的第二个表格
{
int success = 0;
//主函数体
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp.Visible = true;
Microsoft.Office.Interop.Excel.Workbooks wbs = xlApp.Workbooks;
Microsoft.Office.Interop.Excel._Workbook wb = wbs.Add(ExcelPath);
//wb.Close();
//wbs.Close();
// xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);//释放进程
Microsoft.Office.Interop.Excel._Worksheet wb1 = wb.Sheets[1];
Microsoft.Office.Interop.Excel._Worksheet wb2 = wb.Sheets[2];
//string Name = wb2.Name;
//int sRowcount = wb1.Rows.Count;
//Console.WriteLine(Name);
//激活工作表
wb1.Activate(); int k = 0;
//wb2.Activate();
for (int i = 0; i <(wb1.Rows.Count)-1; i++)//对表1中的每个ijk
{
int k11 = wb1.Cells[i, 1];
int k12 = wb1.Cells[i, 2];
int k13 = wb1.Cells[i, 3];
for (int ii = i+1; ii < wb1.Rows.Count; ii++)
{
int k21 = wb1.Cells[ii, 1];
int k22 = wb1.Cells[ii, 2];
int k23 = wb1.Cells[ii, 3];
int m = ii;//这个就是需要涂黑的z段的最大值
if (k11 == k21 && k12 == k22)
{
int kh = k23 - k13;
if (kh*h<=width)
{
for (int b = i; b <=m ; b++)
{
wb2.Activate();
wb2.Cells[k++, 1] = k11;
wb2.Cells[k, 2] = k12;
wb2.Cells[k, 3] = b;
}
}
}
//x
if (k12 == k22 && k13 == k23)
{
int kw = k21 - k11;
if (kw * w <= xx)//xxyyzz是整个长宽高的管道限值
{
for (int b = i; b <= m; b++)
{
wb2.Activate();
wb2.Cells[k++, 1] = b;
wb2.Cells[k, 2] = k22;
wb2.Cells[k, 3] = k23;
}
}
}
//y
if (k11 == k21 && k13 == k23)
{
int kl = k22 - k12;
if (kl * l <= yy)
{
for (int b = i; b <= m; b++)
{
wb2.Activate();
wb2.Cells[k++, 1] = k11;
wb2.Cells[k, 2] = b;
wb2.Cells[k, 3] = k13;
}
}
}

}
success = 1;


}

if (success==1)
{
return true;
}
else
{
return false;
}
}
public bool IsBlank(String ExcelPath,double width,double[] XYZVALUE)//width代表管的宽度(即宽和高中短的那一个)
{
//循环Excel表格
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp.Visible = true;
Microsoft.Office.Interop.Excel.Workbooks wbs = xlApp.Workbooks;
Microsoft.Office.Interop.Excel._Workbook wb = wbs.Add(ExcelPath);
//wb.Close();
//wbs.Close();
// xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);//释放进程
Microsoft.Office.Interop.Excel._Worksheet wb1 = wb.Sheets[1];
Microsoft.Office.Interop.Excel._Worksheet wb2 = wb.Sheets[2];
//string Name = wb2.Name;
//int sRowcount = wb1.Rows.Count;
//Console.WriteLine(Name);
//激活工作表
wb1.Activate();int k = 0;
//wb2.Activate();
int success = 0;
for (int i = 1; i < wb1.Rows.Count; i++)
{
for (int j = 1; j < wb1.Columns.Count; j++)
{
if (wb1.Cells[0,j]=="Xmin")
{
if (XYZVALUE[0]>=wb1.Cells[i,j]&&XYZVALUE[0]<=wb1.Cells[i,j+1])
{
wb2.Activate();
wb2.Cells[k++, 1] = XYZVALUE[0];
wb2.Cells[k, 2] = XYZVALUE[1];
wb2.Cells[k, 3] = XYZVALUE[2];
success = 1;
break;
}
if (wb1.Cells[0, j] == "Ymin")
{
if (XYZVALUE[1] >= wb1.Cells[i, j] && XYZVALUE[1] <= wb1.Cells[i, j + 1])
{
//wb2.Activate();
wb2.Cells[k++, 1] = XYZVALUE[0];
wb2.Cells[k, 2] = XYZVALUE[1];
wb2.Cells[k, 3] = XYZVALUE[2];
success = 1;
break;
}
}
if (wb1.Cells[0, j] == "Zmin")
{
if (XYZVALUE[2] >= wb1.Cells[i, j] && XYZVALUE[2] <= wb1.Cells[i, j + 1])
{
//wb2.Activate();
wb2.Cells[k++, 1] = XYZVALUE[0];
wb2.Cells[k, 2] = XYZVALUE[1];
wb2.Cells[k, 3] = XYZVALUE[2];
success = 1;
break;
}
}

}

}
wb.Save();
}

if (success==1)
{
return true;
}
else
{
return false;
}
}
//循环
double h = 0;double w = 0;double l = 0;
public void inputExcel(String filename,double width,double xx0,double yy0, double X1, double X2, double Y1, double Y2, double Z1, double Z2,double[] xx, double[] yy, double[] zz, double[] step )
{
double xstep = step[0];//step是函数divide里的步长
double ystep = step[1];
double zstep = step[2];
int xxNum = xx.Length;
int yyNum = yy.Length;
int zzNum = zz.Length;
//第一次循环,对于每一个ijk;
for (int i = 0; i < xxNum; i++)
{
for (int j = 0; j <yyNum ; j++)
{
for (int k = 0; k < zzNum; k++)
{
double[] kk = new double[3];//三个数分别代表ijk,x1y1z1代表revit模型XYZ三个方向的最小值(X2Y2Z2代表最大值)
kk[0] = X1 + i * xstep;
kk[1] = Y1 + j * ystep;
kk[2] = Z1 + k * zstep;
IsBlank(filename, width, kk);//如果这个结果为true,就把ijk值打入excel表中,判断ijk所代表的格子是否为黑;
IsBlank2(filename, h,w,l,width,xx0,yy0);//在主函数中循环;
}
}
}

}

标签:XYZVALUE,wb2,wb1,int,double,Cells,---,涂黑,Revit
来源: https://www.cnblogs.com/3118460692wwx/p/15196593.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有