bool CreateObject (LONG &rlONr, ULONG lIdent, long sta[], long mi[], long lgi, double gxi[], double gyi[]) { HPROJECT hPr = DEX_GetDataSourceHandle(); _ASSERTE(NULL != hPr); if (sta[0] == K_OBJEKT) return r_flag ? CreateKomplexObject (hPr, rlONr, lIdent, mi) : true; // Objekt erzeugen oder wiederfinden, Geometrie schreiben long lONr = 0L; char *pUIdent = NULL; TX_ASSERT(!(g_fAbglGeom && g_fAbglAttr)); // nie gleichzeitig Attribs und Geometrie abgleichen! if (!m_flag || g_fAbglOks || g_fAbglGeom || g_fAbglAttr || 0 != g_ulOksToAttr) { // versuchen über GUID zu finden if ('\0' != guid[0]) { OBJECTGUID OUID; INITSTRUCT (OUID, OBJECTGUID); if (SUCCEEDED(CLSIDFromString (WideString(guid), &OUID.guid))) { if (SUCCEEDED(DEX_FindObjectFromGuid (OUID))) lONr = OUID.lONr; } } // versuchen, über Unique Ident zu finden if (0 == lONr && RetrieveText (g_ulUniqueId, mi, &pUIdent, false, !g_fImportObj) > 0) lONr = FindObject (g_ulUniqueId, pUIdent); } DELETE_OBJ(pUIdent); TEXTGEOMETRIEEX TG; OBJGEOMETRIE *pOG = (OBJGEOMETRIE *)&TG; ULONG lIgnore = 0L; int iFlags = OGForceGeometry|OGNoMemoryObject|OGConverted; bool fRet = true; if (0 == lONr) { // nicht wiedergefunden // Objekt neu erzeugen iFlags |= OGNewObject; fRet = ImportGeometry (hPr, pOG, sta, lIdent, gxi, gyi, iFlags, rlONr, lIgnore); } else { // Abgleich durchführen if (g_fAbglGeom) { // Geometrie abgleichen iFlags |= OGModObject; fRet = ImportGeometry (hPr, pOG, sta, lIdent, gxi, gyi, iFlags, rlONr, lIgnore); } else { // bisherigen Oks wegschreiben if (0 != g_ulOksToAttr) { long lOldIdent = DEX_GetObjIdent(lONr); char cbOKS[MAX_OKS_LENX+1]; if (S_OK == ClassFromIdentX (lOldIdent, cbOKS)) WriteTextMerkmal (lONr, (ULONG)g_ulOksToAttr, cbOKS, strlen(cbOKS)); } // Oks abgleichen if (g_fAbglOks) { if (0 == g_ulOksFromAttr) { // Oks vom EingabeOks nehmen MODOBJIDENT MOI; INITSTRUCT(MOI, MODOBJIDENT); MOI.lONr = lONr; MOI.lNewIdent = lIdent; MOI.iMode = GetMOIMode (sta); DEX_ModObjectIdent(MOI); } else { // Oks aus EingabeAttribut verwenden char *pOks = NULL; if (RetrieveText (g_ulOksFromAttr, mi, &pOks, false, !g_fImportObj) > 0) { // Ident über Oks besorgen long lNewIdent = 0; HRESULT hr = IdentFromClassX (hPr, pOks, (ULONG *)&lNewIdent); if (S_FALSE == hr) { ErrCode RC = IdentIsDefined(lNewIdent); if (RC != EC_OKAY && !DEX_isIdentUsedEx(hPr, lNewIdent)) // neu erzeugen, wenn keine Objekte mit diesem Ident existieren hr = IdentFromClassX (hPr, pOks, (ULONG *)&lNewIdent, true); } if (0 != lNewIdent) { // jetzt Ident modifizieren MODOBJIDENT MOI; INITSTRUCT(MOI, MODOBJIDENT); MOI.lONr = lONr; MOI.lNewIdent = lNewIdent; MOI.iMode = GetMOIMode (sta); DEX_ModObjectIdent(MOI); lIdent = lNewIdent; } } DELETE_OBJ(pOks); } } // evtl. doch noch neues Objekt erzeugen if (g_fImportObj) { iFlags |= OGNewObject; fRet = ImportGeometry (hPr, pOG, sta, lIdent, gxi, gyi, iFlags, rlONr, lIgnore); } else rlONr = lONr; } } if (!fRet) { if (0 == pOG -> lONr) { g_lNotImported++; return false; } else { if (pOG -> iFlags & OGObjectHasGeometryErrors) g_lWithErrors++; // mit Fehlern importiert } } CountObjects (sta[1]); // Objekte zählen // Merkmale erzeugen if (m_flag || g_fAbglAttr) return CreateFeatures (rlONr, mi, lIdent, lIgnore); return true; }
void QCSXCAD::BuildToolBar() { QToolBar *mainTB = addToolBar(tr("General")); mainTB->setObjectName("General_ToolBar"); QSize TBIconSize(16,16); mainTB->setIconSize(TBIconSize); if (QCSX_Settings.GetEdit()) mainTB->addAction(QIcon(":/images/filenew.png"),tr("New"),this,SLOT(New())); if (QCSX_Settings.GetEdit()) mainTB->addAction(QIcon(":/images/down.png"),tr("Import"),this,SLOT(ImportGeometry())); mainTB->addAction(QIcon(":/images/up.png"),tr("Export"),this,SLOT(ExportGeometry())); QToolBar *ItemTB = addToolBar(tr("Item View")); ItemTB->setIconSize(TBIconSize); ItemTB->setObjectName("Item_View_ToolBar"); ItemTB->addAction(tr("CollapseAll"),CSTree,SLOT(collapseAll())); ItemTB->addAction(tr("ExpandAll"),CSTree,SLOT(expandAll())); ItemTB->addAction(QIcon(":/images/bulb.png"),tr("ShowAll"),this,SLOT(ShowAll())); ItemTB->addAction(QIcon(":/images/bulb_off.png"),tr("HideAll"),this,SLOT(HideAll())); QToolBar *newObjct = NULL; QAction* newAct = NULL; if (QCSX_Settings.GetEdit()) { newObjct = addToolBar(tr("add new Primitive")); newObjct->setObjectName("New_Primitive_ToolBar"); newAct = newObjct->addAction(tr("Box"),this,SLOT(NewBox())); newAct->setToolTip(tr("add new Box")); newAct = newObjct->addAction(tr("MultiBox"),this,SLOT(NewMultiBox())); newAct->setToolTip(tr("add new Multi-Box")); newAct = newObjct->addAction(tr("Sphere"),this,SLOT(NewSphere())); newAct->setToolTip(tr("add new Sphere")); newAct = newObjct->addAction(tr("Cylinder"),this,SLOT(NewCylinder())); newAct->setToolTip(tr("add new Cylinder")); newAct = newObjct->addAction(tr("Polygon"),this,SLOT(NewPolygon())); newAct->setToolTip(tr("add new Polygon")); newAct = newObjct->addAction(tr("User Defined"),this,SLOT(NewUserDefined())); newAct->setToolTip(tr("add new User Definied Primitive")); newObjct = addToolBar(tr("add new Property")); newObjct->setObjectName("New_Property_ToolBar"); newAct = newObjct->addAction(tr("Material"),this,SLOT(NewMaterial())); newAct->setToolTip(tr("add new Material-Property")); newAct = newObjct->addAction(tr("Metal"),this,SLOT(NewMetal())); newAct->setToolTip(tr("add new Metal-Property")); newAct = newObjct->addAction(tr("Excitation"),this,SLOT(NewExcitation())); newAct->setToolTip(tr("add new Excitation-Property")); newAct = newObjct->addAction(tr("ProbeBox"),this,SLOT(NewChargeBox())); newAct->setToolTip(tr("add new Probe-Box-Property")); newAct = newObjct->addAction(tr("ResBox"),this,SLOT(NewResBox())); newAct->setToolTip(tr("add new Res-Box-Property")); newAct = newObjct->addAction(tr("DumpBox"),this,SLOT(NewDumpBox())); newAct->setToolTip(tr("add new Dump-Box-Property")); } newObjct = addToolBar(tr("Zoom")); newObjct->setIconSize(TBIconSize); newObjct->setObjectName("Zoom_ToolBar"); newAct = newObjct->addAction(QIcon(":/images/viewmagfit.png"),tr("Zoom fit"),this,SLOT(BestView())); newAct->setToolTip("Zoom to best fit all objects"); viewPlane[0] = newObjct->addAction(GridEditor->GetNormName(0),this,SLOT(setYZ())); viewPlane[0]->setToolTip(tr("Switch to y-z-plane view (x-normal)")); viewPlane[1] = newObjct->addAction(GridEditor->GetNormName(1),this,SLOT(setZX())); viewPlane[1]->setToolTip(tr("Switch to z-x-plane view (y-normal)")); viewPlane[2] = newObjct->addAction(GridEditor->GetNormName(2),this,SLOT(setXY())); viewPlane[2]->setToolTip(tr("Switch to x-y-plane view (z-normal)")); addToolBarBreak(); QActionGroup* ActViewGrp = new QActionGroup(this); newAct = newObjct->addAction(tr("2D"),this,SLOT(View2D())); newAct->setToolTip(tr("Switch to 2D view mode")); ActViewGrp->addAction(newAct); newAct->setCheckable(true); newAct = newObjct->addAction(tr("3D"),this,SLOT(View3D())); newAct->setToolTip(tr("Switch to 3D view mode")); ActViewGrp->addAction(newAct); newAct->setCheckable(true); m_PPview = newObjct->addAction(tr("PP")); m_PPview->setToolTip(tr("Toggle parallel projection view mode")); QObject::connect(m_PPview,SIGNAL(toggled(bool)),this,SLOT(SetParallelProjection(bool))); m_PPview->setCheckable(true); if (QCSX_Settings.GetEdit()) addToolBar(GridEditor->BuildToolbar()); }