Merge branch 'master' of ssh://free-cad.git.sourceforge.net/gitroot/free-cad/free-cad

This commit is contained in:
wmayer 2012-11-16 16:27:02 +01:00
commit 6665383f49
6 changed files with 502 additions and 675 deletions

View File

@ -170,14 +170,21 @@ class Snapper:
self.tracker.off()
if self.extLine:
self.extLine.off()
if self.trackLine:
self.trackLine.off()
point = self.getApparentPoint(screenpos[0],screenpos[1])
# setup a track line if we got a last point
if lastpoint:
if not self.trackLine:
self.trackLine = DraftTrackers.lineTracker()
self.trackLine.p1(lastpoint)
# check if we snapped to something
self.snapInfo = Draft.get3DView().getObjectInfo((screenpos[0],screenpos[1]))
# checking if parallel to one of the edges of the last objects or to a polar direction
if active:
eline = None
point,eline = self.snapToPolar(point,lastpoint)
@ -188,7 +195,11 @@ class Snapper:
# nothing has been snapped, check fro grid snap
if active:
point = self.snapToGrid(point)
return cstr(point)
fp = cstr(point)
if self.trackLine and lastpoint:
self.trackLine.p2(fp)
self.trackLine.on()
return fp
else:
@ -308,10 +319,16 @@ class Snapper:
self.tracker.setCoords(winner[2])
self.tracker.setMarker(self.mk[winner[1]])
self.tracker.on()
# setting the trackline
fp = cstr(winner[2])
if self.trackLine and lastpoint:
self.trackLine.p2(fp)
self.trackLine.on()
# set the cursor
self.setCursor(winner[1])
# return the final point
return cstr(winner[2])
return fp
def getApparentPoint(self,x,y):
"returns a 3D point, projected on the current working plane"
@ -439,15 +456,14 @@ class Snapper:
if self.isEnabled("grid"):
np = self.grid.getClosestNode(point)
if np:
if self.radius != 0:
dv = point.sub(np)
if dv.Length <= self.radius:
if self.tracker:
self.tracker.setCoords(np)
self.tracker.setMarker(self.mk['grid'])
self.tracker.on()
self.setCursor('grid')
return np
dv = point.sub(np)
if (self.radius == 0) or (dv.Length <= self.radius):
if self.tracker:
self.tracker.setCoords(np)
self.tracker.setMarker(self.mk['grid'])
self.tracker.on()
self.setCursor('grid')
return np
return point
def snapToEndpoints(self,shape):
@ -663,6 +679,8 @@ class Snapper:
"finishes snapping"
if self.tracker:
self.tracker.off()
if self.trackLine:
self.trackLine.off()
if self.extLine:
self.extLine.off()
if self.radiusTracker:
@ -777,13 +795,6 @@ class Snapper:
self.ui = FreeCADGui.draftToolBar
self.view = Draft.get3DView()
# setting a track line if we got an existing point
if last:
if not self.trackLine:
self.trackLine = DraftTrackers.lineTracker()
self.trackLine.p1(last)
self.trackLine.on()
def move(event_cb):
event = event_cb.getEvent()
mousepos = event.getPosition()
@ -792,8 +803,6 @@ class Snapper:
self.pt = FreeCADGui.Snapper.snap(mousepos,lastpoint=last,active=ctrl,constrain=shift)
if hasattr(FreeCAD,"DraftWorkingPlane"):
self.ui.displayPoint(self.pt,last,plane=FreeCAD.DraftWorkingPlane,mask=FreeCADGui.Snapper.affinity)
if self.trackLine:
self.trackLine.p2(self.pt)
if movecallback:
movecallback(self.pt)
@ -816,8 +825,6 @@ class Snapper:
obj = FreeCADGui.Snapper.lastSnappedObject
FreeCADGui.Snapper.off()
self.ui.offUi()
if self.trackLine:
self.trackLine.off()
if callback:
if len(inspect.getargspec(callback).args) > 2:
callback(self.pt,obj)
@ -830,8 +837,6 @@ class Snapper:
self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove)
FreeCADGui.Snapper.off()
self.ui.offUi()
if self.trackLine:
self.trackLine.off()
if callback:
callback(None)

File diff suppressed because it is too large Load Diff

View File

@ -401,32 +401,72 @@ class ghostTracker(Tracker):
self.trans = coin.SoTransform()
self.trans.translation.setValue([0,0,0])
self.children = [self.trans]
self.ivsep = coin.SoSeparator()
try:
if isinstance(sel,Part.Shape):
ivin = coin.SoInput()
ivin.setBuffer(sel.writeInventor())
ivob = coin.SoDB.readAll(ivin)
self.ivsep.addChild(ivob.getChildren()[1])
else:
if not isinstance(sel,list):
sel = [sel]
for obj in sel:
self.ivsep.addChild(obj.ViewObject.RootNode.copy())
except:
print "draft: Couldn't create ghost"
self.children.append(self.ivsep)
rootsep = coin.SoSeparator()
if not isinstance(sel,list):
sel = [sel]
for obj in sel:
rootsep.addChild(self.getNode(obj))
self.children.append(rootsep)
Tracker.__init__(self,children=self.children)
def update(self,obj):
"recreates the ghost from a new object"
obj.ViewObject.show()
self.finalize()
self.ivsep = coin.SoSeparator()
self.ivsep.addChild(obj.ViewObject.RootNode.copy())
Tracker.__init__(self,children=[self.ivsep])
sep = getNode(obj)
Tracker.__init__(self,children=[self.sep])
self.on()
obj.ViewObject.hide()
def move(self,delta):
"moves the ghost to a given position, relative from its start position"
self.trans.translation.setValue([delta.x,delta.y,delta.z])
def rotate(self,axis,angle):
"rotates the ghost of a given angle"
self.trans.rotation.setValue(coin.SbVec3f(DraftVecUtils.tup(axis)),angle)
def center(self,point):
"sets the rotation/scale center of the ghost"
self.trans.center.setValue(point.x,point.y,point.z)
def scale(self,delta):
"scales the ghost by the given factor"
self.trans.scaleFactor.setValue([delta.x,delta.y,delta.z])
def getNode(self,obj):
"returns a coin node representing the given object"
if isinstance(obj,Part.Shape):
return self.getNodeLight(obj)
elif obj.isDerivedFrom("Part::Feature"):
return self.getNodeFull(obj)
else:
return self.getNodeFull(obj)
def getNode(self,obj):
"gets a coin node which is a full copy of the current representation"
sep = coin.SoSeparator()
try:
sep.addChild(obj.ViewObject.RootNode.copy())
except:
pass
return sep
def getNodeLight(self,shape):
"extract a lighter version directly from a shape"
# very error-prone, will be obsoleted ASAP
sep = coin.SoSeparator()
try:
inputstr = coin.SoInput()
inputstr.setBuffer(shape.writeInventor())
coinobj = coin.SoDB.readAll(inputstr)
# only add wireframe or full node?
sep.addChild(coinobj.getChildren()[1])
# sep.addChild(coinobj)
except:
pass
return sep
class editTracker(Tracker):
"A node edit tracker"
def __init__(self,pos=Vector(0,0,0),name="None",idx=0,objcol=None):

View File

@ -93,12 +93,6 @@ TaskLinearPatternParameters::TaskLinearPatternParameters(TaskMultiTransformParam
void TaskLinearPatternParameters::setupUI()
{
connect(ui->buttonX, SIGNAL(pressed()),
this, SLOT(onButtonX()));
connect(ui->buttonY, SIGNAL(pressed()),
this, SLOT(onButtonY()));
connect(ui->buttonZ, SIGNAL(pressed()),
this, SLOT(onButtonZ()));
connect(ui->checkReverse, SIGNAL(toggled(bool)),
this, SLOT(onCheckReverse(bool)));
connect(ui->spinLength, SIGNAL(valueChanged(double)),
@ -125,9 +119,9 @@ void TaskLinearPatternParameters::setupUI()
}
// ---------------------
ui->buttonX->setEnabled(true);
ui->buttonY->setEnabled(true);
ui->buttonZ->setEnabled(true);
//ui->buttonX->setEnabled(true);
//ui->buttonY->setEnabled(true);
//ui->buttonZ->setEnabled(true);
ui->checkReverse->setEnabled(true);
ui->spinLength->setEnabled(true);
ui->spinOccurrences->setEnabled(true);
@ -154,20 +148,20 @@ void TaskLinearPatternParameters::updateUI()
ui->buttonReference->setChecked(referenceSelectionMode);
if (!stdDirection.empty())
{
ui->buttonX->setAutoExclusive(true);
ui->buttonY->setAutoExclusive(true);
ui->buttonZ->setAutoExclusive(true);
ui->buttonX->setChecked(stdDirection == "X");
ui->buttonY->setChecked(stdDirection == "Y");
ui->buttonZ->setChecked(stdDirection == "Z");
//ui->buttonX->setAutoExclusive(true);
//ui->buttonY->setAutoExclusive(true);
//ui->buttonZ->setAutoExclusive(true);
//ui->buttonX->setChecked(stdDirection == "X");
//ui->buttonY->setChecked(stdDirection == "Y");
//ui->buttonZ->setChecked(stdDirection == "Z");
ui->lineReference->setText(tr(""));
} else if (directionFeature != NULL && !directions.empty()) {
ui->buttonX->setAutoExclusive(false);
ui->buttonY->setAutoExclusive(false);
ui->buttonZ->setAutoExclusive(false);
ui->buttonX->setChecked(false);
ui->buttonY->setChecked(false);
ui->buttonZ->setChecked(false);
//ui->buttonX->setAutoExclusive(false);
//ui->buttonY->setAutoExclusive(false);
//ui->buttonZ->setAutoExclusive(false);
//ui->buttonX->setChecked(false);
//ui->buttonY->setChecked(false);
//ui->buttonZ->setChecked(false);
ui->lineReference->setText(QString::fromAscii(directions.front().c_str()));
} else {
// Error message?
@ -220,17 +214,17 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges
}
}
void TaskLinearPatternParameters::onButtonX() {
onStdDirection("X");
}
void TaskLinearPatternParameters::onButtonY() {
onStdDirection("Y");
}
void TaskLinearPatternParameters::onButtonZ() {
onStdDirection("Z");
}
//void TaskLinearPatternParameters::onButtonX() {
// onStdDirection("X");
//}
//
//void TaskLinearPatternParameters::onButtonY() {
// onStdDirection("Y");
//}
//
//void TaskLinearPatternParameters::onButtonZ() {
// onStdDirection("Z");
//}
void TaskLinearPatternParameters::onCheckReverse(const bool on) {
if (blockUpdate)
@ -321,12 +315,12 @@ void TaskLinearPatternParameters::onUpdateView(bool on)
const std::string TaskLinearPatternParameters::getStdDirection(void) const
{
if (ui->buttonX->isChecked())
return std::string("X");
else if (ui->buttonY->isChecked())
return std::string("Y");
else if (ui->buttonZ->isChecked())
return std::string("Z");
//if (ui->buttonX->isChecked())
// return std::string("X");
//else if (ui->buttonY->isChecked())
// return std::string("Y");
//else if (ui->buttonZ->isChecked())
// return std::string("Z");
return std::string("");
}

View File

@ -64,9 +64,9 @@ public:
private Q_SLOTS:
void onStdDirection(const std::string& dir);
void onButtonX();
void onButtonY();
void onButtonZ();
//void onButtonX();
//void onButtonY();
//void onButtonZ();
void onCheckReverse(const bool on);
void onLength(const double l);
void onOccurrences(const int n);

View File

@ -28,34 +28,6 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QRadioButton" name="buttonX">
<property name="text">
<string>X</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="buttonY">
<property name="text">
<string>Y</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="buttonZ">
<property name="text">
<string>Z</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
@ -97,6 +69,9 @@
<property name="maximum">
<double>999999.000000000000000</double>
</property>
<property name="singleStep">
<double>5.000000000000000</double>
</property>
<property name="value">
<double>100.000000000000000</double>
</property>