PartDesign changes

* Mostly for supporting in-place editing

* Add new SubShapeBinder that support cross coordinate system,
  external, and sub-object binding
This commit is contained in:
Zheng, Lei
2019-07-13 18:13:21 +08:00
committed by wmayer
parent 11321bb996
commit cd2b7e297c
55 changed files with 1944 additions and 755 deletions

View File

@@ -182,25 +182,9 @@ void TaskMirroredParameters::updateUI()
void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
{
if (msg.Type == Gui::SelectionChanges::AddSelection) {
if (selectionMode!=none && msg.Type == Gui::SelectionChanges::AddSelection) {
if (originalSelected(msg)) {
Gui::SelectionObject selObj(msg);
App::DocumentObject* obj = selObj.getObject();
Q_ASSERT(obj);
QString label = QString::fromUtf8(obj->Label.getValue());
QString objectName = QString::fromLatin1(msg.pObjectName);
if (selectionMode == addFeature) {
QListWidgetItem* item = new QListWidgetItem();
item->setText(label);
item->setData(Qt::UserRole, objectName);
ui->listWidgetFeatures->addItem(item);
}
else {
removeItemFromListWidget(ui->listWidgetFeatures, label);
}
exitSelectionMode();
} else {
std::vector<std::string> mirrorPlanes;
@@ -211,6 +195,7 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg
return;
if ( selectionMode == reference || selObj->isDerivedFrom ( App::Plane::getClassTypeId () ) ) {
setupTransaction();
pcMirrored->MirrorPlane.setValue(selObj, mirrorPlanes);
recomputeFeature();
updateUI();
@@ -230,6 +215,7 @@ void TaskMirroredParameters::onPlaneChanged(int /*num*/)
{
if (blockUpdate)
return;
setupTransaction();
PartDesign::Mirrored* pcMirrored = static_cast<PartDesign::Mirrored*>(getObject());
try{
if(planeLinks.getCurrentLink().getValue() == 0){
@@ -254,6 +240,7 @@ void TaskMirroredParameters::onUpdateView(bool on)
{
blockUpdate = !on;
if (on) {
setupTransaction();
// Do the same like in TaskDlgMirroredParameters::accept() but without doCommand
PartDesign::Mirrored* pcMirrored = static_cast<PartDesign::Mirrored*>(getObject());
std::vector<std::string> mirrorPlanes;
@@ -271,6 +258,7 @@ void TaskMirroredParameters::onFeatureDeleted(void)
PartDesign::Transformed* pcTransformed = getObject();
std::vector<App::DocumentObject*> originals = pcTransformed->Originals.getValues();
originals.erase(originals.begin() + ui->listWidgetFeatures->currentRow());
setupTransaction();
pcTransformed->Originals.setValues(originals);
ui->listWidgetFeatures->model()->removeRow(ui->listWidgetFeatures->currentRow());
recomputeFeature();
@@ -331,15 +319,13 @@ TaskDlgMirroredParameters::TaskDlgMirroredParameters(ViewProviderMirrored *Mirro
bool TaskDlgMirroredParameters::accept()
{
std::string name = vp->getObject()->getNameInDocument();
TaskMirroredParameters* mirrorParameter = static_cast<TaskMirroredParameters*>(parameter);
std::vector<std::string> mirrorPlanes;
App::DocumentObject* obj;
mirrorParameter->getMirrorPlane(obj, mirrorPlanes);
std::string mirrorPlane = buildLinkSingleSubPythonStr(obj, mirrorPlanes);
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.MirrorPlane = %s", name.c_str(), mirrorPlane.c_str());
FCMD_OBJ_CMD(vp->getObject(),"MirrorPlane = " << mirrorPlane);
return TaskDlgTransformedParameters::accept();
}