From efb5cbe484eec88f7000a47704318688e616406a Mon Sep 17 00:00:00 2001 From: Ivan Pelipenko Date: Sun, 16 Aug 2020 16:36:46 +0300 Subject: [PATCH 1/7] blockview migrate to "deploy*" --- qad/blockview/blockeditor/CMakeLists.txt | 26 +++++++++-- qad/blockview/blockeditor/icons/blockview.png | Bin 0 -> 4315 bytes .../blockeditor/resource_win_icon.rc | 43 ------------------ 3 files changed, 23 insertions(+), 46 deletions(-) create mode 100644 qad/blockview/blockeditor/icons/blockview.png delete mode 100644 qad/blockview/blockeditor/resource_win_icon.rc diff --git a/qad/blockview/blockeditor/CMakeLists.txt b/qad/blockview/blockeditor/CMakeLists.txt index b003eff..d69d9d8 100644 --- a/qad/blockview/blockeditor/CMakeLists.txt +++ b/qad/blockview/blockeditor/CMakeLists.txt @@ -1,8 +1,26 @@ project(blockeditor) +import_version(${PROJECT_NAME} QAD) find_qt(${QtVersions} Core Gui Widgets) +if (Qt5_FOUND) + import_version(${PROJECT_NAME}5 ${PROJECT_NAME}) + import_deploy_properties(${PROJECT_NAME}5 ${PROJECT_NAME}) +endif() +set_deploy_property(${PROJECT_NAME} + LABEL ${PROJECT_NAME} + FULLNAME "${_QAD_DOMAIN}.${PROJECT_NAME}" + COMPANY ${_QAD_COMPANY} + INFO "Editor for BlockView Blocks") +if(APPLE) + #set_deploy_property(${PROJECT_NAME} ICON "icons/blockview.icns") +elseif(WIN32) + set_deploy_property(${PROJECT_NAME} ICON "icons/blockview.ico") +else() + set_deploy_property(${PROJECT_NAME} ICON "icons/blockview.png") +endif() +make_rc(${PROJECT_NAME} out_RC) qt_sources(SRC) -qt_wrap(${SRC} CPPS out_CPP QMS out_QM) -qt_add_executable(${PROJECT_NAME} WIN32 out_CPP) +qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM) +qt_add_executable(${PROJECT_NAME} WIN32 out_CPP ${out_RC}) qt_target_link_libraries(${PROJECT_NAME} qad_utils qad_widgets qad_blockview) message(STATUS "Building ${PROJECT_NAME}") if(LIB) @@ -18,5 +36,7 @@ if(LIB) #message(STATUS "Install ${PROJECT_NAME} to system \"${CMAKE_INSTALL_PREFIX}\"") else() qt_install(TARGETS ${PROJECT_NAME} DESTINATION bin) - #message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") +endif() +if (Qt5_FOUND) + deploy_target(${PROJECT_NAME}5 VERBOSE DEPLOY_DIR ${CMAKE_CURRENT_BINARY_DIR} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/../release) endif() diff --git a/qad/blockview/blockeditor/icons/blockview.png b/qad/blockview/blockeditor/icons/blockview.png new file mode 100644 index 0000000000000000000000000000000000000000..44f65d736d20d5c17084e58066d502db6ccb0709 GIT binary patch literal 4315 zcmV<15G3!3P)l43hu=5NJt6 zK~#9!?OjdCZB-e5*8c9`4jSA+0|yQgq!bz$G-!~h(7=I^ffouKGzc;rWRysRs8B>i zSd?HTC?q5#Box%3z(JHz1EIn}LZuQ0LPAm(?pg2CV83gv_kH);=Vzb$efOwmeQfsG z`~24&}g$}9EyPxRV{VZe~mc=-TQyLeCplnmw!=Jt5J;5XtZ?T8PyRNZs$^og6*!}kbq?boHz|g$(Wyx zw@WbK29Uvenf0{)Vac3RsYBF+-9`l8N`Jd}T9sK3GdaqY{RIlFCA0zWwP6NJZwYCywL2lq<4+4g2LW|wktF0yoD8B#}qySbmE9I9G zO^j5!o1{a5H}6?Wz%UHJFaSeR$yXBKZDhI3DVW8Es+p;moxJ^LB*Gv2@7c`+6>~Eb z)02_`NG)ag^Z;h+oCoy^+22y)!FeHIms*ujzq54-?dRtiwKN~sh|?lqBu~Dw`Whf%em1T z)P2X{H7i>*ZufL$qN4`D#PR#}qAQr}Np=9b{)V~N8?p-c!x9Z}HoNSrB(s7m=3=De z1NB_z_Y}g+-f2O-{p1D1hxq|CdQ36Eksz(K%T)S%WEE{G zpHZ^nb!KS^0WqWp2>~1dR+6oG;Rflqgt==4jG1eiw(}5aKCEgls>5nT=rP3sJTXaD zKny9IF-a3Lb|pX<(j=OQM`#GZDDh$d7Xz|r-N%s=HDgB2jlEjXlOP<>Y1mg4NIdSabZ-es=0(Jm>LUyrr)>c+H0xWK(V2z-B2C;Vh!*$K`)hS zq@5uYMXCMU=i>E-b2fQfpaGLqvITPnKoZE&yy$VBn5h|m0Zg7RuYrcDJCE!Mps8B1 z_<#bEonR@_t6gwA{w-!RQ1{8q?aJi|*m z&9Q|w7fICEUja2_)V+~>+S#!XH8J{|2&ll9il~~TTE7XA5IK#6atKXx z2^2O&Lf9h&tx*u@DxonxZ;?>TdMohJFBqS&RU}l+;9?V`Z%(Ne;^4{zt^CkWutInm zB)*xgQ3C6=8y{1AP+CHOiC4&1g(N!2;RpBl==z16=2W+#u#6w z1dyf`g;ooEnLb=%ek6hHYQWljp;La~ekN#I7Pd)}Ej?QeV5kFS z3pV=Tdk4&I`$GBzti;!Tnq6}ygQ4uqPMpt~ydZ+_5-|sVTB-rmIpA0a@}|hvdSZ=; zTWCO?8wm3NX^%XBIghO*=uNxHGz<+|!A&NqGil?cpIgmkuPw&4Ib73*2>)9q^8yxl zOdT_&FZr%CVN69@r~=H{eMagKFagj4ZzG~ginuB&XSAjk6caZ#mdz4ySyOpxYoP0d zVDts>lk}LWf*PmX2VX-_vvFZ>T)up{b|ujE=NJ+gC**@h6u=wUQj@kG_|*~H&c#G< z7C^}(MOvTE&S*Xe-OYSI|RXd+gFlW4=!-RIcKnRLSqOTkbHQJ%>+~pL7WF>%dl$!E;_RXCMahNO27~_Ai0){ z;6$ZEK1ukE%*hKl$M5};=rcu>r@XPH3056cxPNMvSy=gVrRZNXgL9rH4`>< zpxTsW8zg(vht)qcfv~k5TOzR`XTQm8Apw$Q?AgZvR>0eh8R+-}Oq#JcDPz>^nx#w4 z%z6dz6GXpN7MLIbsaNkBWt(HhS`u15;>s9^^Hj+Rm)%6AUzQZ(D5AZfR1@THSg0~Y zfRq~Dl;;>5KBUJe7iK6W{io|oF+ zx+4Lt?3`2+Mql8&F2^sp$Kl`3@N80sL1bF9W##2+7%wyMqV& z;SrLv9e)S}{13o2M_A5gd{{yMkM3X6{i8={&Sv~b0e@ciKhXWZ0bDr3vw7?j1-%!* zT>w@9{;22vsbpLLaNiN$(;i)Q6ASP%4K~b;Np!J57q?TtNW(_Tw3$GX8^no;3fcfZu-zU@W&0h zVnT9v?Tm%SRL_q*=@J~i?AeyaN!02t8mVR*`=HLQp0_Ij?=dFju??@i1mGL`_=_7a z#Dag)9#;}lGQjKO0hJuLrTLAiEf7@~5{X0{FadXKjQ>lu@tejIYN|d8;MTPlV!P*l%4S{4NdRD+=NY7;HL+)L@+r8Gy)AG+yvhLE8n?s zfuHTi?EwCSu`+yN&T4G?RUc6RpH_+9b-bqU#hf#)w!VUINHD+&Tl=3twEt*~@q1D} zEBQe~wqD?8^SBFbEZE7xDCLk6o*BL*t1%4IJd`zJ*df9H+o_kS16+CLMqLz zLUDlBKg#5|64qS;fsUxMkIsBy765Ud2;!RlZFOac=X?|4qr4sxFH9MzP3pyPFC}kB-HATS(C~&!$9vU+gkIi3C z8`hbqE!QWy2EaE>Rp4a+_XBwDEQ)cbssYgqId>YtWjGgzpw$wx>qnfE->d=W)y98C z%QA1NU;Flky4c|pkSTRFTL2+OX(lF0zB}L30`}jtHZ<*Pz?~}fC5(PrrG78pct9p7 zBd$^I!o?l|bJ5UDgcSd}+8~5viRJh20{EC7zo2&hg{w6maH<;MVsXMdNvx4}`cPC* z<_b)d6eNG54Ir{)tS-B#@h_S$y#?Uc7-s=*pDQiAeF;GJ1eEshy1ad};~9BEM45z{ zm39}t_W#JP{U1yz{^Pn`)fur<8H@`vb&F^%_Ad_DkpXj#Z3e8(j)ka+-Y)>-GHoa4 zhPnBT->d1l^o}DSBTuD2nje>xNi#EO=Pme~{JYsS~~hzz1}q>G3N; z#KE+uI|k~FaLgoHV&iesqE$lYkO5f9y82e#Ac_=36Rsat#je=k%P@Ea6 zWd>iC=tV)!*3V?h_4D*IYAtHJ`;nhlvvjA{e{KNqV=crzvTHVcr3tu2w`D%SuJJrc z!Zd*P@@(8vosz8Q%opr%KQxx<4}l9^T`<4;3F!7WnBF%6g^b zkere1YrvX(!B;?2ErV}4RyslT48}Ih2hM>+uWPXPGczkchc9c>=$ zOa^_~*@E8RDlh z6*4kbH2Y3;R2}yQ@O#slvfq4w%@w{1;5yx3QeW|sI_zr?n}9-srzLomNU$8Y!JW*hK7dzTCPJ2-n?EC6t^_z=YW{I)`hLwjTKU=j>*a$bU?r>aU(;IC6|H%I&t4g(A6>TG2%vS`5&Ve{8127Y`M#`| z=X}87l%qvli(t_PLC;p30^KYDH2VTLCq&pXMAH8fm3VfYafee2${8G#fFWo=YHm>w zXRo9~fXN-qbA(LR_n}$zXk1$&o#|o+heLp5&4gQ%R1HaKx|-4H6{^Q#78#+-aP7p- zx&?mHncNq1s3vG!;Ah;|HbFxI=1FMBzM2}BKuJjMKmIxJCAIy#kASj7K7nD{tLZwN zduzJ3Mxu7Yuwj8u`mY!hQ;`0IBxyYVZX=-faOyvS=D5I5?eBLtR}@&?;yvbnwYvY3 zYW|H$W3fv@0Y9B#f#6_D5eGa@6{F*NLC0|%$8j9TaU54^{2z)$Ct@eV?qdJ|002ov JPDHLkV1mY_2gd*a literal 0 HcmV?d00001 diff --git a/qad/blockview/blockeditor/resource_win_icon.rc b/qad/blockview/blockeditor/resource_win_icon.rc deleted file mode 100644 index 09b2a10..0000000 --- a/qad/blockview/blockeditor/resource_win_icon.rc +++ /dev/null @@ -1,43 +0,0 @@ -# if defined(UNDER_CE) -# include -# else -# include -# endif - -1 ICON icons/blockview.ico - -VS_VERSION_INFO VERSIONINFO -FILEVERSION 1,0,0,0 -PRODUCTVERSION 1,0,0,0 -FILEFLAGSMASK 0x3fL -#ifdef _DEBUG -FILEFLAGS 0x9L -#else -FILEFLAGS 0x8L -#endif -FILEOS 0x40004L -FILETYPE 0x2L -FILESUBTYPE 0x0L -BEGIN -BLOCK "StringFileInfo" -BEGIN -BLOCK "040904b0" -BEGIN -VALUE "Comments", "\0" -VALUE "CompanyName", "BMSTU SM5\0" -VALUE "FileDescription", "Block Editor\0" -VALUE "FileVersion", "1,0,0,0\0" -VALUE "InternalName", "Block Editor\0" -VALUE "LegalTrademarks", "\0" -VALUE "OriginalFilename", "blockeditor.exe\0" -VALUE "PrivateBuild", "1\0" -VALUE "ProductName", "Block Editor\0" -VALUE "ProductVersion", "1, 0, 0, 0\0" -VALUE "SpecialBuild", "\0" -END -END -BLOCK "VarFileInfo" -BEGIN -VALUE "Translation", 0x409, 1200 -END -END From c49454bb034a94ab0179c4836825960868d7ae9a Mon Sep 17 00:00:00 2001 From: Ivan Pelipenko Date: Mon, 17 Aug 2020 00:32:59 +0300 Subject: [PATCH 2/7] another version of tracing across buses --- qad/blockview/blockview.cpp | 5 +- qad/blockview/blockviewwavetrace.cpp | 95 ++++++++++++---------------- qad/blockview/blockviewwavetrace.h | 12 +++- 3 files changed, 55 insertions(+), 57 deletions(-) diff --git a/qad/blockview/blockview.cpp b/qad/blockview/blockview.cpp index 418c5f7..db628a0 100644 --- a/qad/blockview/blockview.cpp +++ b/qad/blockview/blockview.cpp @@ -1264,14 +1264,17 @@ void BlockView::trace(QPointF scene_pos_from, QPointF scene_pos_to, BlockBusItem double signx = (p1.x() >= p0.x() ? 1. : -1.), signy = (p1.y() >= p0.y() ? 1. : -1.); int steps(0); if ((dx + dy) < grid_step) continue; + BlockViewWavetrace::CellState cs = BlockViewWavetrace::Blocked; if (dx >= dy) { // by x sx = grid_step; sy = sx * dy / dx; steps = qRound(dx / grid_step); + cs = BlockViewWavetrace::HorizontalBus; } else { sy = grid_step; sx = sy * dx / dy; steps = qRound(dy / grid_step); + cs = BlockViewWavetrace::VerticalBus; } sx *= signx; sy *= signy; @@ -1279,7 +1282,7 @@ void BlockView::trace(QPointF scene_pos_from, QPointF scene_pos_to, BlockBusItem for (int j = 0; j < steps; ++j) { QPoint tp = quantize(cp, grid_step).toPoint() / grid_step + dp; if (tp != qpt) - wavetrace.fill(tp, BlockViewWavetrace::Jump); + wavetrace.fill(tp, cs); //qDebug() << " set" << cp; cp += QPointF(sx, sy); } diff --git a/qad/blockview/blockviewwavetrace.cpp b/qad/blockview/blockviewwavetrace.cpp index 72b597c..79be7fd 100644 --- a/qad/blockview/blockviewwavetrace.cpp +++ b/qad/blockview/blockviewwavetrace.cpp @@ -1,5 +1,4 @@ #include "blockviewwavetrace.h" -#include BlockViewWavetrace::BlockViewWavetrace(int width, int height) { @@ -17,14 +16,13 @@ void BlockViewWavetrace::resize(int width, int height) { for (int i = 0; i < wid; ++i) { if (field[i].size() != hei) { field[i].resize(hei); - field[i].fill(-1); + field[i].fill(Cell()); } } } void BlockViewWavetrace::fill(short val) { - QTime tm; tm.restart(); for (int i = 0; i < wid; ++i) { if (i == 0) field[i].fill(val); @@ -37,11 +35,18 @@ void BlockViewWavetrace::fill(short val) { void BlockViewWavetrace::fill(const QRect & rect, short val) { for (int i = rect.left(); i <= rect.right(); ++i) for (int j = rect.top(); j <= rect.bottom(); ++j) - field[i][j] = val; + field[i][j].value = field[i][j].direction = val; } + void BlockViewWavetrace::fill(int px, int py, short val) { - field[px][py] = val; + short p = field[px][py].value; + if ((val == HorizontalBus && p == VerticalBus ) || + (val == VerticalBus && p == HorizontalBus)) + field[px][py].value = Blocked; + else + field[px][py].value = val; + field[px][py].direction = field[px][py].value; } @@ -51,44 +56,33 @@ bool BlockViewWavetrace::trace(const QPoint & start, const QPoint & finish) { if (dir_ == NoTrace) return true; //qDebug() << "trace" << start << finish; //return true; - int cx, cy; short cl = 0; QRect frect(0, 0, wid - 1, hei - 1); QVector cpnts, npnts; fill(st, cl); - jumps.clear(); - cpnts.append(st); - auto checkAndFill = [this, &npnts, &frect](int x, int y, short c) { + cpnts.push_back(st); + if (field[fn.x()][fn.y()].value == (short)Blocked) + return false; + auto checkAndFill = [this, &npnts, &frect](int x, int y, short acc_dir, short c) { if (!frect.contains(x, y)) return; - short p = field[x][y]; - if (p == (short)Empty || p == (short)Jump) { - npnts.append(QPoint(x, y)); - fill(x, y, c); - } - if (p == (short)Jump) { - jumps.append(QPoint(x, y)); + short p = field[x][y].value; + if (p == (short)Empty || p == acc_dir) { + npnts.push_back(QPoint(x, y)); + field[x][y].value = c; } }; - if (field[fn.x()][fn.y()] < (short)Empty) - return false; while (cpnts.size() > 0) { npnts.clear(); cl++; - if (cl >= max_steps) return false; + if (cl >= max_steps) + return false; for (int i = 0; i < cpnts.size(); ++i) { - if (cpnts[i] == fn) { + if (cpnts[i] == fn) return true; - } - cx = cpnts[i].x() - 1; - cy = cpnts[i].y(); - checkAndFill(cx, cy, cl); - cx = cpnts[i].x() + 1; - checkAndFill(cx, cy, cl); - cx = cpnts[i].x(); - cy = cpnts[i].y() - 1; - checkAndFill(cx, cy, cl); - cy = cpnts[i].y() + 1; - checkAndFill(cx, cy, cl); + checkAndFill(cpnts[i].x() - 1, cpnts[i].y() , (short)VerticalBus , cl); + checkAndFill(cpnts[i].x() + 1, cpnts[i].y() , (short)VerticalBus , cl); + checkAndFill(cpnts[i].x() , cpnts[i].y() - 1, (short)HorizontalBus, cl); + checkAndFill(cpnts[i].x() , cpnts[i].y() + 1, (short)HorizontalBus, cl); } cpnts = npnts; //qDebug() << cl << ": " << cpnts.size(); @@ -106,27 +100,21 @@ void BlockViewWavetrace::gatherPath() { } int pa = -1, ca = -1; bool first = true; - short cl = field[fn.x()][fn.y()]; + short cl = field[fn.x()][fn.y()].value; QRect frect(0, 0, wid, hei); QPoint cpnt = fn; //cout << "start from " << cl << endl; - auto checkAndStep = [this, &cpnt, &first, &frect] (int & dir, short c, int & ca_, int pa_)->bool { + auto checkAndStep = [this, &cpnt, &first, &frect] (int dir, short c, int & ca_, int pa_)->bool { int cx = cpnt.x() + dps[dir].x(); int cy = cpnt.y() + dps[dir].y(); - dir++; if (frect.contains(cx, cy)) { - if (field[cx][cy] == c) { - if (jumps.contains(QPoint(cx, cy))) { - int jx = cx - 1; - int jy = cy; - if (jumps.contains(QPoint(jx, jy))) fill(jx, jy, (short)Jump); - jx = cx + 1; - if (jumps.contains(QPoint(jx, jy))) fill(jx, jy, (short)Jump); - jx = cx; - jy = cy - 1; - if (jumps.contains(QPoint(jx, jy))) fill(jx, jy, (short)Jump); - jy = cy + 1; - if (jumps.contains(QPoint(jx, jy))) fill(jx, jy, (short)Jump); + const Cell & cell(field[cx][cy]); + if (cell.value == c) { + if (cell.direction == HorizontalBus || cell.direction == VerticalBus) { + if (dps[dir].x() == 0 && cell.direction == VerticalBus) + return false; + if (dps[dir].y() == 0 && cell.direction == HorizontalBus) + return false; } ca_ = QLineF(QPointF(cx, cy), cpnt).angle(); if (ca_ != pa_ && !first) @@ -141,11 +129,12 @@ void BlockViewWavetrace::gatherPath() { while (cl > 0) { cl--; pa = ca; - int dir = 0; - if (checkAndStep(dir, cl, ca, pa)) continue; - if (checkAndStep(dir, cl, ca, pa)) continue; - if (checkAndStep(dir, cl, ca, pa)) continue; - if (checkAndStep(dir, cl, ca, pa)) continue; + + if (checkAndStep(0, cl, ca, pa)) continue; + if (checkAndStep(1, cl, ca, pa)) continue; + if (checkAndStep(2, cl, ca, pa)) continue; + if (checkAndStep(3, cl, ca, pa)) continue; + } path_.push_front(st); //cout << path_.size() << endl; @@ -154,13 +143,13 @@ void BlockViewWavetrace::gatherPath() { void BlockViewWavetrace::setPreferredDirection(BlockViewWavetrace::Direction dir) { dir_ = dir; - if (dir == Horizontal) { + if (dir == BlockViewWavetrace::Horizontal) { dps[0] = QPoint(0, -1); dps[1] = QPoint(0, 1); dps[2] = QPoint(-1, 0); dps[3] = QPoint(1, 0); } - if (dir == Vertical) { + if (dir == BlockViewWavetrace::Vertical) { dps[2] = QPoint(0, -1); dps[3] = QPoint(0, 1); dps[0] = QPoint(-1, 0); diff --git a/qad/blockview/blockviewwavetrace.h b/qad/blockview/blockviewwavetrace.h index f95a8c7..c8d0f90 100644 --- a/qad/blockview/blockviewwavetrace.h +++ b/qad/blockview/blockviewwavetrace.h @@ -27,7 +27,7 @@ class QAD_EXPORT BlockViewWavetrace { public: BlockViewWavetrace(int width = 1, int height = 1); - enum CellState {Empty = -1, Blocked = -2, Jump = -3}; + enum CellState {Empty = -1, Blocked = -2, HorizontalBus = -3, VerticalBus = -4}; enum Direction {NoTrace, Horizontal, Vertical}; int width() const {return wid;} @@ -36,7 +36,7 @@ public: void resize(const QSize & sz) {resize(sz.width(), sz.height());} void fill(short val = -1); void fill(const QRect & rect, short val = -1); - void fill(const QPoint & point, short val = -1) {field[point.x()][point.y()] = val;} + void fill(const QPoint & point, short val = -1) {fill(point.x(), point.y(), val);} void fill(int px, int py, short val); void fill(BlockViewWavetrace::CellState val = Empty) {fill((short)val);} void fill(const QRect & rect, BlockViewWavetrace::CellState val = Empty) {fill(rect, (short)val);} @@ -52,9 +52,15 @@ public: const QVector & path() const; private: + struct Cell { + Cell(short v = Empty): value(v), direction(0) {} + short value; + short direction; + }; + int wid, hei, max_steps; Direction dir_; - QVector > field; + QVector > field; QVector path_; QVector jumps; QPoint dps[4], st, fn; From f66138593ce312c4417a2386096d0686c48a5dbe Mon Sep 17 00:00:00 2001 From: Ivan Pelipenko Date: Mon, 17 Aug 2020 00:57:44 +0300 Subject: [PATCH 3/7] BlockView tracing fix --- qad/blockview/blockview.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qad/blockview/blockview.cpp b/qad/blockview/blockview.cpp index db628a0..8525b10 100644 --- a/qad/blockview/blockview.cpp +++ b/qad/blockview/blockview.cpp @@ -1279,11 +1279,11 @@ void BlockView::trace(QPointF scene_pos_from, QPointF scene_pos_to, BlockBusItem sx *= signx; sy *= signy; //qDebug() << "fill" << p0 << "->" << p1 << "in" << steps << sx << sy; - for (int j = 0; j < steps; ++j) { + for (int j = 0; j <= steps; ++j) { QPoint tp = quantize(cp, grid_step).toPoint() / grid_step + dp; if (tp != qpt) - wavetrace.fill(tp, cs); - //qDebug() << " set" << cp; + wavetrace.fill(tp, (j > 0 && j < steps) ? cs : BlockViewWavetrace::Blocked); + //qDebug() << " set" << cp << ((j > 0 && j < steps) ? cs : BlockViewWavetrace::Blocked); cp += QPointF(sx, sy); } } From cabacdd908dba14487cf17ef5030b9abf39d03ab Mon Sep 17 00:00:00 2001 From: Ivan Pelipenko Date: Mon, 17 Aug 2020 12:10:13 +0300 Subject: [PATCH 4/7] BlockView trace fix --- qad/blockview/blockbusitem.cpp | 6 +++--- qad/blockview/blockbusitem.h | 2 +- qad/blockview/blockview.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/qad/blockview/blockbusitem.cpp b/qad/blockview/blockbusitem.cpp index 7c7bb51..0a7231f 100644 --- a/qad/blockview/blockbusitem.cpp +++ b/qad/blockview/blockbusitem.cpp @@ -483,16 +483,16 @@ int BlockBusItem::neighborSegmentPoint(int point, int * seg) const { } -void BlockBusItem::testPoint(QPointF pos, int * sel_point, int * sel_segment) { +void BlockBusItem::testPoint(QPointF pos, int * sel_point, int * sel_segment, bool for_trace) { for (int i = 0; i < pol.size(); ++i) { - if ((pol[i] - pos).manhattanLength() <= 10.) { // Point + if ((pol[i] - pos).manhattanLength() <= (for_trace ? 5. : 10.)) { // Point *sel_point = i; *sel_segment = -1; return; } } for (int i = 0; i < segments.size(); ++i) { - if (distPointToLine(pol[segments[i].first], pol[segments[i].second], pos) <= 7.) { // Segment + if (distPointToLine(pol[segments[i].first], pol[segments[i].second], pos) <= (for_trace ? 5. : 7.)) { // Segment *sel_point = -1; *sel_segment = i; return; diff --git a/qad/blockview/blockbusitem.h b/qad/blockview/blockbusitem.h index 61eed85..54a5e45 100644 --- a/qad/blockview/blockbusitem.h +++ b/qad/blockview/blockbusitem.h @@ -46,7 +46,7 @@ public: double endpointImageScale() const {return im_end_scale;} void appendPoint(const QPointF & p); void appendPoint(qreal x, qreal y); - void testPoint(QPointF pos, int * sel_point, int * sel_segment); + void testPoint(QPointF pos, int * sel_point, int * sel_segment, bool for_trace = false); void clear(); /*void setStart(const QPointF & p) {pol[0] = p; scene()->update();} void setStart(qreal x, qreal y) {setStart(QPointF(x, y));} diff --git a/qad/blockview/blockview.cpp b/qad/blockview/blockview.cpp index 8525b10..4f804ac 100644 --- a/qad/blockview/blockview.cpp +++ b/qad/blockview/blockview.cpp @@ -1349,7 +1349,7 @@ void BlockView::matchBus() { //qDebug() << "1" << buses.size() << tmp_bus.pol; for (int i = 0; i < buses.size(); ++i) { b = buses[i]; - b->testPoint(point, &sp, &ss); + b->testPoint(point, &sp, &ss, true); //qDebug() << i << sp << ss; if (sp >= 0 || ss >= 0) break; } From 0ec173d9bb310c1cb102e1ef71627179e42b3b2d Mon Sep 17 00:00:00 2001 From: andrey Date: Tue, 18 Aug 2020 16:59:58 +0300 Subject: [PATCH 5/7] improve ImageView quality --- pip | 2 +- qad/application/aboutwindow.ui | 3 +++ qad/widgets/image_view.cpp | 21 ++++++++++++++++----- qad/widgets/image_view.h | 1 + 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/pip b/pip index 31f0d88..9834ac1 160000 --- a/pip +++ b/pip @@ -1 +1 @@ -Subproject commit 31f0d881570880a73b6b4bdef5708de58570651d +Subproject commit 9834ac177bfae3f0bfa14c083e3857560ec59b38 diff --git a/qad/application/aboutwindow.ui b/qad/application/aboutwindow.ui index cd926fd..3167f51 100644 --- a/qad/application/aboutwindow.ui +++ b/qad/application/aboutwindow.ui @@ -28,6 +28,9 @@ + + QPainter::SmoothPixmapTransform|QPainter::TextAntialiasing + diff --git a/qad/widgets/image_view.cpp b/qad/widgets/image_view.cpp index f50c0cd..57dc59f 100644 --- a/qad/widgets/image_view.cpp +++ b/qad/widgets/image_view.cpp @@ -14,6 +14,8 @@ ImageView::ImageView(QWidget * parent): QGraphicsView(parent) { setDragMode(QGraphicsView::NoDrag); setTransformationAnchor(QGraphicsView::AnchorUnderMouse); setScene(new QGraphicsScene()); + setRenderHint(QPainter::Antialiasing, true); + setRenderHint(QPainter::SmoothPixmapTransform, true); item.setTransformationMode(Qt::SmoothTransformation); item.setFlags(0); scene()->addItem(&item); @@ -28,12 +30,12 @@ ImageView::~ImageView() { QPixmap ImageView::pixmap() const { - return item.pixmap(); + return map; } void ImageView::setPixmap(QPixmap pixmap) { - item.setPixmap(pixmap); + map = pixmap; adjustView(); } @@ -42,12 +44,13 @@ void ImageView::setImage(const QImage & i) { im_data.clear(); if (i.isNull()) { item.setPixmap(QPixmap()); + map = QPixmap(); return; } QBuffer b(&im_data); b.open(QIODevice::ReadWrite); i.save(&b, "png"); b.close(); - item.setPixmap(QPixmap::fromImage(i)); + map = QPixmap::fromImage(i); adjustView(); } @@ -56,17 +59,18 @@ void ImageView::setImage(const QByteArray & i) { im_data = i; if (i.isEmpty()) { item.setPixmap(QPixmap()); + map = QPixmap(); return; } - item.setPixmap(QPixmap::fromImage(QImage::fromData(i))); + map = QPixmap::fromImage(QImage::fromData(i)); adjustView(); - } void ImageView::clear() { im_data.clear(); item.setPixmap(QPixmap()); + map = QPixmap(); } @@ -121,10 +125,17 @@ bool ImageView::eventFilter(QObject * o, QEvent * e) { void ImageView::adjustView() { + qreal mp = map.width() / map.size().boundedTo(size()).width(); + if (mp > 2) { + item.setPixmap(map.scaled(map.size()/mp, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + } else { + item.setPixmap(map); + } if (!autofit_) return; setSceneRect(item.boundingRect()); fitInView(&item, Qt::KeepAspectRatio); centerOn(&item); + } diff --git a/qad/widgets/image_view.h b/qad/widgets/image_view.h index 81ecadb..dbed10d 100644 --- a/qad/widgets/image_view.h +++ b/qad/widgets/image_view.h @@ -52,6 +52,7 @@ private: QByteArray im_data; QPoint prev_pos; bool autofit_; + QPixmap map; public slots: From 0f6bc121aa98e00eab0ea01ef4376ead56e78ac8 Mon Sep 17 00:00:00 2001 From: andrey Date: Tue, 18 Aug 2020 17:02:14 +0300 Subject: [PATCH 6/7] ImageView fix --- qad/widgets/image_view.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qad/widgets/image_view.cpp b/qad/widgets/image_view.cpp index 57dc59f..41d90cd 100644 --- a/qad/widgets/image_view.cpp +++ b/qad/widgets/image_view.cpp @@ -126,7 +126,7 @@ bool ImageView::eventFilter(QObject * o, QEvent * e) { void ImageView::adjustView() { qreal mp = map.width() / map.size().boundedTo(size()).width(); - if (mp > 2) { + if (mp > 1) { item.setPixmap(map.scaled(map.size()/mp, Qt::KeepAspectRatio, Qt::SmoothTransformation)); } else { item.setPixmap(map); From 4b7c513f7f0bba15a0e57cc26350ec1afec9c32c Mon Sep 17 00:00:00 2001 From: andrey Date: Tue, 18 Aug 2020 17:03:13 +0300 Subject: [PATCH 7/7] flags() --- qad/widgets/image_view.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qad/widgets/image_view.cpp b/qad/widgets/image_view.cpp index 41d90cd..516dc22 100644 --- a/qad/widgets/image_view.cpp +++ b/qad/widgets/image_view.cpp @@ -17,7 +17,7 @@ ImageView::ImageView(QWidget * parent): QGraphicsView(parent) { setRenderHint(QPainter::Antialiasing, true); setRenderHint(QPainter::SmoothPixmapTransform, true); item.setTransformationMode(Qt::SmoothTransformation); - item.setFlags(0); + item.setFlags(QGraphicsItem::GraphicsItemFlags()); scene()->addItem(&item); viewport()->setAutoFillBackground(false); viewport()->installEventFilter(this);