11package org .mujoco ;
22
3-
43import org .bytedeco .javacpp .*;
54import org .bytedeco .javacpp .annotation .*;
65import org .bytedeco .javacpp .tools .*;
76
7+ @ Properties (value = { @ Platform (includepath = { "/tmp/mujoco/include/" }, linkpath = { "/tmp/mujoco/lib/" }, include = {
8+ "mujoco/mjtnum.h" ,
89
9- @ Properties (
10- value = {
11- @ Platform (
12- includepath = {"/tmp/mujoco/include/" },
13- linkpath = {"/tmp/mujoco/lib/" },
14- include = {
15- "mujoco/mjtnum.h" ,
16-
17- "mujoco/mjexport.h" ,
18- "mujoco/mujoco.h" ,
19- "mujoco/mjmacro.h" ,
20- "mujoco/mjthread.h" ,
21- "mujoco/mjdata.h" ,
22- "mujoco/mjmodel.h" ,
23- "mujoco/mjrender.h" ,
24- "mujoco/mjui.h" ,
25- "mujoco/mjvisualize.h" ,
26-
10+ "mujoco/mjexport.h" , "mujoco/mujoco.h" , "mujoco/mjmacro.h" , "mujoco/mjthread.h" , "mujoco/mjdata.h" ,
11+ "mujoco/mjmodel.h" , "mujoco/mjrender.h" , "mujoco/mjui.h" , "mujoco/mjvisualize.h" ,
2712
28- //"mujoco/mjxmacro.h",
29- "mujoco/mjplugin.h"
30- },
31- link = {"mujoco" }
32- ),
33- @ Platform (
34- value = "windows-x86_64" ,
35- includepath = {"mujoco/include/" ,"C:/Users/runneradmin/AppData/Local/Temp/mujoco/include/" },
36- linkpath = {"mujoco/lib/" ,"C:/Users/runneradmin/AppData/Local/Temp/mujoco/lib/" }
37- )
38- },
39- target = "org.mujoco.MuJoCoLib"
40- )
13+ "mujoco/mjplugin.h" , "mujoco/mjspec.h" ,
14+ // "mujoco/mjxmacro.h" // This will not work with JavaCPP
15+ }, link = { "mujoco" }),
16+ @ Platform (value = "windows-x86_64" , includepath = { "mujoco/include/" ,
17+ "C:/Users/runneradmin/AppData/Local/Temp/mujoco/include/" }, linkpath = { "mujoco/lib/" ,
18+ "C:/Users/runneradmin/AppData/Local/Temp/mujoco/lib/" }) }, target = "org.mujoco.MuJoCoLib" )
4119
4220public class MuJoCoConfig implements InfoMapper {
4321 public void map (InfoMap infoMap ) {
4422 infoMap .put (new Info ("MJ_STATIC" ).define (true ));
4523 infoMap .put (new Info ("mjtNum" ).cast ().valueTypes ("double" ).pointerTypes ("DoublePointer" ));
46-
24+ // mjString
25+ // infoMap.put(new
26+ // Info("mjString").cast().valueTypes("String").pointerTypes("StringPointer"));
27+ // Skip mjString type
28+
4729 infoMap .put (new Info ("MJOPTION_VECTORS" ).skip ());
4830 infoMap .put (new Info ("MJMODEL_POINTERS" ).skip ());
4931 infoMap .put (new Info ("MJDATA_VECTOR" ).skip ());
@@ -71,10 +53,10 @@ public void map(InfoMap infoMap) {
7153 infoMap .put (new Info ("mjEXTERNC" ).skip ());
7254 infoMap .put (new Info ("mjDLLMAIN" ).skip ());
7355 infoMap .put (new Info ("XMJV" ).skip ());
74- //infoMap.put(new Info("X").skip());
75- //infoMap.put(new Info("MJOPTION_FLOATS").skip());
76- //infoMap.put(new Info("MJOPTION_INTS").skip());
77- //infoMap.put(new Info("MJOPTION_SCALARS").skip());
56+ // infoMap.put(new Info("X").skip());
57+ // infoMap.put(new Info("MJOPTION_FLOATS").skip());
58+ // infoMap.put(new Info("MJOPTION_INTS").skip());
59+ // infoMap.put(new Info("MJOPTION_SCALARS").skip());
7860 infoMap .put (new Info ("mjPLUGIN_LIB_INIT" ).skip ());
7961 infoMap .put (new Info ("mjfPluginLibraryLoadCallback" ).skip ());
8062 infoMap .put (new Info ("mjfGeneric" ).skip ());
@@ -83,13 +65,56 @@ public void map(InfoMap infoMap) {
8365 infoMap .put (new Info ("mjfTime" ).skip ());
8466 infoMap .put (new Info ("mjfAct" ).skip ());
8567 infoMap .put (new Info ("mjfCollision" ).skip ());
86- //mj__freeStack
68+ // mj__freeStack
8769 infoMap .put (new Info ("mj__freeStack" ).skip ());
88- //mj__markStack
70+ // mj__markStack
8971 infoMap .put (new Info ("mj__markStack" ).skip ());
90-
91- // infoMap.put(new Info("").skip());
92- // infoMap.put(new Info("").skip());
93-
94- }
72+
73+ // XNV
74+ infoMap .put (new Info ("XNV" ).skip ());
75+ // mjs_findElement
76+ infoMap .put (new Info ("mjs_findElement" ).skip ());
77+
78+ // mjs_firstElement
79+ infoMap .put (new Info ("mjs_firstElement" ).skip ());
80+ // mjs_firstChild
81+ infoMap .put (new Info ("mjs_firstChild" ).skip ());
82+ // Add this to your MuJoCoConfig.java
83+ // Add this to your JavaCPP configuration class
84+ // This adds custom code at the beginning of the generated file
85+ infoMap .put (new Info ().cppText (
86+ // Add a macro that will be used for string assignments
87+ "#include <string>\n " +
88+ "#define ASSIGN_TO_STRING_PTR(ptr, val) if(ptr) *ptr = val;\n " +
89+
90+ // Create a function to override the problematic assignments
91+ "template<typename T>\n " +
92+ "void assign_string(T* ptr, const std::string& val) {\n " +
93+ " if(ptr) *ptr = val;\n " +
94+ "}\n " +
95+
96+ // This is the critical part - redefine the cast operator to call our safe function
97+ "#define __JAVACPP_HACK\n " +
98+ "#ifdef __JAVACPP_HACK\n " +
99+ "#define JAVACPP_STRING_CAST(x)\n " +
100+ "#endif\n "
101+ ));
102+
103+ // Tell JavaCPP how to handle specific problematic cases
104+ infoMap .put (new Info ("ptr->meshdir = (std::basic_string< char >&)adapter0" )
105+ .define (false )
106+ .cppText (" assign_string(ptr->meshdir, adapter0)" ));
107+
108+ infoMap .put (new Info ("ptr->modelname = (std::basic_string< char >&)adapter0" )
109+ .define (false )
110+ .cppText (" assign_string(ptr->modelname, adapter0)" ));
111+
112+ infoMap .put (new Info ("ptr->modelfiledir = (std::basic_string< char >&)adapter0" )
113+ .define (false )
114+ .cppText (" assign_string(ptr->modelfiledir, adapter0)" ));
115+
116+ // Add similar entries for other problematic assignments
117+
118+
119+ }
95120}
0 commit comments