Fwd: Cannot move duplicated object
Bhupen Aole <[email protected]> Tue, 27 Aug 2019 13:15:05 -0400
| Newsgroups | gmane.comp.graphics.inkscape.devel |
|---|---|
| Message-ID | <CAAWpJFy+WU9a2Zk0Uu=SLwHS5dXsp=0J2hcXqBLLf9CKZxLhDQ@mail.gmail.com> |
--===============0908850192129585082==
Content-Type: multipart/alternative; boundary="000000000000915a5a05911c6ab7"
--000000000000915a5a05911c6ab7
Content-Type: text/plain; charset="UTF-8"
Hi Inkscape devs!
I am trying to create a duplicate of the selected object and move the new
copy to a different location.
Following is what I have come up with (browsing around other code), but I
am sure I am doing something wrong. There is no compilation or run time
error but the new object does not move although duplicate is created
correctly.
Appreciate your help.
void Array::applyPageGrid(Inkscape::Selection *selection)
> {
> int xq = _scalar_grid_horizontal_qty.get_value_as_int();
> double x = _scalar_grid_horizontal_amt.getValue("px");
> double y = _scalar_grid_vertical.getValue("px");
> //selection->moveRelative(x, y);
> // Duplicate (taken from selection-chemistry.cpp)
> SPDocument *doc = selection->document();
> if(!doc)
> return;
> Inkscape::XML::Document* xml_doc = doc->getReprDoc();
> std::vector<Inkscape::XML::Node*> reprs(selection->xmlNodes().begin(),
> selection->xmlNodes().end());
> //selection->clear();
> sort(reprs.begin(),reprs.end(),sp_repr_compare_position_bool);
> std::vector<Inkscape::XML::Node*> newsel;
> std::vector<const gchar *> old_ids;
> std::vector<const gchar *> new_ids;
> Inkscape::Preferences *prefs = Inkscape::Preferences::get();
> bool relink_clones =
> prefs->getBool("/options/relinkclonesonduplicate/value");
> const bool fork_livepatheffects =
> prefs->getBool("/options/forklpeonduplicate/value", true);
> for(std::vector<Inkscape::XML::Node*>::const_iterator
> i=reprs.begin();i!=reprs.end();++i){
> Inkscape::XML::Node *old_repr = *i;
> Inkscape::XML::Node *parent = old_repr->parent();
> Inkscape::XML::Node *copy = old_repr->duplicate(xml_doc);
> parent->appendChild(copy);
> if (relink_clones) {
> SPObject *old_obj = doc->getObjectByRepr(old_repr);
> SPObject *new_obj = doc->getObjectByRepr(copy);
> add_ids_recursive(old_ids, old_obj);
> add_ids_recursive(new_ids, new_obj);
> }
> if (fork_livepatheffects) {
> SPObject *new_obj = doc->getObjectByRepr(copy);
> SPLPEItem *newLPEObj = dynamic_cast<SPLPEItem *>(new_obj);
> if (newLPEObj) {
> newLPEObj->forkPathEffectsIfNecessary(1);
> }
> }
> * ((ObjectSet*)copy)->moveRelative(x, y);*
> newsel.push_back(copy);
> Inkscape::GC::release(copy);
> }
>
> DocumentUndo::done( selection->desktop()->getDocument() ,
> SP_VERB_DIALOG_ARRAY,
> _("Grid"));
> }
Thanks!
--000000000000915a5a05911c6ab7
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_quote"><br><div dir=3D"ltr">Hi Inkscap=
e devs!<div><br></div><div>I am trying to create a duplicate of the selecte=
d object and move the new copy to a different location.</div><div>Following=
is what I have come up with (browsing around other code), but I am sure I =
am doing something wrong. There is no compilation or run time error but the=
new object does not move although duplicate is created correctly.</div><di=
v>Appreciate your help.</div><div><br></div><blockquote class=3D"gmail_quot=
e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
;padding-left:1ex"><font face=3D"monospace" size=3D"4">void Array::applyPag=
eGrid(Inkscape::Selection *selection)<br></font><font face=3D"monospace" si=
ze=3D"4">{<br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 int =
xq =3D _scalar_grid_horizontal_qty.get_value_as_int();<br></font><font face=
=3D"monospace" size=3D"4">=C2=A0 =C2=A0 double x =3D _scalar_grid_horizonta=
l_amt.getValue("px");<br></font><font face=3D"monospace" size=3D"=
4">=C2=A0 =C2=A0 double y =3D _scalar_grid_vertical.getValue("px"=
);</font><font face=3D"monospace" size=3D"4"><br></font><font face=3D"monos=
pace" size=3D"4"> //selection->moveRelative(x, y);</font><font face=3D"m=
onospace" size=3D"4"><br></font><font face=3D"monospace" size=3D"4"> // Dup=
licate (taken from selection-chemistry.cpp)</font><font face=3D"monospace" =
size=3D"4"><br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 SPD=
ocument *doc =3D selection->document();</font><font face=3D"monospace" s=
ize=3D"4"><br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 if(!=
doc)<br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 return;</font><font face=3D"monospace" size=3D"4"><br></font><font face=
=3D"monospace" size=3D"4">=C2=A0 =C2=A0 Inkscape::XML::Document* xml_doc =
=3D doc->getReprDoc();</font><font face=3D"monospace" size=3D"4"><br></f=
ont><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 std::vector<Inksca=
pe::XML::Node*> reprs(selection->xmlNodes().begin(), selection->xm=
lNodes().end());</font><font face=3D"monospace" size=3D"4"><br></font><font=
face=3D"monospace" size=3D"4"> //selection->clear();</font><font face=
=3D"monospace" size=3D"4"><br></font><font face=3D"monospace" size=3D"4"> s=
ort(reprs.begin(),reprs.end(),sp_repr_compare_position_bool);<br></font><fo=
nt face=3D"monospace" size=3D"4"> std::vector<Inkscape::XML::Node*> n=
ewsel;</font><font face=3D"monospace" size=3D"4"><br></font><font face=3D"m=
onospace" size=3D"4">=C2=A0 =C2=A0 std::vector<const gchar *> old_ids=
;<br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 std::vector&l=
t;const gchar *> new_ids;<br></font><font face=3D"monospace" size=3D"4">=
=C2=A0 =C2=A0 Inkscape::Preferences *prefs =3D Inkscape::Preferences::get()=
;<br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 bool relink_c=
lones =3D prefs->getBool("/options/relinkclonesonduplicate/value&qu=
ot;);<br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 const boo=
l fork_livepatheffects =3D prefs->getBool("/options/forklpeonduplic=
ate/value", true);</font><font face=3D"monospace" size=3D"4"><br></fon=
t><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 for(std::vector<Inks=
cape::XML::Node*>::const_iterator i=3Dreprs.begin();i!=3Dreprs.end();++i=
){<br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 Inkscape::XML::Node *old_repr =3D *i;<br></font><font face=3D"monospace=
" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 Inkscape::XML::Node *parent =3D ol=
d_repr->parent();<br></font><font face=3D"monospace" size=3D"4">=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 Inkscape::XML::Node *copy =3D old_repr->duplicate(x=
ml_doc);</font><font face=3D"monospace" size=3D"4"><br></font><font face=3D=
"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 parent->appendChild(c=
opy);</font><font face=3D"monospace" size=3D"4"><br></font><font face=3D"mo=
nospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (relink_clones) {<br></f=
ont><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 SPObject *old_obj =3D doc->getObjectByRepr(old_repr);<br></font><=
font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 SPObject *new_obj =3D doc->getObjectByRepr(copy);<br></font><font fa=
ce=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 add_i=
ds_recursive(old_ids, old_obj);<br></font><font face=3D"monospace" size=3D"=
4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 add_ids_recursive(new_ids, new=
_obj);<br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 }</font><font face=3D"monospace" size=3D"4"><br></font><font face=3D=
"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (fork_livepatheffects=
) {<br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 SPObject *new_obj =3D doc->getObjectByRepr(copy);<br><=
/font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 SPLPEItem *newLPEObj =3D dynamic_cast<SPLPEItem *>(new_obj=
);<br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 if (newLPEObj) {<br></font><font face=3D"monospace" size=
=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 newLPEObj-&g=
t;forkPathEffectsIfNecessary(1);<br></font><font face=3D"monospace" size=3D=
"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br></font><font face=3D"mon=
ospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 }</font><font face=3D"monosp=
ace" size=3D"4"><br></font><font face=3D"monospace" size=3D"4"><b> ((Objec=
tSet*)copy)->moveRelative(x, y);</b></font><font face=3D"monospace" size=
=3D"4"><br></font><font face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 newsel.push_back(copy);<br></font><font face=3D"monospace" size=3D"4=
">=C2=A0 =C2=A0 =C2=A0 =C2=A0 Inkscape::GC::release(copy);<br></font><font =
face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 }</font><font face=3D"monospace=
" size=3D"4"><br></font><font face=3D"monospace" size=3D"4"><br></font><fon=
t face=3D"monospace" size=3D"4">=C2=A0 =C2=A0 DocumentUndo::done( selection=
->desktop()->getDocument() , SP_VERB_DIALOG_ARRAY,<br></font><font fa=
ce=3D"monospace" size=3D"4">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 _("Grid"));<br></font><fon=
t face=3D"monospace" size=3D"4">}</font></blockquote><div><br></div><div>Th=
anks!</div><div><br></div></div>
</div></div>
--000000000000915a5a05911c6ab7--
--===============0908850192129585082==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
--===============0908850192129585082==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Inkscape-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/inkscape-devel
--===============0908850192129585082==--