java 导出CAD:
import java.applet.Applet; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.Enumeration; import com.ysystems.lib.yutil.YutilIOHandler; import com.ysystems.lib.yutil.YutilIOHandlerName; import com.ysystems.lib.yutil.YutilProperties; import com.ysystems.ycad.lib.ydxf.YdxfGetHandler; import com.ysystems.ycad.lib.yxxf.Yxxf; import com.ysystems.ycad.lib.yxxf.YxxfPrtViewHandler; import com.ysystems.ycad.lib.yxxf.YxxfShape; import com.ysystems.ycad.lib.yxxf.YxxfTblStyle; public class Demo { public static void main(String[] args) { Demo demo=new Demo(); BufferedImage bufimg = demo.createEffect_ycadv1 ("src=dat/test1.dxf stylesrc=dat/fonts/txt.shx bgcolor=#FF0000 width=640 height=480", 640, 480, null); System.out.println(bufimg); } //========================================================================== /** * Create effect layer - Ycadv type 1 - DXF file view imprint. */ private BufferedImage createEffect_ycadv1(String ycadv1PropertiesString, int img_width, int img_height, Applet applet) { // Create image BufferedImage ycadv1image = new BufferedImage(img_width, img_height, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = ycadv1image.createGraphics(); // Imprint image // ==== // Prepend bounds to properties string ycadv1PropertiesString = "xoffset=" + 0 + " " + "yoffset=" + 0 + " " + "width=" + ycadv1image.getWidth() + " " + "height=" + ycadv1image.getHeight() + " " + ycadv1PropertiesString; createEffect_ycadv1_render(ycadv1PropertiesString, g2, applet); // ==== g2.dispose(); return ycadv1image; } //========================================================================== //========================================================================== /** * Create effect layer - Ycadv type 1 - DXF file view imprint. *<UL> * <LI> Set up drawing: * <LI> - Create drawing * <LI> - Create I/O handler and I/O name in drawing * <LI> - Create Get handler * <LI> Process properties - sets I/O name values * <LI> Set up view handler * <LI> - Create view handler * <LI> Start Input with drawing - viewer is rolling *</UL> */ private void createEffect_ycadv1_render(String ycadv1PropertiesString, Graphics jgc, Applet applet) { // System.out.println("++ycadv1:render|BEG"); // System.out.println("++ycadv1:render|str=[" + ycadv1PropertiesString + "]"); // System.out.println("++ycadv1:render|jgc=[" + jgc + "]"); // System.out.println("++ycadv1:render|bnd=[" + xoffset + ":" + yoffset + ":" + width + ":" + height + "]"); if (ycadv1PropertiesString == null) { System.out.println("++ycadv1:render|parameter error, ycadv1PropertiesString=null"); System.out.println("++ycadv1:render|END"); return; } if (jgc == null) { System.out.println("++ycadv1:render|parameter error, jgc=null"); System.out.println("++ycadv1:render|END"); return; } // ============================================================ // Set up drawing // // Create drawing // Create I/O handler and I/O name in drawing // Create Get handler // ============================================================ // Create drawing Yxxf D = new Yxxf(); // Create I/O Handler if (applet == null) D.iohandler = new YutilIOHandler(); else D.iohandler = new YutilIOHandler(applet); // Create empty main drawing ioname D.ioname = new YutilIOHandlerName("main"); // Create Get Handler YdxfGetHandler gethandler = new YdxfGetHandler(); // ============================================================ // Create and set user properties (props_user) // Sets I/O name values // ============================================================ YutilProperties props_user = new YutilProperties(); // Set bounds defaults (file and url have none) props_user.setPropertiesDefaults("xoffset=" + 0, false); props_user.setPropertiesDefaults("yoffset=" + 0, false); props_user.setPropertiesDefaults("width=" + 160, false); props_user.setPropertiesDefaults("height=" + 120, false); // Process properties string populating props_user and Drawing I/O structure. createEffect_ycadv1_processProperties(ycadv1PropertiesString, props_user, D); // Extract bounds int param_xoffset = props_user.getProperty_int("xoffset"); int param_yoffset = props_user.getProperty_int("yoffset"); int param_width = props_user.getProperty_int("width"); int param_height = props_user.getProperty_int("height"); // ============================================================ // Create view handler // Get viewer panel from view handler and add to Applet // ============================================================ // System.out.println("++ycadv1:render|setting up view"); // // Create view handler (Observer) // YxxfPrtViewHandler vhandler = new YxxfPrtViewHandler(); // Set parameters in view handler // Copy in all properties from props_user that are not used here for (Enumeration ep = props_user.propertyNames(); ep.hasMoreElements(); ) { String key = ((String)ep.nextElement()).toLowerCase(); String keylower = key.toLowerCase(); if (!keylower.equals("baseurl") && !keylower.equals("src") && !keylower.equals("srcfile") && !keylower.equals("srcurl") && !keylower.startsWith("stylesrc") && !keylower.startsWith("stylesrcfile") && !keylower.startsWith("stylesrcurl")) { String val = key + "=" + props_user.getProperty(key); vhandler.setProperties(val, false); } } vhandler.commandViewHandler_command_init(D, jgc); vhandler.commandViewHandler_command_start(); // ============================================================ // Start Input // ============================================================ // Start get drawing // System.out.println("++ycadv1:render|BEG gethandler.commandGetStart"); gethandler.commandGetStart(D); // System.out.println("++ycadv1:render|END gethandler.commandGetStart"); // ============================================================ // Wait for completion // ============================================================ // System.out.println("++ycadv1:render|BEG vhandler.commandViewHandler_command_wait_for_complete"); vhandler.waitDrawingViewReady(); // for (int i = 0; i < 12; i++) // vhandler.commandViewHandler_toolbar_zoom_in(); // vhandler.commandViewHandler_toolbar_zoom_out(); vhandler.commandViewHandler_toolbar_redraw(); vhandler.commandViewHandler_command_wait_for_complete(); // System.out.println("++ycadv1:render|END vhandler.commandViewHandler_command_wait_for_complete"); // System.out.println("++ycadv1:render|END"); } //========================================================================== //========================================================================== /** * Process properties. *<UL> * <LI>Set defaults (file and url have none). * <LI>Load properties. * <LI>Set local params. * <LI>All user params examined - do post processing of source names. *</UL> */ private void createEffect_ycadv1_processProperties(String ycadv1Properties, YutilProperties props_user, Yxxf D) { // Load properties props_user.setProperties(ycadv1Properties, true); // Set local params // System.out.println("++ycadv1:processProperties|props_user BEG"); for (Enumeration e = props_user.propertyNames(); e.hasMoreElements(); ) { String key = (String)e.nextElement(); String val = props_user.getProperty(key); // System.out.println("++ycadv1:processProperties|key=[" + key + "],val=[" + val + "]"); String keylower = key.toLowerCase(); // // Main drawing source // if (keylower.equals("baseurl")) { // Base URL for all sources D.ioname.baseurl = val; } else if (keylower.equals("src")) { D.ioname.src = val; } else if (keylower.equals("srcfile")) { D.ioname.srcfile = val; } else if (keylower.equals("srcurl")) { D.ioname.srcurl = val; } else // // Style shape source // if (keylower.startsWith("stylesrc") || keylower.startsWith("stylesrcfile") || keylower.startsWith("stylesrcurl")) { String stylename = ""; // Default style name is empty string // Extract style name from key name if (keylower.startsWith("stylesrc")) { if (keylower.length() > 8) stylename = keylower.substring(8).toUpperCase(); } else if (keylower.startsWith("stylesrcfile")) { if (keylower.length() > 12) stylename = keylower.substring(12).toUpperCase(); } else if (keylower.startsWith("stylesrcurl")) { if (keylower.length() > 11) stylename = keylower.substring(11).toUpperCase(); } // Find matching style element YxxfTblStyle style = D.secTables.findStyle_add(stylename); if (style.shape == null) { style.shape = new YxxfShape(); // all styles will use shapes } if (style.shape.ioname == null) { // not set yet, create style.shape.ioname = new YutilIOHandlerName(stylename); } // Set proper value if (keylower.startsWith("stylesrc")) style.shape.ioname.src = val; else if (keylower.startsWith("stylesrcfile")) style.shape.ioname.srcfile = val; else if (keylower.startsWith("stylesrcurl")) style.shape.ioname.srcurl = val; } } // System.out.println("++ycadv1:processProperties|props_user END"); // All user params examined - do post processing of source names // System.out.println("++ycadv1:processProperties|D.ioname=[" + D.ioname + "]"); // For each style // 1) Set iohandler in each style to match main iohandler // 2) Set baseurl in each style ioname to match main ioname // System.out.println("++ycadv1:processProperties|style ioname.e_ioname BEG"); for (Enumeration e_ioname = D.secTables.tblStyle.elements(); e_ioname.hasMoreElements(); ) // eieio { YxxfTblStyle style = (YxxfTblStyle)e_ioname.nextElement(); if (style.shape == null) { continue; } if (style.shape.ioname == null) { continue; } // 1) style.shape.iohandler = D.iohandler; // 2) style.shape.ioname.baseurl = D.ioname.baseurl; // System.out.println("++ycadv1:processProperties|style ioname:name=[" + style.getName() + "],ioname=[" + style.shape.ioname + "]"); } } } // System.out.println("++ycadv1:processProperties|style ioname.e_ioname END"); //==========================================================================
java 导出CAD:
CAD:计算机辅助设计(Computer Aided Design)指利用计算机及其图形设备帮助设计人员进行设计工作
AutoCAD的几种文件格式:
1. DWG:是原始图纸格式,包含了图纸所有的信息,Autodesk公司出于安全考虑没有给出详细的格式说明
2. DWF:比DWG文件小很多,用于其他用户浏览,添加备注等,不能编辑
3. DXF:是用于和其他CAD系统交换数据的文件格式,分二进制和ASCII格式,AutoCAD的帮助里包含了DXF文件的详细描述
https://sourceforge.net/projects/ycad/reviews
http://www.iteye.com/topic/821044
http://www.zwcad.com/download/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构