From: Gregory Malecha <gmalecha@rice.edu>
To: gmalecha@rice.edu
Cc: Olivier Andrieu <oandrieu@nerim.net>, caml-list@yquem.inria.fr
Subject: Re: [Caml-list] LablGTK Reading Properties
Date: Wed, 06 Feb 2008 13:07:15 -0600 [thread overview]
Message-ID: <47AA0563.80706@rice.edu> (raw)
In-Reply-To: <47A9E900.6000403@rice.edu>
I got it working with lines, but not with polygons. Here's my code:
open Gdk.GC;;
open GnomeCanvas;;
let points item =
let prop = {Gobject.name = "points";
Gobject.conv = GnomeCanvas.Conv.points} in
let x = Gobject.get prop item in
match x with
None -> print_string "NONE!\n"; []
| Some ary ->
print_string "SOME!\n";
Array.to_list ary
;;
let rec draw canvas root =
let line = GnoCanvas.line ~points:[|1.;2.; 3.;4. |] root in
let poly = GnoCanvas.polygon ~points:[| 45.;35.; 100.;60.; 80.;70.|]
root in
let _ = print_string "Line Points\n" in
let _ = List.iter (Printf.printf "%f\n") (points line#as_item) in
let _ = print_string "Polygon Points\n" in
let _ = List.iter (Printf.printf "%f\n") (points poly#as_item) in
let _ = flush stdout in
()
;;
let createCanvas window =
(* GtkBase.Widget.push_colormap (Gdk.Rgb.get_cmap ()) ; *)
let canvas = GnoCanvas.canvas ~width:600 ~height:450 () in
canvas#set_center_scroll_region false ;
GtkBase.Widget.pop_colormap () ;
let table = GPack.table ~rows:2 ~columns:2
~row_spacings:4 ~col_spacings:4 ~packing:window#add () in
let frame = GBin.frame ~shadow_type:`IN () in
table#attach ~left:0 ~right:1 ~top:0 ~bottom:1
~expand:`BOTH ~fill:`BOTH ~shrink:`BOTH ~xpadding:0 ~ypadding:0
frame#coerce ;
canvas#set_scroll_region 0. 0. 900. 450. ;
frame#add canvas#coerce ;
let w = GRange.scrollbar `HORIZONTAL ~adjustment:canvas#hadjustment () in
table#attach ~left:0 ~right:1 ~top:1 ~bottom:2
~expand:`X ~fill:`BOTH ~shrink:`X ~xpadding:0 ~ypadding:0
w#coerce ;
let w = GRange.scrollbar `VERTICAL ~adjustment:canvas#vadjustment () in
table#attach ~left:1 ~right:2 ~top:0 ~bottom:1
~expand:`Y ~fill:`BOTH ~shrink:`Y ~xpadding:0 ~ypadding:0
w#coerce ;
canvas#misc#set_can_focus true ;
canvas#misc#grab_focus () ;
canvas
;;
let createGui () =
let window = GWindow.window () in
let canvas = createCanvas window in
begin
canvas#event#connect#button_press
~callback:(fun _ -> draw canvas canvas#root; false);
ignore (window#connect#destroy ~callback:GMain.Main.quit);
window#show ();
draw canvas canvas#root;
GMain.Main.main
end
;;
let _ =
let main = createGui () in
main ()
;;
The output from this is:
Line Points
SOME!
1.000000
2.000000
3.000000
4.000000
Polygon Points
NONE!
Is this done for polygons differently?
Thanks.
Gregory Malecha wrote:
> I've modified the function and I'm still getting the same behavior.
> Here is my new code:
>
> let points item =
> let prop = {Gobject.name = "points";
> Gobject.conv = GnomeCanvas.Conv.points} in
> let x = Gobject.get prop item in
> match x with
> None -> print_string "NONE!\n"; []
> | Some ary ->
> print_string "SOME!\n";
> Array.to_list ary
>
> Is there a particular thing that I have to do before I can get the
> points? Does anyone have an example where they are able to do this?
>
> Thanks.
>
> Olivier Andrieu wrote:
>> Hi,
>>
>> On Feb 5, 2008 5:39 PM, Gregory Malecha <gmalecha@rice.edu> wrote:
>>
>>> Hi,
>>>
>>> I've been working on some code with GnomeCanvas and I'm having
>>> difficulty reading properties off of objects. For example, I've created
>>> a polygon and I want to read the points from it, but I always get back
>>> None. Here's my current code:
>>>
>>> let points item =
>>> let prop = {Gobject.name = "points";
>>> Gobject.conv = GnomeCanvas.Conv.path_def} in
>>> let x = Gobject.get prop item in
>>> match x with
>>> None -> print_string "NONE!\n"; [] (* I always end up in this
>>> case *)
>>> | Some ary ->
>>> print_string "SOME!\n";
>>> let ary = GnomeCanvas.Conv.get_points ary in
>>> Array.to_list ary
>>>
>>
>> you're getting None because you're using the wrong conversion
>> function: this "points" property is basically a float array and here
>> you're using the path_def conversion which is for bpath (bezier path).
>>
>> Your code should work with:
>> let prop = {Gobject.name = "points"; conv =
>> GnomeCanvas.Conv.points} in ...
>>
>>
>
--
gregory malecha
wiess college
computer science
219.510.3400
next prev parent reply other threads:[~2008-02-06 19:06 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-05 16:39 Gregory Malecha
2008-02-06 8:57 ` [Caml-list] " Olivier Andrieu
2008-02-06 17:06 ` Gregory Malecha
2008-02-06 19:07 ` Gregory Malecha [this message]
2008-02-06 22:12 ` Olivier Andrieu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=47AA0563.80706@rice.edu \
--to=gmalecha@rice.edu \
--cc=caml-list@yquem.inria.fr \
--cc=oandrieu@nerim.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).