首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

[請害]CAD二次開發,line 轉換成polyline

2012-09-22 
[請益]CAD二次開發,line 轉換成polyline各位高手大家好,小弟最近在畫一條線,繪圖的概念是另用多點座標,串

[請益]CAD二次開發,line 轉換成polyline
各位高手大家好,
小弟最近在畫一條線,
繪圖的概念是另用多點座標,串聯起來,

現在碰到的問題是,這一條線是由很多線段所組成,
請問我要如何撰寫指令,可以讓眾多的線段,結合成一條聚合線呢?

以下是我所撰寫的程式碼:
  List<double> repeat = new List<double>();
  List<string> mmXX = new List<string>();
  List<string> mmZZ = new List<string>();
  double x = 1505.4617;
  double y = 3200 + hh;

  for (int i = 0; i < tList.Count; i += 2)
  {
  mmXX = tList[i].Tendon_X;
  mmZZ = tList[i].Tendon_Z;

  for (int j = 2; j < tList[i].Tendon_NO.Count; j++)
  {
  if (!repeat.Contains(Convert.ToDouble(mmXX[j])))
  {
  repeat.Add(Convert.ToDouble(mmXX[j]));
  }
  else
  {
  break;
  }

  if (Convert.ToDouble(mmXX[j]) != 0 && Convert.ToDouble(mmXX[j]) <= ll * lu * 100)
  {

  AcadLine linePT1;
  double[] startpointPT1 = new double[] { x + Convert.ToDouble(mmXX[j - 1]), 
  y + Convert.ToDouble(mmZZ[j - 1]), 
  0 };
  double[] endpointPT1 = new double[] { x + Convert.ToDouble(mmXX[j]), 
  y + Convert.ToDouble(mmZZ[j]), 
  0 };
  linePT1 = gbl_doc.ModelSpace.AddLine(startpointPT1, endpointPT1);
  linePT1.Layer = "L3";

  //AcadPolyline plinePT;
//double[] plpointsPT = new double[] { x + Convert.ToDouble(mmXX[j-1]),
// y + Convert.ToDouble(mmZZ[j-1]),
// 0,
// x + Convert.ToDouble(mmXX[j]),
// y + Convert.ToDouble(mmZZ[j]),
// 0};
//plinePT = gbl_doc.ModelSpace.AddPolyline(plpointsPT);
//plinePT.Update();
//plinePT.Layer = "L3";
  }
  }
  }

綠色的指令是我試著用聚合線的方式撰寫,
但因為寫的方法不對,所以最後呈現的圖跟用線段撰寫所產生的結果一模一樣......
想了很久實在想不到解決辦法,希望有高手可以點破盲點~

在CAD程式中,工作欄裡面有項: 修改-物件-聚合線 可以達到我想要的效果(線段轉換成聚合線),
不知...要如何在C# 中完成這項指令呢?

怕各位看得有點亂,整理一下重點:
1.使用聚合線方式撰寫,直接畫出一條線。
2.或者,增加指令,將線段轉換成聚合線。

懇請各位高手指教,感謝各位!

[解决办法]
没接触过。
不过建议楼主展示问题代码时用C#模板,方便解答者阅读。
期待高手来解答,帮楼主顶一个。
[解决办法]
因為同個人不能連續回復三次,只好再申請一個帳號來解答......
經過無數次debug後....

C# code
#region//------預力鋼腱            List<double> repeat = new List<double>();            List<string> mmXX = new List<string>();            List<string> mmZZ = new List<string>();            List<double> plpointsPTX = new List<double>();            List<double> plpointsPTY = new List<double>();            AcadPolyline plinePT;            double[] plpointsPT = new double[] { };            double x = 1505.4617;            double y = 3200 + hh;            int ppt = 0;            for (int i = 0; i < tList.Count; i += 2)            {                mmXX = tList[i].Tendon_X;                mmZZ = tList[i].Tendon_Z;                for (int j = 1; j < tList[i].Tendon_NO.Count; j++)                {                    if (!repeat.Contains(Convert.ToDouble(mmXX[j])))                    {                        repeat.Add(Convert.ToDouble(mmXX[j]));                    }                    else                    {                        continue;                    }                    if (Convert.ToDouble(mmXX[j]) <= ll * lu * 100)                    {                        plpointsPTX.Add(x + Convert.ToDouble(mmXX[j]));                        plpointsPTY.Add(y + Convert.ToDouble(mmZZ[j]));                    }                }            }            plpointsPT = new double[plpointsPTX.Count * 3];            for (int cpt = 0; cpt < plpointsPTX.Count * 3; cpt += 3)            {                plpointsPT[cpt] = plpointsPTX[ppt];                plpointsPT[cpt + 1] = plpointsPTY[ppt];                plpointsPT[cpt + 2] = 0;                ppt++;            }            plinePT = gbl_doc.ModelSpace.AddPolyline(plpointsPT);            plinePT.Layer = "L3";            #endregion 

热点排行