Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
On 29/10/2015 at 12:18, xxxxxxxx wrote:
User Information: Cinema 4D Version: Platform: Language(s) :
--------- Hi, one more question, maybe i'm doing it wrong (best choice !!)
When I'm trying to get back value from a STRING resource i have to push it into a String object... When I'm trying to print some thing with GePrint("my life"), i have to push it from a String object...
Nothing wrong ? But if i want to use regex or to_string() std::stoi("002") it can be painfull. I have to convert and juggle withs 2 different type of string.
"String" came from C4D with #include "c4d_string" and "string" inside std library with #include <string> ....
Finally my fist question is simple. GePrint() just want C4D String. So how did you do to print Int32, Float ? Can't it can convert it on the way ? And how did you do when you have to use std string for other library (my example is regex) ?
Maybe my arm is in one of my eyes ?? I'm doing it wrong ?
Thank in advance !!
On 29/10/2015 at 15:21, xxxxxxxx wrote:
FloatToString() and IntToString().
The String type in C4D is only useful in C4D. In order to do other things (like regex), you need first to get a C-style string (CHAR* ) using GetCString() and then set that to std string. For Unicode, it is even better. You get a unicode encoded Int16 block using GetUcBlock(). Have no idea how that block gets converted into a std lib wide-char string - might be system dependent as well.
On 30/10/2015 at 02:58, xxxxxxxx wrote:
Hello,
as Robert already showed there are some convenience functions to convert basic datatypes to Strings: String::FloatToString(), String::IntToString() etc. You can also use FormatNumber().
We would like to remind all that one should not use classes from the standard library if possible. If it is needed to convert a String to a std::string this can be done with GetCStringCopy():
// This example converts the given String into a C-String to use it with the standard library. const String string = "foobar"; // convert to c string and insert into std string. Char* cstring = string.GetCStringCopy(); std::string stdString(cstring); DeleteMem(cstring);
But if you want to use regular expressions you could also use the build-in class RegularExprParser.
Best wishes, Sebastian
On 30/10/2015 at 04:01, xxxxxxxx wrote:
Many thanks for the code snippet. I'll keep in mind. Maybe you have the inversed one. I can't make work String::SetCString() ?
I did one myself to convert String to string... Beware it's ugly.
std::string timer_visibility::myToStringC(String& str){ std::string buffer; buffer.clear(); UInt32 j = str.GetLength() - 1; for (UInt32 i = 0; i <= j; i++) buffer.push_back(str); return buffer; }
This is what I want to do, this is simple. I would like to enter frames number in a STRING resources and parse it like a printer dialog. So you can display and hide an object with this string 12,15,20-25,40
This way your object, with the selected tag, will be visible on the frame 12 , 15 and range from 20 to 25 and finally only visible on frame 40.
So i need to verify value from user (to be sure of what he put in) with this regex "([0-9]+)([,-]{1}[0-9]+)*"
And i need to split out my visibility string by coma(,) with a sregex_token_iterator. With all this groups i can find easily if the group is only one number. So it only one frame. Or if it's multi number with hyphen and this mean a range of frames.
Maybe I'm creating a new wheel. Useful or not. My code is a bit dirty for the moment but almost working. The last split with hyphen (-) not work but I'll figure it out.
I'll optimize my whole code after with your recommendations.
On 30/10/2015 at 06:12, xxxxxxxx wrote:
And to roll back i do this. Ugly too.
String timer_visibility::myToStringC4D(std::string& str){ String output; char buffer; UInt32 l = str.length(); for (UInt32 i = 0; i < l; i++) output.Insert(i, Utf32Char(str _) ); return output; } _
On 30/10/2015 at 10:08, xxxxxxxx wrote:
this code seems to work perfectly fine:
std::string stdString("foo bar"); String str; str.SetCString(stdString.c_str(), stdString.length()); GePrint(str);
best wishes, Sebastian
On 30/10/2015 at 10:12, xxxxxxxx wrote:
Hi,
> So how did you do to print Int32, Float ? here is my older code for C4D String that allow to print Int, Float and other types.
https://github.com/PluginCafe/utilities-and-snippets/blob/master/C%2B%2B/Remo/C4DPrintPublic.h
On 02/11/2015 at 04:29, xxxxxxxx wrote:
Remotion4D. Thanks, your link and making this code public helped me to understand many things. I added it to my library
S_Bach, greatful snippet ! I replace my own with your ! It's seems work perfectly.
And Kuroyume0161 thanks your write. It just take me one day to remember to use String:: namespace...
So String::FloatToString(); and String::IntToString(); are now my best friends.
Thanks all, I'm a bit more confortable with C++ and the API now. So I see now how my question was simple. But it could be useful for anyone like me who didn't make c++ from many time and who discover in same time this API.