/*
* Created by SharpDevelop.
* User: Administrator
* Date: 5/1/2014
* Time: 11:17 AM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Security.Cryptography;
using System.Diagnostics;
using System.Reflection;
//css_reference "c:/sls/Newtonsoft.Json.dll"
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Data.OleDb;
#if true
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using acadApp = Autodesk.AutoCAD.ApplicationServices.Application;
using Platform = Autodesk.AutoCAD;
using PlatformDb = Autodesk.AutoCAD;
using PPCad;
using PPGenInput;
using Autodesk.AutoCAD.Windows;
#else
using Teigha.DatabaseServices;
using Teigha.Runtime;
using Teigha.Geometry;
using HostMgd.ApplicationServices;
using HostMgd.EditorInput;
using acadApp = HostMgd.ApplicationServices.Application;
using Platform = HostMgd;
using PlatformDb = Teigha;
using PPCad;
using PPGenInput;
using HostMgd.Windows;
#endif
using System.Data.OleDb;
using System.Net;
using System.Xml.Linq;
using Autodesk.AutoCAD.PlottingServices;
namespace PCivil5
{
class MyAcad
{
static double g_dia = 0.1;
public static void SlideM()
{
AcadUtil.SetVarInt("BACKGROUNDPLOT", 0);
// g_dia = AcadUtil.qGetDouble("Dia", g_dia);
g_dia = 0.1;
double zLevel = AcadUtil.qGetDouble("start Level:");
double zLevel2 = AcadUtil.qGetDouble("end Level:");
string fname = util.qGetFileDlg("Select STl", "", ".stl", false);
if (fname == "") return;
int i =0;
string prefix ="C:/temp/A";
AcadUtil.SetVarInt("TILEMODE", 1);
for (double dv = zLevel; dv < zLevel2; dv += 0.1)
{
AcadUtil.Msg(dv.ToString());
ObjectIdCollection ids = doSingleSlide(fname,dv,g_dia);
// hpglPlot(prefix + i.ToString());
AcadUtil.SetVarInt("TILEMODE", 0);
PlotALayout(prefix + i.ToString("##0"));
AcadUtil.SetVarInt("TILEMODE", 1);
foreach (ObjectId eId in ids)
{
AcadUtil.eraseEntity(eId);
}
i++;
}
// JSon2C.RootObject mydata= Newtonsoft.Json.JsonConvert.DeserializeObject<JSon2C.RootObject>(returntext);
}
public static void SimplePlot()
{
PlotALayout("c:/temp/aplot");
}
public static void PlotALayout(string fname )
{
Document doc =
Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Database db = doc.Database;
Transaction tr =
db.TransactionManager.StartTransaction();
using (tr)
{
// We'll be plotting the current layout
BlockTableRecord btr =
(BlockTableRecord)tr.GetObject(
db.CurrentSpaceId,
OpenMode.ForRead
);
Layout lo =
(Layout)tr.GetObject(
btr.LayoutId,
OpenMode.ForRead
);
// We need a PlotInfo object
// linked to the layout
PlotInfo pi = new PlotInfo();
pi.Layout = btr.LayoutId;
// We need a PlotSettings object
// based on the layout settings
// which we then customize
PlotSettings ps =
new PlotSettings(lo.ModelType);
ps.CopyFrom(lo);
// The PlotSettingsValidator helps
// create a valid PlotSettings object
PlotSettingsValidator psv =
PlotSettingsValidator.Current;
// We'll plot the extents, centered and
// scaled to fit
psv.SetPlotType(
ps,
Autodesk.AutoCAD.DatabaseServices.PlotType.Extents
);
psv.SetUseStandardScale(ps, true);
psv.SetStdScaleType(ps, StdScaleType.ScaleToFit);
psv.SetPlotCentered(ps, true);
// We'll use the standard DWF PC3, as
// for today we're just plotting to file
psv.SetPlotConfigurationName(
ps,
"7475A.pc3", "ANSI_A_(11.00_x_8.50_Inches)"
// "ISO A4 (297.00 x 210.00 MM)"
);
// We need to link the PlotInfo to the
// PlotSettings and then validate it
pi.OverrideSettings = ps;
PlotInfoValidator piv =
new PlotInfoValidator();
piv.MediaMatchingPolicy =
MatchingPolicy.MatchEnabled;
piv.Validate(pi);
// A PlotEngine does the actual plotting
// (can also create one for Preview)
if (PlotFactory.ProcessPlotState ==
ProcessPlotState.NotPlotting)
{
PlotEngine pe =
PlotFactory.CreatePublishEngine();
using (pe)
{
// Create a Progress Dialog to provide info
// and allow thej user to cancel
PlotProgressDialog ppd =
new PlotProgressDialog(false, 1, true);
using (ppd)
{
ppd.set_PlotMsgString(
PlotMessageIndex.DialogTitle,
"Custom Plot Progress"
);
ppd.set_PlotMsgString(
PlotMessageIndex.CancelJobButtonMessage,
"Cancel Job"
);
ppd.set_PlotMsgString(
PlotMessageIndex.CancelSheetButtonMessage,
"Cancel Sheet"
);
ppd.set_PlotMsgString(
PlotMessageIndex.SheetSetProgressCaption,
"Sheet Set Progress"
);
ppd.set_PlotMsgString(
PlotMessageIndex.SheetProgressCaption,
"Sheet Progress"
);
ppd.LowerPlotProgressRange = 0;
ppd.UpperPlotProgressRange = 100;
ppd.PlotProgressPos = 0;
// Let's start the plot, at last
ppd.OnBeginPlot();
ppd.IsVisible = true;
pe.BeginPlot(ppd, null);
// We'll be plotting a single document
pe.BeginDocument(
pi,
doc.Name,
null,
1,
true, // Let's plot to file
fname
);
// Which contains a single sheet
ppd.OnBeginSheet();
ppd.LowerSheetProgressRange = 0;
ppd.UpperSheetProgressRange = 100;
ppd.SheetProgressPos = 0;
PlotPageInfo ppi = new PlotPageInfo();
pe.BeginPage(
ppi,
pi,
true,
null
);
pe.BeginGenerateGraphics(null);
pe.EndGenerateGraphics(null);
// Finish the sheet
pe.EndPage(null);
ppd.SheetProgressPos = 100;
ppd.OnEndSheet();
// Finish the document
pe.EndDocument(null);
// And finish the plot
ppd.PlotProgressPos = 100;
ppd.OnEndPlot();
pe.EndPlot(null);
}
}
}
else
{
ed.WriteMessage(
"\nAnother plot is in progress."
);
}
}
}
public static void hpglPlot(string afile)
{
/* Point3d pt1 = AcadUtil.qGetPoint("Lower Left");
Point3d pt2 = new Point3d();
AcadUtil.getCorner(ref pt2, pt1);
string p1Str= pt1.X.ToString()+","+pt1.Y.ToString();
string p2Str = pt2.X.ToString()+","+pt2.Y.ToString();
*/
// string afile = "c:/temp/afile.plt";
string uIcon="";
string[] plWs = {
"-Plot",
"y",
"Model",
"7475A",
"ISO A4 (297.00 x 210.00 MM)",
"Inches",
"Landscape",
"No",
"Display",
// p1Str,
// p2Str,
"Fit",
"",
"no",
".",
"no",
"",
"y",
afile,
"n",
"y",
};
foreach (string s in plWs)
{
AcadUtil.SendCommand(s + "\n");
}
}
private static ObjectIdCollection doSingleSlide(string fname, double zLevel, double g_dia)
{
string doSlideTxt = gSlide(zLevel, g_dia, fname);
// JObject o2 = (JObject)JToken.FromObject(doSlideTxt);
JObject o2 = JObject.Parse(doSlideTxt);
SliceSTL2.RootObject obj1 = o2.ToObject<SliceSTL2.RootObject>();
ObjectIdCollection listId = new ObjectIdCollection();
ObjectIdCollection ids = new ObjectIdCollection(); // to hatch
for (int j = 0; j < obj1.polygons.Count; j++)
{
Polyline pl1 = new Polyline();
try
{
for (int i = 0; i < obj1.polygons[j].points.Count; i++)
{
pl1.AddVertexAt(i, new Point2d(obj1.polygons[j].points[i][0], obj1.polygons[j].points[i][1]), 0, 0, 0);
}
pl1.Elevation = zLevel;
// AcadUtil.Append2Dwg(pl1);
ObjectId ida = AcadUtil.Append2Dwg(pl1);
listId.Add(ida);
ids.Add(ida);
// AcadUtil.drawHatchPoly(ida, "SOLID", 1, 0);
}
catch { }
}
ObjectId idH = drawHatchPolys(ids, "SOLID", 1, 0);
if (idH != ObjectId.Null) listId.Add(idH);
return listId;
}
public static ObjectId drawHatchPolys(ObjectIdCollection mid, string hatchname, double hscale, double rotate)
{
ObjectId idret = ObjectId.Null;
Hatch ahatch = new Hatch();
ahatch.SetDatabaseDefaults();
try
{
ahatch.SetHatchPattern(HatchPatternType.PreDefined, hatchname);
}
catch
{
ahatch.SetHatchPattern(HatchPatternType.CustomDefined, hatchname);
}
Angle ang1 = new Angle(rotate);
Matrix3d m1 = Matrix3d.Rotation(ang1.rad, Vector3d.ZAxis, Point3d.Origin);
Matrix3d m2 = Matrix3d.Scaling(hscale, Point3d.Origin);
ahatch.TransformBy(m1 * m2);
// ahatch.ColorIndex = 1;
try
{
foreach (ObjectId id in mid)
{
ObjectIdCollection ids = new ObjectIdCollection();
ids.Add(id);
ahatch.AppendLoop(HatchLoopTypes.Default, ids);
}
ahatch.Associative = false;
ahatch.EvaluateHatch(true);
idret = AcadUtil.Append2DwgAuto(ahatch);
}
catch { }
return idret;
}
public static void singleSlide()
{
g_dia = AcadUtil.qGetDouble("Dia", g_dia);
double zLevel = AcadUtil.qGetDouble("Enter Level");
string fname = util.qGetFileDlg("Select STl", "", ".stl", false);
string doSlideTxt = gSlide(zLevel, g_dia, fname);
// JObject o2 = (JObject)JToken.FromObject(doSlideTxt);
JObject o2 = JObject.Parse(doSlideTxt);
SliceSTL2.RootObject obj1 = o2.ToObject<SliceSTL2.RootObject>();
ObjectIdCollection ids = new ObjectIdCollection();
for (int j = 0; j < obj1.polygons.Count; j++)
{
Polyline pl1 = new Polyline();
for (int i = 0; i < obj1.polygons[j].points.Count; i++)
{
pl1.AddVertexAt(i, new Point2d(obj1.polygons[j].points[i][0], obj1.polygons[j].points[i][1]), 0, 0, 0);
}
pl1.Elevation = zLevel;
ObjectId ida= AcadUtil.Append2Dwg(pl1);
ids.Add(ida);
}
drawHatchPolys(ids, "SOLID", 1, 0);
}
public static void testHatch()
{
ObjectId[] ids = PPCadJava.commonSelectSS();
ObjectIdCollection iddd = new ObjectIdCollection();
foreach(ObjectId id in ids)
{
iddd.Add(id);
}
drawHatchPolys(iddd,"SOLID",1,0);
}
static public string gSlide(double zLevel, double dia, string stlfile)
{ //insert image for autocad 2010-13 x64
string cPath = @"C:\Program Files (x86)\Freesteel Slicer\dist\";
string option = " -z" + zLevel.ToString() + " -l0.1 -r" + dia.ToString() + " -f0 " + stlfile;
Process cmd = new Process();
cmd.StartInfo.FileName = cPath + "slice.exe";
cmd.StartInfo.Arguments = option;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardError = true;
cmd.Start();
//* Read the output (or the error)
string output = cmd.StandardOutput.ReadToEnd();
// AcadUtil.Msg(output);
return output;
}
}
}
namespace SliceSTL2
{
// Json
public class Polygon
{
public List<List<double>> points { get; set; }
public string type { get; set; }
}
public class RootObject
{
public double z { get; set; }
public List<Polygon> polygons { get; set; }
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น