00:06.18 |
CIA-77 |
BRL-CAD: 03starseeker * r43356
10/geomcore/trunk/ (3 files in 2 dirs): Proof of concept code to
chop the toplevel objects out of a .g file, write them to
individual .g files in the svn repository, and commit
them. |
01:08.04 |
brlcad |
_psilva: nope |
01:22.17 |
*** join/#brlcad WhiteCalf
(MK@whitecalf.net) |
01:36.04 |
CIA-77 |
BRL-CAD: 03brlcad * r43357
10/brlcad/trunk/TODO: list the slew of requested and useful
converters including step export, dae, x3d, g-code, u3d, 3D pdf,
sat, ply, json, and xml formats |
02:23.25 |
*** join/#brlcad juanman
(~quassel@unaffiliated/juanman) |
02:34.22 |
brlcad |
starseeker: nice proof of concept
chop-blocking |
02:34.58 |
brlcad |
would be good exercise to convert to
db_walk_tree or one of the other walkers since the next step is
probably to stop at the region level |
03:05.56 |
starseeker |
brlcad: ah, from what dloman was saying it
sounded like we would break out every object in the first
round |
03:07.09 |
starseeker |
also, if we stop at the region level, does
that mean we do a full keep of each tree below the region level,
even if it means duplicating geometry? |
03:09.27 |
``Erik |
json? really? |
03:09.46 |
brlcad |
about as useful as xml ;) |
03:11.02 |
brlcad |
starseeker: either way but I think it's pretty
much inevitable, also makes us parallel other cad packages (a
region is a part) |
03:12.10 |
brlcad |
intermediate dev would be fine, but we
probably shouldn't deploy down to the prim level since we haven't
yet sorted out database upgrades |
03:12.24 |
brlcad |
and our next step given the new timeline is
pretty much deployment ;) |
03:16.04 |
brlcad |
as for the duplication issue, i've had a plan
in place to address that for about 7 years now -- effectively
instantiating a more robust concept of a part (one with and without
the region bit set) |
03:18.55 |
starseeker |
brlcad: so... first step is full keep and eat
the duplication, then follow on later with the proper
solution? |
03:19.10 |
brlcad |
and even without that concept, the duplication
issue can become a non-issue by inverting the region-parent
relationships (instead of C1->R1,R2,R3->subC1, you have
C1->subC1,subC2,subC3->R1) |
03:19.55 |
brlcad |
basically, but it fortunately doesn't really
require changes under the hood, just changes how geometry is
managed on import |
03:20.35 |
starseeker |
kinda - but we'll have to migrate
broken-out-at-region setups to the final solution |
03:20.51 |
starseeker |
is fine with it, just wants
to be sure he's hacking the right thing |
03:21.00 |
brlcad |
not necessarily, it'll just be duplicate
data |
03:21.16 |
brlcad |
we could automate remerging duplication later
as a backend job |
03:21.22 |
starseeker |
nods |
03:21.46 |
starseeker |
all rightie, tree walking it is |
03:22.43 |
brlcad |
there would be one benefit of going all the
way down to the primitive level, if you actually calculate the call
overhead on a full vehicle with a
checkin->breakout->commit->checkout->recombine
scenario, see what the numbers look like, then redo stopping at
region level |
03:23.19 |
brlcad |
see if it's actually a significant issue in
practice on given arch, like macosx, that has bad i/o
performance |
03:23.54 |
brlcad |
if it's not, then we could reasonably punt
with confidence that it doesn't matter and let all objects get
tracked uniformly |
03:24.04 |
starseeker |
nods |
03:24.20 |
starseeker |
it would simplify re-constructing a .g file -
just dbconcat all the pieces |
03:24.39 |
starseeker |
building a bunch of regions with full trees
back into the original .g is a bit of a chore |
03:24.52 |
brlcad |
without the metrics, though, I would
definitely just stop at regions since there is pretty significant
data overhead at the primitive level: 104 bytes per
object |
03:25.20 |
starseeker |
nods - at least until we can
get our own custom svn backend, anyway |
03:25.34 |
brlcad |
most objects in implicit form aren't even 104
bytes ;) |
03:26.18 |
brlcad |
the metrics are critical, though .. because
the performance could be an outright show-stopper for a full
vehicle |
03:26.22 |
starseeker |
overheads probably higher than that in the
proof of concept code - I'm making everything its own .g
file |
03:26.32 |
brlcad |
.g overhead is 104 bytes |
03:26.36 |
starseeker |
oh, gotcha |
03:26.47 |
brlcad |
and most of that is _GLOBAL, so there are
other ways to optimize too |
03:27.12 |
starseeker |
the other approach is to do a more custom
write - I took the quick and simple way to write out object data,
but I could customize a routine to write JUST the object
info |
03:27.29 |
brlcad |
though file ops likely dominate on files that
small |
03:28.23 |
starseeker |
('course if I do custom IO I might as well
start looking at an FS-G backend now, and that's not the
priority) |
03:28.38 |
starseeker |
will see if he can get the
tree walker going and do the metrics |
03:28.59 |
brlcad |
the other benefit of constructing this
region/non-region organization is that we can enforce proper DAG
structures more easily -- CSG recipes would only be valid at/below
region level, for example |
03:29.09 |
brlcad |
above, they're just assemblies,
groups |
03:29.25 |
brlcad |
unions |
03:30.16 |
brlcad |
would effectively make it not possible to
subtract assemblies from assemblies without pushing the operations
down to the region level |
03:31.16 |
starseeker |
how would we combine region files of that type
back into one .g file? scan for duplicate primitives and
selectively import the ones not already present? |
03:31.35 |
starseeker |
what about changes to a multiply referenced
primitive? how do we make sure we hit all the copies? |
03:35.35 |
brlcad |
the region file stored would already be the
pushed result |
03:35.50 |
brlcad |
so the file being combined back on read is
just cat-able |
03:36.03 |
starseeker |
you mean we wouldn't support unpushed
geometry? |
03:36.12 |
starseeker |
ouch |
03:36.16 |
brlcad |
not following |
03:36.22 |
brlcad |
no no |
03:37.02 |
brlcad |
the ONE high-level operation (subtract assemb1
(with r1, r2) from assemb2 (with r3, r4)) |
03:37.16 |
brlcad |
would result in r3 and r4 getting
modified |
03:38.02 |
starseeker |
right... I'm thinking a little lower level.
let's say r3 and r4 both include sph1, and I change sph1 |
03:38.05 |
brlcad |
a "dumb" implementation would simply import
r1/r2 into r3 and r4 and subtract them |
03:38.31 |
starseeker |
if r3 and r4 are both full tree copies in the
repository, there are two independent copies of sph1 |
03:38.37 |
starseeker |
both of which need to be updated |
03:40.11 |
brlcad |
for example, you mean two 'sph1' instances in
r3 ? |
03:40.52 |
starseeker |
no - I'm thinking I "break" model.g with two
regions r1 and r2 into the repository: |
03:41.07 |
starseeker |
model.g (toplevel object) and two region files
r1.g and r2.g |
03:41.28 |
starseeker |
both r1 and r2 union in the same primitive,
sph1 |
03:41.45 |
starseeker |
if I'm doing a deep keep to create r1.g and
r2.g, BOTH files have identical copies of sph1 |
03:42.06 |
starseeker |
if I then edit sph1 in my modeler, the
implication is I'm changing both r1.g and r2.g |
03:42.13 |
brlcad |
that's not possible in the
stop-at-region-level setup, the sph1 would be duplicated across the
two regions |
03:42.30 |
brlcad |
if it needs to be reusable, then the
definition of the region changes |
03:43.08 |
starseeker |
so you're saying that by definition a region
does not contain any geometry objects that are used in any other
regions? |
03:43.11 |
brlcad |
and you have model.g (toplevel), c1.g (was
r1.g), c2.g (was r2.g) and a new r.g (containing the one sph1
instance) |
03:43.42 |
brlcad |
yes, all regions become fully self-contained
namespaces |
03:44.06 |
starseeker |
shakes his head - I highly
doubt that's how things work out in practice |
03:44.11 |
brlcad |
you can convert any existing model to that
structure with the flip inversion I mentioned without loss of
generality |
03:44.27 |
starseeker |
I'm not quite parsing the flip
inversion |
03:45.03 |
brlcad |
I'll draw |
03:47.29 |
starseeker |
oh, wait - you're turning regions that are not
self contained into assemblies, and creating regions below them of
the shared subset? |
03:47.44 |
brlcad |
yes |
03:47.57 |
starseeker |
won't that really mess with region_id
information>? |
03:48.23 |
starseeker |
if a geometry was set up with r1 and r2 having
different region ids and shared geometry... |
03:48.47 |
brlcad |
not necessarily |
03:50.30 |
brlcad |
important note, though, that the progression
is towards the minimization of region ids -- S2 will need updating
to accommodate, but M3 uses different tracking mechanisms |
03:51.23 |
starseeker |
that definition of a region strikes me as a
bit limiting - let's say I have a model of a screw, and I want to
make 10 different regions using the same geometry but different
material properties (aluminum screw, steel screw, etc...) -
intentionally the same size and geometry but different regions, and
the desire to have any change to screw dimensions propogate to all
regions |
03:51.37 |
brlcad |
region id's in this new system become mostly
irrelevant -- it's just attribute data |
03:51.47 |
starseeker |
brlcad: OK, we're assuming S2 changes as well
- that's different |
03:52.23 |
brlcad |
the concept of a "part" is more that there's a
point where they're no longer assemblies and become self-contained
part data |
03:52.59 |
brlcad |
I really probably just need to write all this
up in a document since it's a discussion that's come up
before |
03:53.23 |
starseeker |
what happens to the different-materials
same-geometry sceario? |
03:55.30 |
brlcad |
that's either multiple parts (which is what
most cad packages do and matches our current "region" concept), or
we have to implement support for multiple-segment regions |
03:55.57 |
brlcad |
the latter would be great for things like the
vol primitive |
03:57.50 |
brlcad |
at this point, most of the issues on
regions/materials/ids/etc can be punted so long as the routine that
breaks up a .g has a means to stop at some level in the hierarchy
-- whether at prim, region, one below region, one above,
etc |
03:58.36 |
brlcad |
one solution to the multiply reference region
was to invert downwards instead of upwards |
04:00.20 |
brlcad |
so every region becomes a region comb
containing just one member, the former region hierarchy --
basically injects a comb node and pushes the region bit up and the
"part" becomes a non-region |
04:00.41 |
starseeker |
nods |
04:01.20 |
brlcad |
so then S2 keeps doing what they're doing --
regions are unaffected |
04:01.27 |
brlcad |
region count is unchanged |
04:02.18 |
brlcad |
lil harder to ensure database integrity, so
every region has one and only one member, a part |
04:03.27 |
starseeker |
hmm. Well, regardless it sounds like the
first stage is to get a tree walker going and be able to control
the break points |
04:05.26 |
starseeker |
likes the sound of
multiple-segment regions, even if he doesn't know exactly what that
would entail |
04:06.20 |
starseeker |
must sleep - early morning
gym appointment (ugh) |
04:07.58 |
brlcad |
yeah, definitely |
04:39.55 |
CIA-77 |
BRL-CAD: 03brlcad * r43358
10/brlcad/trunk/TODO: consolidate the other conversion
tasks |
06:33.18 |
*** join/#brlcad Stattrav
(~Stattrav@117.192.132.151) |
06:33.18 |
*** join/#brlcad Stattrav
(~Stattrav@unaffiliated/stattrav) |
08:07.49 |
*** join/#brlcad epileg
(~epileg@unaffiliated/epileg) |
09:31.11 |
*** join/#brlcad Stattrav
(~Stattrav@117.192.132.151) |
09:31.11 |
*** join/#brlcad Stattrav
(~Stattrav@unaffiliated/stattrav) |
09:44.05 |
dloman |
starseeker: brlcad: I'm not quite grasping at
what problem we are solving by stopping the disassembly of the .g
file at the region level.... |
09:44.26 |
dloman |
it seems to me it would cause much more
problems than is worth the gain in simplicity... |
09:45.10 |
dloman |
Modelers frequently use a single prim from a
region (r1) to subtract from another region (r2) for
overlaps. |
09:46.27 |
dloman |
so, but keeping all the prims in the region
level file, the GS would have to load two region .g's (entirely
with all their geometry) just to get at the solid in r1 for r2...
seems a bit clunky and complex |
09:46.57 |
dloman |
what was the 'gain' for keeping the geometry
in the region level .g file? |
11:50.37 |
``Erik |
hm, there's been argument that subtracting a
region itself is incorrect, the proper way for that hack would be
to make a subregion group, have the region contain the group, and
subtract the group from other geometry O.o |
11:52.47 |
``Erik |
dlo: I'm not making it in today, I'll be at
upper chesapeake most of the day, I think the last fugly wart I
left is the UUID shtuff if it's a show stopper and you want to
regain functionality... my intent is to try to use the system uuid
(e2fs or ossp, depending on os) with some cmake checks and #if e2fs
#if ossp fu, if you need something rolling today |
11:53.43 |
dloman |
not likely, I'll probably be leaving early
today... |
11:54.12 |
dloman |
the senario I am talking about is: r1 = s1 u
s2 u s3 u s4 |
11:54.26 |
dloman |
r2 = s5 u s6 - s1 |
11:55.13 |
dloman |
I don't see why we would want to keep all the
prims in the r1.g and r2.g file, such that we have a duplicate of
s1 |
11:55.51 |
``Erik |
hasn't read backlog and is
getting ready to head to the hospital, will catch it all later
O.o |
11:56.00 |
dloman |
ack, everything okay? |
11:56.20 |
``Erik |
it's not for me |
13:19.56 |
starseeker |
dloman: if I understand correctly, the notion
is that each region would be a fully independent piece of
geometry |
13:20.31 |
starseeker |
by definition, there would be no shared
geometry between regions, so subtractions to avoid overlaps would
become a somewhat problematic way to handle things |
13:22.02 |
starseeker |
The main practical concern with breaking up
the entire .g file into all its objects is IO performance (lots and
lots of small files) |
13:23.03 |
starseeker |
brlcad also seems to have some ideas about
enforcing region policy and .g structure |
13:23.31 |
starseeker |
isn't sure if that logic
should live at the svn level or above it |
13:24.40 |
starseeker |
as far as the policy stuff, what I understand
of it sounds OK but I'm not sure current modeling practices like
you describe are really compatible with it |
13:27.02 |
starseeker |
e.g. subtracting parts of one interfering
region from another region will result in a copy of the
subcomponents needed for the subtraction appearing in the region
being subtracted from, and those components will lose their
relationship to the region being subtracted |
13:28.02 |
starseeker |
so if you have r1 and r2, and need to subtract
c2 that is part of r2 from r1 to avoid an overlap, r1 would get a
copy of c2 |
13:29.01 |
starseeker |
and changes to the original c2 in r2 would not
be automatically propogated back to r1, unless we implement
something to do that (which kinda violates the notion of each
region being its own independent entity) |
13:42.21 |
*** join/#brlcad epileg
(~epileg@unaffiliated/epileg) |
13:44.04 |
*** join/#brlcad epileg
(~epileg@unaffiliated/epileg) |
14:15.23 |
_psilva |
hiyo |
14:31.07 |
CIA-77 |
BRL-CAD: 03brlcad * r43359
10/brlcad/trunk/src/irprep/ir-sgi.c: HAS_SGIGL .. isn't going to be
around much longer. but test for it being set instead of being true
until it's gone. |
14:32.23 |
CIA-77 |
BRL-CAD: 03brlcad * r43360
10/brlcad/trunk/src/irprep/ (firpass.c ir-X.c secpass.c
shapefact.c): quell verbose warnings. mark unused params, size_t
signage promotions, index shadows, and exact floating point
comparisons. |
14:36.56 |
CIA-77 |
BRL-CAD: 03brlcad * r43361
10/brlcad/trunk/src/lgt/ (do_options.c execshell.c): need to
include unistd.h |
14:47.22 |
dloman |
Hrm, well, putting a combination between a
region and its prims doesn't solve the problem. |
14:48.14 |
dloman |
I can 99.99% gurantee that dupicating geometry
(in the example, s1) will be *adding* a substantial maintenance
burden on the modelers |
14:48.24 |
dloman |
especially if s1 is a somewhat sizable
bot. |
14:50.19 |
dloman |
additionally, although diskspace is 'cheap'
and we should only solve problems when they become a
problem |
14:51.07 |
dloman |
wouldn't duplicating s1 in two spots actually
end up as a net negative performance on IO, since we would
technically have to read that prim twice? |
14:51.32 |
dloman |
We can't ignore overlaps, as the are GOING to
happen. Of this, I am 110% certain. |
14:52.15 |
starseeker |
dloman: I may be missing some of the
implications of what brlcad is describing, so he should weigh
in |
14:52.27 |
dloman |
add in the increasing data sizes due to bots
and the impending complex nurbs, and I don't see 'each region as
its own, idependent, entity' as being a good idea. |
14:52.35 |
dloman |
sure thing. |
14:53.12 |
dloman |
I am just trying to understand how brlcad and
i got our wires crossed.... cause this is not the impression i got,
walking away from our last discussion on the subject :/ |
14:53.27 |
dloman |
or more specificly, what brlcad's notion
is. |
14:53.59 |
dloman |
is remote today, so Im not in
office. |
14:54.07 |
starseeker |
dloman: did you read the scrollback from last
night? |
14:54.33 |
dloman |
yuppers. |
14:54.37 |
starseeker |
you might be able to follow it better than
me |
14:54.58 |
CIA-77 |
BRL-CAD: 03brlcad * r43362
10/brlcad/trunk/src/nirt/ (command.c interact.c nirt.c nirt.h
parse_fmt.c read_mat.c): eliminate the rtip global. propagate api
changes throughout. |
14:55.09 |
dloman |
and keeping the prims in the region .g's is,
in my opinion, going to cause a ****-ton of issues. |
14:56.12 |
dloman |
keeping all the solids in their own file, just
like the c's and r's, but in a directory named after the associated
r, is what i understood our approach was. |
14:57.05 |
dloman |
yes, it creates many more files, but i
honestly think its more flexible and will be lower IO in the long
run. |
14:58.35 |
CIA-77 |
BRL-CAD: 03brlcad * r43363
10/brlcad/trunk/src/nirt/showshot.c: convert %F to %lf. not
optimal, but gefn |
14:58.38 |
*** join/#brlcad Stattrav
(~Stattrav@117.192.132.151) |
14:58.38 |
*** join/#brlcad Stattrav
(~Stattrav@unaffiliated/stattrav) |
15:20.43 |
dloman |
starseeker: do you know if its bad to change
an #include <string> to #include <string.h> ? |
15:21.08 |
starseeker |
uh. isn't the first one C++ and the second
one C? |
15:21.29 |
dloman |
thats what i thought too. just
checking. |
15:21.55 |
dloman |
hard to google things with a 13 month old in
one arm :) |
15:23.14 |
starseeker |
heh |
15:23.21 |
starseeker |
winces |
15:23.54 |
starseeker |
havoc checkout takes 35 megs doing the
write-out-every-object scheme |
15:24.31 |
CIA-77 |
BRL-CAD: 03brlcad * r43364
10/brlcad/trunk/src/proc-db/ (brickwall.c masonry.c): quell
warnings, exact floating point comparisons |
15:24.37 |
starseeker |
guess the every-object-is-a-g-database thing
isn't so hot |
15:24.53 |
starseeker |
commits
anyway... |
15:25.10 |
starseeker |
oh, took several minutes to commit and
checkout, too |
15:25.18 |
dloman |
why is that bad? whats the original
filesize? |
15:25.37 |
CIA-77 |
BRL-CAD: 03brlcad * r43365
10/brlcad/trunk/src/proc-db/kurt.c: !EQUAL instead of != for
floating point comparison |
15:25.37 |
starseeker |
580K |
15:26.25 |
dloman |
looks like the per file overhead is a bit
more than 104 bytes eh? |
15:26.36 |
dloman |
or are there a bajillion files? |
15:26.55 |
starseeker |
yeah, there's a lot of files |
15:26.55 |
CIA-77 |
BRL-CAD: 03brlcad * r43366
10/brlcad/trunk/src/proc-db/ (16 files): quell verbose compilation
warnings mostly related to unused params and vars, shadowings, and
checking usage. |
15:27.16 |
starseeker |
plus the .svn checkout keeps a baseline copy
of each file and a properties file for each file |
15:27.28 |
starseeker |
.svn is 23 Megs, rest is checkout |
15:28.43 |
dloman |
idealisticly, we could boil the whole repo
down to one or two baseline versions of each prim, and just use a
ton of matricies :) |
15:28.45 |
CIA-77 |
BRL-CAD: 03starseeker * r43367
10/geomcore/trunk/tests/svntest/main.c: Try writing out every
object, and directory organization. Use havoc for more of a stress
test - performance doesn't look promising |
15:29.10 |
starseeker |
somewhat amusingly, the actual repository (as
opposed to the checkouts) is 1.7 megs |
15:31.06 |
dloman |
thought: if we are using dbobject names to
link to other files, why can't a region contain all its own prims,
but still be able to link to other region .g's for prims too ?
whats wrong with that? |
15:31.34 |
starseeker |
uh... |
15:31.50 |
starseeker |
that gets back to the whole "redefine what a
region means" problem |
15:34.52 |
dloman |
Well, what ever the solution is, having two
copies of the same solid, one to construct r1, one to be a overlap
subtraction for r2, is going to make a bunch of people really
upset. |
15:35.09 |
starseeker |
hmm... so if the count is right, there were
just shy of 3000 objects, which means counting the base files and
props files just shy of 9000 files for havoc, not counting any
other svn files in the checkout |
15:36.34 |
dloman |
as in 9000 in the repo and 3000 end user
visible? |
15:36.41 |
starseeker |
yep |
15:37.16 |
dloman |
well, thats better than I thought :) brlcad
and I were thinking an average of 10k per model. |
15:37.25 |
dloman |
granted, its just havoc |
15:37.31 |
starseeker |
nods |
15:37.37 |
starseeker |
simple model |
15:37.47 |
dloman |
but converted geometry is like to have less
objects, but larger size per |
15:38.18 |
dloman |
i think the last conversion i worked with had
about 1500 db objects, but the .g file size was 280 mges |
15:38.24 |
starseeker |
I suppose committing and checking out an
entire model in one gulp could also be regarded as worst
case |
15:38.24 |
dloman |
megs |
15:38.41 |
dloman |
yeah, untill the multi-system projects start
hooking in :) |
15:39.15 |
starseeker |
"checking out" in this case is also creating
the repository on disk |
15:39.29 |
brlcad |
that overhead is pretty much what I
expected |
15:39.48 |
brlcad |
so the checkout is 1.7, repo is 23 .. original
was? |
15:39.49 |
starseeker |
it might be worth investigating if there are
ways to talk to the repo without an explicit checkout to
disk |
15:40.11 |
starseeker |
no, checkout is 35, repo is 1.7, original was
580K |
15:40.21 |
starseeker |
35 Meg, 1.7 Meg |
15:40.39 |
brlcad |
checkout includes .svn dir data |
15:40.42 |
brlcad |
what's the export size? |
15:40.45 |
starseeker |
running the test as currently committed on the
Mac takes 4.5 minutes |
15:41.02 |
starseeker |
about 12 Megs, I think... |
15:41.10 |
brlcad |
figure the mac should be worst case
performance, so it's a good baseline |
15:42.07 |
brlcad |
the reason for stopping at the region level
was to fight some of that performance, I expect it to knock that at
least in half if not more |
15:42.47 |
dloman |
so with stopping at the r level, how does one
handle using s1 from r1 as a subtraction in r2? |
15:43.04 |
brlcad |
putting the repo more on par with the .g size
(maybe 25% expansion, minor), and checkout around an order
larger |
15:43.40 |
brlcad |
in the short term or long term? :) |
15:43.59 |
brlcad |
and under the hood, or
exposed-to-user? |
15:44.05 |
dloman |
exposed to user |
15:45.10 |
brlcad |
going to take a sec to write |
15:51.27 |
dloman |
gets his grub on while he
waits. Grilled Cheeze == nom nom nom |
15:52.57 |
brlcad |
so "s1" is some member of this 'part' object
"r1", which I'm going to intentionally avoid calling a region for
reasons that will hopefully become evident. so this piece of solid
part r1 is being used as a subtraction shape on solid part r2.
previously both in their same namespace, but no longer with this
new 'part' concept -- each part is a unique namespace. so the
subtraction of r1/s1 from r2 becomes a cross-namespace reference
for the overlapping portions ( |
15:53.41 |
CIA-77 |
BRL-CAD: 03r_weiss * r43368
10/brlcad/trunk/src/libbn/bntester.c: Added to 'bntester' support
for testing function 'bn_isect_lseg3_lseg3'. |
15:54.01 |
brlcad |
cross-reference namespace then become a
conscious decision of modelers to import data (breaking the need
for a cross-namespace reference), or refactor into a new base part
that both r1 and r2 reference |
15:54.36 |
brlcad |
basically what they do now, just with an
implicit single namespace |
15:55.02 |
brlcad |
I'll have to revisit our notes from that
half-day discussion we had -- because we had it pretty lock solid
then |
15:55.43 |
brlcad |
I might have a minor detail off, but shouldn't
be far off .. but then it was a couple months ago :) |
15:56.14 |
dloman |
okay, will the end user have to maintain two
's1's or just one? |
15:56.15 |
brlcad |
the whole problem revolved around solving
mergability of .g files |
15:56.31 |
brlcad |
they get to decide -- default would be just
one s1 |
15:57.07 |
brlcad |
an s1 from the r1 namespace, r1::s1 |
15:57.27 |
brlcad |
if imported as r1::s1 and r2::s1, then they
have to make a decision whether those are mergable or not |
15:57.52 |
dloman |
so a modeler uses s1 from part1, or part1::s1,
in part2 as a subtraction, or part2 = part2::s1 -
part1::s1 |
15:57.53 |
brlcad |
but then we can provide tools to assist with
that decision process -- auto-merge identical geometry, for
instance |
15:58.10 |
brlcad |
right |
15:58.16 |
dloman |
and the modeler doesn't want to make a new
part.... how do we store that on our end? |
15:58.41 |
starseeker |
if I'm going to sort assemblies out from
combinations, I'll probably have to get search set up to return a
list of directory pointers - the ged results string won't cut
it |
15:58.42 |
brlcad |
then it's a configuration option as to what
they might want to auto-do with that type of operation --
auto-import/copy, keep the reference, etc |
15:59.13 |
brlcad |
it literally just becomes a named reference,
part1::s1 in part2 |
16:00.27 |
brlcad |
part2 was just "u s1" with s1 being an
implicit part2::s1 -- with the subtraction and absent any
automerging, it becomes: "u s1 - part1::s1" as string data in the
.g file |
16:00.53 |
brlcad |
the part that's escaping me at the moment (no
pun intended) is how we solved the "where's my namespace"
problem |
16:01.02 |
dloman |
so we wont be storing two copies of part1::s1
? |
16:01.11 |
brlcad |
nope |
16:01.27 |
dloman |
okay then. |
16:01.53 |
dloman |
so by this logic, the overall svn dir
structure wont ever exceed two dirs deep? (but be very wide)
? |
16:01.53 |
brlcad |
only if they request exactly that as an
operation -- "cut my external refs" .. "import external refs",
etc |
16:02.09 |
brlcad |
that's the part that I'm not remembering
without our notes |
16:02.20 |
brlcad |
we'd solved that issue |
16:02.35 |
brlcad |
I think it was with top-level
namespacing |
16:02.53 |
brlcad |
so not a part1 namespace, but some higher
tank1 namespace and tank2 namespace |
16:03.16 |
dloman |
right, per my understanding and notes and
diagrams, we left our last talk thinking the repo will be three
layers deep: projects->combs/regs->prims |
16:03.31 |
dloman |
now i'm hearing different, hence my confusion
:) |
16:03.57 |
brlcad |
s/projects/namespaces/ and I can see that
:) |
16:04.26 |
brlcad |
yeah, I wasn't being entirely precise last
night as the focus was more just that there needs to be "some"
mechanism to halt traversal part-way down the DAG |
16:04.45 |
brlcad |
because of the horrid performance impact I was
anticipating |
16:04.50 |
dloman |
namespaces->regions/combs .... thats it,
since all the prims will be stored in the files in the
regions/combs level |
16:05.54 |
dloman |
..if I am understanding correctly. |
16:05.55 |
brlcad |
yeah, the details are starting to come back to
me now :) |
16:06.12 |
starseeker |
I can probably get a rough idea of how
expensive writing out regions will be, but it won't be meaningful
until I can sort out the assemblies and that's not so
straightforward |
16:06.59 |
*** join/#brlcad roberthl
(~robert@v001.rhl.me.uk) |
16:06.59 |
*** join/#brlcad roberthl
(~robert@mediawiki/RobertL) |
16:07.18 |
starseeker |
almost feels like the search logic needs to
move from ged to somewhere else |
16:07.23 |
starseeker |
and have ged wrap it |
16:07.27 |
starseeker |
but not sure where to move it |
16:07.30 |
brlcad |
yep, librt |
16:07.38 |
starseeker |
heh, that works |
16:07.43 |
brlcad |
mged -> libged -> librt is the
progression of logic |
16:07.52 |
brlcad |
there's a lot in libged that belongs in
librt |
16:08.14 |
starseeker |
ok, I'm gonna have to move that as a first
step - I need the search filters to do an intelligent
breakout |
16:08.19 |
brlcad |
libged in a final state would actually end up
with very little, just state container wrappers and string parsing
really |
16:09.37 |
brlcad |
daniel's comment was a good one, libged isn't
really optimal underneath the GE -- it's at the same level, so most
of the geometry manipulation it performs is logic that should be in
librt (and is, in a way) |
16:10.19 |
brlcad |
it becomes more of a transaction management
interface that bridges and simplifies all that's possible with
librt |
16:13.07 |
brlcad |
dloman: will have to revisit the notepad next
time I'm in the office (maybe friday) to make sure we're fresh on
the solution we came up with, it was pretty tight and there are a
few particulars I'm not remembering at the moment |
16:13.18 |
dloman |
so GE *isn't* a C++ wrapper for
libged? |
16:13.29 |
dloman |
I likely won't be back in the office till next
Wednesday |
16:13.57 |
brlcad |
it could be as an interim solution, but really
shouldn't be |
16:14.56 |
brlcad |
libged is really a transactional command
parsing library .. that string parsing foo is major suck for any
sort of performance geometry processing |
16:15.02 |
brlcad |
GE is more akin to ACIS |
16:15.05 |
dloman |
so if the GE is side by side with ged, then
any/all common functionality needs to be pushed down into librt
(and possibly elsewhere too) otherwise we're duplicating code?
(Did i capture the concept correctly?) |
16:15.19 |
brlcad |
you got it |
16:15.55 |
brlcad |
alternatively, pushed into GE and libged sits
on top of GE .. but librt makes more sense at the moment |
16:16.29 |
dloman |
isn't libged primarily c? |
16:16.38 |
brlcad |
basically "libged > GE > librt" or
"libged,GE > librt" (current plan) |
16:16.53 |
brlcad |
right, that's why it makes more sense to stay
that way |
16:17.24 |
brlcad |
it could easily be an encapsulated wrapper,
where the GE c++ness would be mere implementation detail like
opennurbs in librt |
16:17.42 |
dloman |
in order to keep the code from getting wicked
stupid, then GE would also need to be c, not C++ ...? |
16:17.52 |
brlcad |
not at all |
16:18.25 |
brlcad |
because libged's api is presently a single
data container and argc/argv string data |
16:18.41 |
brlcad |
what goes on under the hood stays under the
hood |
16:18.50 |
brlcad |
(bom chika wah wah) |
16:21.59 |
CIA-77 |
BRL-CAD: 03brlcad * r43369
10/brlcad/trunk/src/remrt/ihost.c: if DEFINED, not if NOT
defined |
16:22.04 |
brlcad |
oof, that took a while to see... |
16:30.11 |
dloman |
alright, Im going afk for a few days. I
expect the GS to be finished when I return. Hop to it!
:P |
16:31.26 |
dloman-afk |
(I only say that cause its now very apparent
to me that I have (and had) no idea what I'm doing, heh ) |
16:41.24 |
brlcad |
we need to get rolling on gsoc preparations if
you all are interested in mentoring again -- the ideas page needs
major updating |
16:51.45 |
CIA-77 |
BRL-CAD: 03brlcad * r43370
10/brlcad/trunk/src/remrt/ihost.h: include the headers this header
requires, self containment |
16:52.26 |
starseeker |
sounds like fun |
16:52.33 |
CIA-77 |
BRL-CAD: 03brlcad * r43371
10/brlcad/trunk/src/remrt/ (remrt.c rtsrv.c): mark unused params,
check argc params, terminal sentinel with NULL instead of 0, and
other quellage |
17:21.15 |
_psilva |
hey brlcad |
17:21.20 |
_psilva |
got some news for you |
17:24.42 |
brlcad |
sup? |
17:25.16 |
brlcad |
you spawned a child process? :) |
18:25.45 |
_psilva |
then it's two thing |
18:25.48 |
_psilva |
hah |
18:25.54 |
_psilva |
due march 16 ish |
18:26.08 |
_psilva |
but even bigger and more relevant |
18:26.20 |
_psilva |
we got bought by autocad |
18:26.23 |
_psilva |
er |
18:26.25 |
_psilva |
autodesk |
18:26.55 |
_psilva |
http://usa.autodesk.com/adsk/servlet/index?id=16284057&siteID=123112 |
18:27.11 |
_psilva |
is now autodesk
employee |
19:31.35 |
starseeker |
_psilva: do we offer condolances? |
20:05.30 |
brlcad |
_psilva: heh, well congrats on the 16th and
condolences on the 30th (april) |
20:09.46 |
_psilva |
heh |
20:10.23 |
_psilva |
at least we're not being relocated |
20:10.30 |
_psilva |
:) |
20:15.10 |
_psilva |
we'll see |
20:15.19 |
_psilva |
gonna stick around until something more
interesting pops up |
20:31.35 |
CIA-77 |
BRL-CAD: 03jordisayol * r43372
10/brlcad/trunk/ (misc/debian/control sh/make_deb.sh): modify
dependencies to build deb packages |
21:01.58 |
CIA-77 |
BRL-CAD: 03starseeker * r43373
10/brlcad/trunk/ (7 files in 3 dirs): Make a stab at moving search
logic to librt |
21:22.17 |
CIA-77 |
BRL-CAD: 03starseeker * r43374
10/brlcad/branches/cmake/ (56 files in 18 dirs): MFC
r43373 |
21:33.37 |
CIA-77 |
BRL-CAD: 03starseeker * r43375
10/brlcad/trunk/src/librt/search.c: Fix order of inputs, UNUSED
some inputs |
21:37.27 |
CIA-77 |
BRL-CAD: 03starseeker * r43376
10/brlcad/branches/cmake/src/librt/search.c: MFC r43375 |
21:38.15 |
CIA-77 |
BRL-CAD: 03brlcad * r43377
10/brlcad/trunk/src/librt/bool.c: |
21:38.15 |
CIA-77 |
BRL-CAD: call NEAR_EQUAL() with a 0.001
tolerance instead of rt_fdiff() since that |
21:38.15 |
CIA-77 |
BRL-CAD: function is deprecated. this
potentially affects fastgen platemode overlap |
21:38.15 |
CIA-77 |
BRL-CAD: reporting since it's no longer
performing a relative tolerance comparison, but |
21:38.16 |
CIA-77 |
BRL-CAD: the impact shouldn't be too
significant since the absolute tolerance is rather |
21:38.16 |
CIA-77 |
BRL-CAD: loose at 0.001 |
21:40.26 |
CIA-77 |
BRL-CAD: 03starseeker * r43378
10/brlcad/branches/cmake/src/ (libged/CMakeLists.txt
librt/CMakeLists.txt): Fix CMake logic for search file
changes |
21:41.25 |
CIA-77 |
BRL-CAD: 03brlcad * r43379
10/brlcad/trunk/src/librt/db_flip.c: |
21:41.25 |
CIA-77 |
BRL-CAD: use a bridge pattern to separate the
deprecated function logic into new private |
21:41.25 |
CIA-77 |
BRL-CAD: functions. this lets us continue to
be able to flip v4 files, even after the |
21:41.25 |
CIA-77 |
BRL-CAD: deprecated rt_* functions become
obsolete, yet allows for the API to continue |
21:41.25 |
CIA-77 |
BRL-CAD: working for now. |
21:41.35 |
CIA-77 |
BRL-CAD: 03brlcad * r43380
10/brlcad/trunk/src/librt/librt_private.h: declare the new flip
functions |
21:42.24 |
CIA-77 |
BRL-CAD: 03brlcad * r43381
10/brlcad/trunk/src/librt/binunif/db5_bin.c: call ntohl() and
htonl() instead of the deprecated libbu functions. |
21:42.53 |
CIA-77 |
BRL-CAD: 03brlcad * r43382
10/brlcad/trunk/src/librt/comb/db_comb.c: call the new private flip
funcs instead of the deprecated api. |
22:33.32 |
brlcad |
starseeker: librt api should not have
argc/argv parameters |
22:34.29 |
starseeker |
brlcad: all right, I'll have to revert then -
reworking the code to not use them could be a significant
effort |
22:34.39 |
brlcad |
yeah, moving search to librt is not going to
be a simple move |
22:34.45 |
brlcad |
it needs to work on data |
22:35.22 |
starseeker |
well, that's a days work down the
drain |
22:35.29 |
brlcad |
data in, data out -- no printing to console
(except diagnostic) |
22:36.03 |
starseeker |
uh... it's not printing to console |
22:36.10 |
brlcad |
so you'd get back, for example, an array of
rt_db_internal pointer's from a given query -- the search front-end
would iterate over a result and print their names |
22:37.09 |
starseeker |
that's edging dangerously close to a complete
rework |
22:37.28 |
brlcad |
I was surprised that you were heading down
that road :) |
22:37.42 |
starseeker |
well, is there another way to spot
assemblies? |
22:37.45 |
brlcad |
it's doable, not necessarily a
rewrite |
22:38.10 |
brlcad |
the hardest part of search is building up that
query filtering logic, stopping criteria -- that all stays the
same |
22:38.31 |
starseeker |
if I'm going to do the one .g per region, I
have to be able to identify the assembly combinations - they will
need to be written out as their own objects, since the region .g
files won't handle them |
22:40.05 |
brlcad |
search still sounds like a good approach for
that |
22:40.27 |
brlcad |
you just have to split things up
some |
22:40.47 |
CIA-77 |
BRL-CAD: 03starseeker * r43383
10/brlcad/trunk/src/librt/search.c: |
22:40.47 |
CIA-77 |
BRL-CAD: Add logic to append directory pointer
entries to a list - will allow for |
22:40.47 |
CIA-77 |
BRL-CAD: manipulation of objects found in C
code without having to re-parse string. For |
22:40.47 |
CIA-77 |
BRL-CAD: now, only return pointer to leaf node
of path - could conceivably be expanded if |
22:40.47 |
CIA-77 |
BRL-CAD: there is a need. |
22:40.50 |
brlcad |
somewhere in search, I'm sure it's taking the
input argc/argv and turning that into an in-memory expression of
some sort |
22:41.08 |
starseeker |
brlcad: it is. I'm quite sure it can be done,
but it's... tangled |
22:41.27 |
brlcad |
that logic stays in libged's search front-end,
librt takes that in-memory expression as a parameter to
rt_search() |
22:41.45 |
brlcad |
layers, like an onion ;) |
22:41.56 |
starseeker |
brlcad: what should I do - full revert, put
everything back in libged? |
22:42.23 |
starseeker |
I'm pretty sure I won't have time until next
month to do that kind of sorting out of the search logic |
22:46.26 |
brlcad |
might as well |
22:46.39 |
starseeker |
k |
22:46.59 |
CIA-77 |
BRL-CAD: 03starseeker * r43384
10/brlcad/branches/cmake/src/librt/ (6 files in 3 dirs): MFC
r43383 |
22:48.17 |
brlcad |
at a glance, looks like it's pretty close
already -- find_formplan() would become something like
rt_search_plan(), find_execute() would probably become something
like rt_search(). that'd be your two new api hooks |
22:48.59 |
brlcad |
ged_search() looks rather peculiar to me..
how does it know how many expression arguments there
are?? |
22:50.00 |
starseeker |
what, the altered one or the
original? |
22:50.47 |
starseeker |
OK, everything should be back in
place |
22:51.03 |
brlcad |
I don't know -- I'm just looking at my current
checkout with is r42551 |
22:51.22 |
starseeker |
oh, yeah that's the original |
22:51.42 |
brlcad |
Oh.. is the entire expression in
argv[1]?? |
22:51.45 |
brlcad |
heh |
22:51.47 |
starseeker |
yeah |
22:51.49 |
brlcad |
wow |
22:51.55 |
starseeker |
it's up to the search functions to make sense
of it |
22:52.21 |
brlcad |
so yeah.. a few changes |
22:53.59 |
brlcad |
ged_search() should take variable argc/argv,
one per actual argument .. that would get parsed into an
"rt_search_plan" struct of some sort (basically a custom "PLAN *"),
that'd get passed to rt_search() |
22:54.29 |
CIA-77 |
BRL-CAD: 03starseeker * r43385
10/geomcore/trunk/tests/svntest/main.c: |
22:54.30 |
CIA-77 |
BRL-CAD: Add some commented out code based on
the test code used in ged_search to test |
22:54.30 |
CIA-77 |
BRL-CAD: directory pointer list printing. Will
need to construct argc/argv input for |
22:54.30 |
CIA-77 |
BRL-CAD: rt_search, but this should in
principle allow the identification in C code of |
22:54.30 |
CIA-77 |
BRL-CAD: assemblies. |
22:54.55 |
brlcad |
librt could provide rt_search_plan() as a
helper function to turn the string data into an rt_search_plan, but
you'd be able to bypass that and do it all string-less with
rt_search() then if you wanted |
22:54.57 |
starseeker |
brlcad: we need to be careful there - the find
command has its own option handling logic, I don't know how similar
it is to our normal stuff |
22:56.16 |
brlcad |
not too careful -- at worse, ged_search()
and/or rt_search_plan() would just join all of the argv parameters
together into one bit string and pass to find's plan making
code |
22:56.45 |
starseeker |
uh... if we're doing that, why bother
splitting them up in the first place? |
22:57.02 |
brlcad |
ahh, I see -- it's not one big
string |
22:57.12 |
brlcad |
it's iterating afterall |
22:57.20 |
brlcad |
but requires a NULL-terminated argv |
22:57.46 |
brlcad |
you're not splitting them up, they start out
split up |
22:58.18 |
starseeker |
sort of - formplan gets argv[2] |
22:59.10 |
brlcad |
but as a char **, it then iterates over the
argv elements individually |
22:59.18 |
starseeker |
right |
22:59.35 |
brlcad |
so it's not all in argv[1]/argv[2] |
22:59.43 |
brlcad |
it's already a proper argv list |
22:59.57 |
starseeker |
brlcad: as long as we're at this... is there a
function somewhere to do for bu_lists or some other bu data
structure what uniq does on the unix command line? |
23:00.53 |
starseeker |
you hand mentioned wanting to fix some search
behavior that was unexpected, and iirc it required always doing a
full path iteration, so to simulate searching through ls results we
would need to do some kind of uniq filtering |
23:00.57 |
CIA-77 |
BRL-CAD: 03starseeker * r43386
10/brlcad/trunk/ (7 files in 3 dirs): Sigh. Put search back in
libged for now - need to split out the argument parsing logic into
libged and the backend logic into librt first. |
23:01.03 |
brlcad |
bu_ptbl's have unique awareness for pointer
tracking |
23:01.30 |
brlcad |
bu_ptbl_ins_unique() |
23:01.34 |
starseeker |
hmm... can I stash directory pointers in a
bu_ptbl? |
23:01.45 |
brlcad |
ptbl == pointer table |
23:01.48 |
brlcad |
arbitrary pointer container |
23:02.19 |
starseeker |
ok, that might do then |
23:02.23 |
brlcad |
redblack trees have similar uniqueness
insertion routines |
23:02.39 |
brlcad |
depends what sort of O behavior you
need |
23:03.21 |
brlcad |
so search is already pretty close to what
you'd need for librt from what I'm seeing here |
23:03.58 |
brlcad |
the biggest change is just fixing the routine
names, creating corresponding rt_ prefix names for the
api |
23:04.26 |
starseeker |
and making sure everything functions in
libged/librt respectively |
23:04.29 |
brlcad |
the code already has that separation I
referred to |
23:05.07 |
starseeker |
ah, good :-) |
23:05.19 |
brlcad |
think of it as only migrating find_formplan()
and find_execute() to librt, but not with those names |
23:05.48 |
brlcad |
ged_search() stays in libged exactly as it is,
just pointing to the new names instead of find_formplan() and
find_execute() |
23:06.02 |
starseeker |
well, I've got tomorrow so I'll do what I
can |
23:06.14 |
brlcad |
instead of find_formplan() returning a PLAN*,
it should be some rt_plan_t or somesuch |
23:06.57 |
starseeker |
hmm - db_plan_t maybe? |
23:07.01 |
brlcad |
find_formplan() would get renamed to something
like rt_search_plan(); find_execute() would get renamed to
something like rt_search() |
23:07.13 |
starseeker |
doesn't really have much to do with raytracing
- db_ prefix may make more sense |
23:07.17 |
brlcad |
it could be db_ api instead of rt_
api |
23:07.18 |
brlcad |
sure |
23:07.31 |
brlcad |
unless it's going to return rt_db_internal
objects |
23:07.34 |
brlcad |
then it's rt_ api |
23:07.47 |
brlcad |
I think |
23:07.51 |
brlcad |
have to check on that one |
23:08.11 |
brlcad |
ah, yes, find_execute() would have to be
refactored to not have a gedp parameter |
23:08.23 |
brlcad |
same with findplan |
23:08.49 |
starseeker |
will probably return a list of db_full_path
structs and a bu_ptbl of directory pointers |
23:09.07 |
starseeker |
yeah, ged structs are everywhere in
there |
23:09.20 |
starseeker |
I got those out once, so I'm not too worried
about that - just takes time |
23:10.30 |
starseeker |
or if directory pointers make it rt_ specific,
could just return db_full_path list and let the calling function
sort it out |
23:11.18 |
starseeker |
that's probably cleaner |