<div dir="ltr">That's great, Dave.<div><br></div><div>I updated a few things from cmb_v4, and here is what I got:</div><div><br></div><div>* Creating Prism, Brick, Cylinder are working, see attached screenshot.</div><div>* Creating sphere return a sphere, sort of (see attached )</div><div>* Creating Vertex, Edge, Face did not work for me. No geometry returned, and sometime crash. I believe the crashes were from cgm, and I don't have useful backtrace info from the crash.</div><div><br></div><div>Yumin</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 13, 2014 at 2:49 PM, David Thompson <span dir="ltr"><<a href="mailto:david.thompson@kitware.com" target="_blank">david.thompson@kitware.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi all,<div><br></div><div>I've added a batch of new CGM operators to SMTK (and fixed a few things in the process). The operators include:</div><div><br></div><div>- create vertex</div><div>- create edge (straight, arc, ellipse, parabola, hyperbola... but only straight and arc are tested)</div><div>- create face (planar or "best fit" -- which is a synonym for planar as far as I can tell)</div><div>- create cylinder</div><div>- create brick</div><div>- create sphere</div><div>- create prism</div><div>- union (a boolean, but only tested in a simple case)</div><div>- read (from a file supported by CGM)</div><div><br></div><div>There are examples of the operators in the smtk/bridge/cgm/testing/python directory.</div><div><br></div><div>Some notes:</div><div><br></div><div>1. The "create brick" operator is interesting because it demonstrates conditional items.</div><div>2. the "union" operator is interesting because it expects the models you wish to unite to be associated with it rather than passed in via an smtk::attribute::ModelEntityItem.</div><div>3. The edge and face creation operators currently take vertices and edges to connect as input items, but will probably move to using an association in the future.</div><div>4. Yumin has discovered that the union operator exposes an issue in the model manager... the result of the operation does not appear to be properly transcribed when using a forwarding bridge.</div><div>5. Some of the operator XML descriptions are marked as requiring a "b" association. This is a new type of association and indicates that the operator should be associated to a bridge session. Creation operators in general should have this type of association so that the user can choose which session/kernel to use.</div><div><br></div><div><span style="white-space:pre-wrap">     </span>David</div><div><br></div><div>PS. As an example, the Python script below created the 4 vertices, 6 edges, and 3 faces in the screenshot.</div><div><br></div><div>import smtk<br>mgr = smtk.model.Manager.create()<br>sess = mgr.createSession('cgm')<br>brg = sess.bridge()<br><br>def setCoord(x,v):<br>  for i in range(len(v)):<br>    x.setValue(i,v[i])<br><br>def setEntitiesByIndex(p,ep,v):<br>  for i in range(len(ep)):<br>    p.setValue(i, v[ep[i]])<br><br>verts = []<br>edges = []<br>faces = []<br>volus = []<br><br># Create vertices<br>pcoords = [ (0,0,0), (1,0,0), (0,1,0), (0,0,1)]<br>crv = sess.op('create vertex')<br>x = crv.findAsDouble('point')<br>c = crv.findAsInt('color')<br>c.setValue(0, 1)<br>for pt in pcoords:<br>  setCoord(x,pt);<br>  verts.append(crv.operate().findModelEntity('vertex').value(0))<br><br># Create edges<br>epts = [(0,1), (0,2), (0,3), (1,2), (1,3), (2,3)]<br>cre = sess.op('create edge')<br>t = cre.findAsInt('curve type')<br>t.setValue(0,6) # 6 == line segment in OpenCascade<br>v = cre.findAsModelEntity('vertices')<br>x = cre.findAsDouble('point')<br>c = cre.findAsInt('color')<br>c.setValue(0, 2)<br>for epair in epts:<br>  setEntitiesByIndex(v,epair,verts)<br>  if epair == (2,3):<br>    # Make the last edge an arc:<br>    t.setValue(0,1) # 1 == arc<br>    setCoord(x,[0,0.6,0.6]) # third point on arc<br>  edges.append(cre.operate().findModelEntity('edge').value(0))<br><br># Create faces<br>fedg = [<br>    (12, 0, 3, 1),<br>    (12, 0, 4, 2),<br>    (16, 1, 5, 2)<br>    ]<br>#   (16, 3, 5, 4) # <-- OpenCascade cannot infer that this face should be cylindrical<br>crf = sess.op('create face')<br>t = crf.findAsInt('surface type')<br>t.setValue(0, 12)<br>e = crf.findAsModelEntity('edges')<br>c = crf.findAsInt('color')<br>c.setValue(0, 3)<br>for face in fedg:<br>  e.setNumberOfValues(len(face)-1)<br>  setEntitiesByIndex(e,face[1:],edges)<br>  t.setValue(face[0]) # These values are OpenCascade enum values.<br>  faces.append(crf.operate().findModelEntity('face').value(0))<br><br></div><div><img height="346" width="367" src="cid:60A9A437-B25F-4A0B-AA14-C555ED333C2A@kitwarein.com"></div></div><br>_______________________________________________<br>
Smtk-developers mailing list<br>
<a href="mailto:Smtk-developers@smtk.org">Smtk-developers@smtk.org</a><br>
<a href="http://public.kitware.com/mailman/listinfo/smtk-developers" target="_blank">http://public.kitware.com/mailman/listinfo/smtk-developers</a><br>
<br></blockquote></div><br></div>