Что нужно в итоге?
static int vieworbit_exec(bContext *C, wmOperator *op){ View3D *v3d; ARegion *ar; RegionView3D *rv3d; int orbitdir; char view_opposite; PropertyRNA *prop_angle = RNA_struct_find_property(op->ptr, "angle"); float angle = RNA_property_is_set(op->ptr, prop_angle) ? RNA_property_float_get(op->ptr, prop_angle) : DEG2RADF(U.pad_rot_angle); /* no NULL check is needed, poll checks */ v3d = CTX_wm_view3d(C); ar = CTX_wm_region(C); rv3d = ar->regiondata; /* support for switching to the opposite view (even when in locked views) */ view_opposite = (fabsf(angle) == (float)M_PI) ? ED_view3d_axis_view_opposite(rv3d->view) : RV3D_VIEW_USER; orbitdir = RNA_enum_get(op->ptr, "type"); if ((rv3d->viewlock & RV3D_LOCKED) && (view_opposite == RV3D_VIEW_USER)) { /* no NULL check is needed, poll checks */ ED_view3d_context_user_region(C, &v3d, &ar); rv3d = ar->regiondata; } if ((rv3d->viewlock & RV3D_LOCKED) == 0 || (view_opposite != RV3D_VIEW_USER)) { if ((rv3d->persp != RV3D_CAMOB) || ED_view3d_camera_lock_check(v3d, rv3d)) { int smooth_viewtx = WM_operator_smooth_viewtx_get(op); float quat_mul[4]; float quat_new[4]; float ofs_new[3]; float *ofs_new_pt = NULL; if (view_opposite == RV3D_VIEW_USER) { view3d_ensure_persp(v3d, ar); } if (ELEM(orbitdir, V3D_VIEW_STEPLEFT, V3D_VIEW_STEPRIGHT)) { const float zvec[3] = {0.0f, 0.0f, 1.0f}; if (orbitdir == V3D_VIEW_STEPRIGHT) { angle = -angle; } /* z-axis */ axis_angle_normalized_to_quat(quat_mul, zvec, angle); } else { if (orbitdir == V3D_VIEW_STEPDOWN) { angle = -angle; } /* horizontal axis */ axis_angle_to_quat(quat_mul, rv3d->viewinv[0], angle); } mul_qt_qtqt(quat_new, rv3d->viewquat, quat_mul); if (view_opposite != RV3D_VIEW_USER) { rv3d->view = view_opposite; /* avoid float in-precision, just get a new orientation */ ED_view3d_quat_from_axis_view(view_opposite, quat_new); } else { rv3d->view = RV3D_VIEW_USER; } if (U.uiflag & USER_ORBIT_SELECTION) { float dyn_ofs[3]; view3d_orbit_calc_center(C, dyn_ofs); negate_v3(dyn_ofs); copy_v3_v3(ofs_new, rv3d->ofs); view3d_orbit_apply_dyn_ofs(ofs_new, dyn_ofs, rv3d->viewquat, quat_new); ofs_new_pt = ofs_new; /* disable smoothview in this case * although it works OK, it looks a little odd. */ smooth_viewtx = 0; } ED_view3d_smooth_view(C, v3d, ar, NULL, NULL, ofs_new_pt, quat_new, NULL, NULL, smooth_viewtx); return OPERATOR_FINISHED; } } return OPERATOR_CANCELLED;}
Подскажите пожалуйста если это тут не противозаконно где можно на халяву моделек накачать есть какой нибудь интересный ресурс?
>> чтобы они прямо на этой плоскости скопировались... то есть они совпадут с уже существующими? зачем так? ...
или делать через булевый операции, врезая окна и двери в готовые стены ..
тогда, наверное, лучше перейти к блочной компоновке - сборку из однотипных фрагмент стены с окном ...
а вот это совсем не понял.. =) а каким образом это делается, нельзя ли совсем вкратце, если это не совсем сложно?
хм, а это хорошая идея!
Не очень хорошая, лучше разрезай всю стену через Ctrl-R