parent
ba9468768d
commit
a1d7f67d81
|
@ -565,8 +565,8 @@ void DM_update_tessface_data(DerivedMesh *dm)
|
|||
}
|
||||
}
|
||||
|
||||
/* NOTE: quad detection issue - forth vertidx vs forth loopidx:
|
||||
* Here, our tfaces' forth vertex index is never 0 for a quad. However, we know our forth loop index may be
|
||||
/* NOTE: quad detection issue - fourth vertidx vs fourth loopidx:
|
||||
* Here, our tfaces' fourth vertex index is never 0 for a quad. However, we know our fourth loop index may be
|
||||
* 0 for quads (because our quads may have been rotated compared to their org poly, see tessellation code).
|
||||
* So we pass the MFace's, and BKE_mesh_loops_to_tessdata will use MFace->v4 index as quad test.
|
||||
*/
|
||||
|
@ -630,8 +630,8 @@ void DM_generate_tangent_tessface_data(DerivedMesh *dm, bool generate)
|
|||
}
|
||||
}
|
||||
|
||||
/* NOTE: quad detection issue - forth vertidx vs forth loopidx:
|
||||
* Here, our tfaces' forth vertex index is never 0 for a quad. However, we know our forth loop index may be
|
||||
/* NOTE: quad detection issue - fourth vertidx vs fourth loopidx:
|
||||
* Here, our tfaces' fourth vertex index is never 0 for a quad. However, we know our fourth loop index may be
|
||||
* 0 for quads (because our quads may have been rotated compared to their org poly, see tessellation code).
|
||||
* So we pass the MFace's, and BKE_mesh_loops_to_tessdata will use MFace->v4 index as quad test.
|
||||
*/
|
||||
|
@ -799,7 +799,7 @@ void DM_to_mesh(DerivedMesh *dm, Mesh *me, Object *ob, CustomDataMask mask, bool
|
|||
|
||||
/* ok, this should now use new CD shapekey data,
|
||||
* which should be fed through the modifier
|
||||
* stack*/
|
||||
* stack */
|
||||
if (tmp.totvert != me->totvert && !did_shapekeys && me->key) {
|
||||
printf("%s: YEEK! this should be recoded! Shape key loss!: ID '%s'\n", __func__, tmp.id.name);
|
||||
if (tmp.key)
|
||||
|
@ -1335,7 +1335,7 @@ typedef struct DMWeightColorInfo {
|
|||
static int dm_drawflag_calc(const ToolSettings *ts, const Mesh *me)
|
||||
{
|
||||
return ((ts->multipaint ? CALC_WP_MULTIPAINT : 0) |
|
||||
/* CALC_WP_GROUP_USER_ACTIVE or CALC_WP_GROUP_USER_ALL*/
|
||||
/* CALC_WP_GROUP_USER_ACTIVE or CALC_WP_GROUP_USER_ALL */
|
||||
(1 << ts->weightuser) |
|
||||
(ts->auto_normalize ? CALC_WP_AUTO_NORMALIZE : 0) |
|
||||
((me->editflag & ME_EDIT_MIRROR_X) ? CALC_WP_MIRROR_X : 0));
|
||||
|
@ -1545,8 +1545,8 @@ void DM_update_weight_mcol(
|
|||
int l_index;
|
||||
int j;
|
||||
|
||||
/* now add to loops, so the data can be passed through the modifier stack */
|
||||
/* If no CD_PREVIEW_MLOOPCOL existed yet, we have to add a new one! */
|
||||
/* now add to loops, so the data can be passed through the modifier stack
|
||||
* If no CD_PREVIEW_MLOOPCOL existed yet, we have to add a new one! */
|
||||
if (!wtcol_l) {
|
||||
wtcol_l = MEM_mallocN(sizeof(*wtcol_l) * dm_totloop, __func__);
|
||||
CustomData_add_layer(&dm->loopData, CD_PREVIEW_MLOOPCOL, CD_ASSIGN, wtcol_l, dm_totloop);
|
||||
|
@ -2013,12 +2013,12 @@ static void mesh_calc_modifiers(
|
|||
|
||||
/* set the DerivedMesh to only copy needed data */
|
||||
mask = curr->mask;
|
||||
/* needMapping check here fixes bug [#28112], otherwise its
|
||||
* possible that it wont be copied */
|
||||
/* needMapping check here fixes bug [#28112], otherwise it's
|
||||
* possible that it won't be copied */
|
||||
mask |= append_mask;
|
||||
DM_set_only_copy(dm, mask | (need_mapping ? CD_MASK_ORIGINDEX : 0));
|
||||
|
||||
/* add cloth rest shape key if need */
|
||||
/* add cloth rest shape key if needed */
|
||||
if (mask & CD_MASK_CLOTH_ORCO)
|
||||
add_orco_dm(ob, NULL, dm, clothorcodm, CD_CLOTH_ORCO);
|
||||
|
||||
|
|
|
@ -2674,16 +2674,16 @@ int BKE_mesh_recalc_tessellation(
|
|||
}
|
||||
}
|
||||
|
||||
/* NOTE: quad detection issue - forth vertidx vs forth loopidx:
|
||||
/* NOTE: quad detection issue - fourth vertidx vs fourth loopidx:
|
||||
* Polygons take care of their loops ordering, hence not of their vertices ordering.
|
||||
* Currently, our tfaces' forth vertex index might be 0 even for a quad. However, we know our forth loop index is
|
||||
* Currently, our tfaces' fourth vertex index might be 0 even for a quad. However, we know our fourth loop index is
|
||||
* never 0 for quads (because they are sorted for polygons, and our quads are still mere copies of their polygons).
|
||||
* So we pass NULL as MFace pointer, and BKE_mesh_loops_to_tessdata will use the forth loop index as quad test.
|
||||
* So we pass NULL as MFace pointer, and BKE_mesh_loops_to_tessdata will use the fourth loop index as quad test.
|
||||
* ...
|
||||
*/
|
||||
BKE_mesh_loops_to_tessdata(fdata, ldata, pdata, NULL, mface_to_poly_map, lindices, totface);
|
||||
|
||||
/* NOTE: quad detection issue - forth vertidx vs forth loopidx:
|
||||
/* NOTE: quad detection issue - fourth vertidx vs fourth loopidx:
|
||||
* ...However, most TFace code uses 'MFace->v4 == 0' test to check whether it is a tri or quad.
|
||||
* test_index_face() will check this and rotate the tessellated face if needed.
|
||||
*/
|
||||
|
|
|
@ -519,8 +519,8 @@ BMFace *BM_face_create_verts(
|
|||
/**
|
||||
* Check the element is valid.
|
||||
*
|
||||
* BMESH_TODO, when this raises an error the output is incredible confusing.
|
||||
* need to have some nice way to print/debug what the hecks going on.
|
||||
* BMESH_TODO, when this raises an error the output is incredibly confusing.
|
||||
* need to have some nice way to print/debug what the heck's going on.
|
||||
*/
|
||||
int bmesh_elem_check(void *element, const char htype)
|
||||
{
|
||||
|
@ -2560,7 +2560,7 @@ void BM_vert_separate_hflag(
|
|||
do {
|
||||
BMLoop *l_sep = e->l;
|
||||
bmesh_edge_separate(bm, e, l_sep, copy_select);
|
||||
/* trick to avoid looping over seperated edges */
|
||||
/* trick to avoid looping over separated edges */
|
||||
if (edges_separate == NULL && edges_orig == NULL) {
|
||||
e_first = l_sep->e;
|
||||
}
|
||||
|
@ -2833,7 +2833,7 @@ BMVert *bmesh_urmv_loop_multi(
|
|||
}
|
||||
|
||||
if (is_mixed_any == false) {
|
||||
/* all loops in 'larr' are the soul owners of their edges.
|
||||
/* all loops in 'larr' are the sole owners of their edges.
|
||||
* nothing to split away from, this is a no-op */
|
||||
v_new = v_sep;
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ enum {
|
|||
/* 0: LEFT/RIGHT sides; 1 = TOP/DOWN sides. */
|
||||
#define IS_COLUMN(_s) ((_s) % 2)
|
||||
|
||||
/* Stich flag from side value. */
|
||||
/* Stitch flag from side value. */
|
||||
#define STITCH(_s) (1 << (_s))
|
||||
|
||||
/* Max distance between to buttons for them to be 'mergeable'. */
|
||||
|
@ -151,8 +151,8 @@ static void block_align_proximity_compute(ButAlign *butal, ButAlign *butal_other
|
|||
side_opp = OPPOSITE(side);
|
||||
|
||||
/* We check both opposite sides at once, because with very small buttons, delta could be below max_delta for
|
||||
* the wrong side (that is, in horizontal case, the total width of two buttons can be below max_delta). */
|
||||
/* We rely on exact zero value here as an 'already processed' flag, so ensure we never actually
|
||||
* the wrong side (that is, in horizontal case, the total width of two buttons can be below max_delta).
|
||||
* We rely on exact zero value here as an 'already processed' flag, so ensure we never actually
|
||||
* set a zero value at this stage. FLT_MIN is zero-enough for UI position computing. ;) */
|
||||
delta = max_ff(fabsf(*butal->borders[side] - *butal_other->borders[side_opp]), FLT_MIN);
|
||||
delta_side_opp = max_ff(fabsf(*butal->borders[side_opp] - *butal_other->borders[side]), FLT_MIN);
|
||||
|
@ -399,7 +399,7 @@ void ui_block_align_calc(uiBlock *block)
|
|||
}
|
||||
}
|
||||
|
||||
/* Forth loop: we have all our 'aligned' buttons as a 'map' in butal_array. We need to:
|
||||
/* Fourth loop: we have all our 'aligned' buttons as a 'map' in butal_array. We need to:
|
||||
* - update their relevant coordinates to stitch them.
|
||||
* - assign them valid flags.
|
||||
*/
|
||||
|
@ -568,7 +568,7 @@ static void ui_block_align_calc_but(uiBut *first, short nr)
|
|||
flag |= UI_BUT_ALIGN_TOP;
|
||||
}
|
||||
|
||||
if ((flag & UI_BUT_ALIGN_TOP) == 0) { /* stil top row */
|
||||
if ((flag & UI_BUT_ALIGN_TOP) == 0) { /* still top row */
|
||||
if (prev) {
|
||||
if (next && buts_are_horiz(but, next))
|
||||
flag = UI_BUT_ALIGN_DOWN | UI_BUT_ALIGN_LEFT | UI_BUT_ALIGN_RIGHT;
|
||||
|
|
|
@ -87,7 +87,7 @@ typedef struct StitchPreviewer {
|
|||
unsigned int num_stitchable;
|
||||
unsigned int num_unstitchable;
|
||||
unsigned int preview_uvs;
|
||||
/* ...and here we'll store the static island triangles*/
|
||||
/* ...and here we'll store the static island triangles */
|
||||
float *static_tris;
|
||||
unsigned int num_static_tris;
|
||||
} StitchPreviewer;
|
||||
|
@ -95,7 +95,7 @@ typedef struct StitchPreviewer {
|
|||
|
||||
struct IslandStitchData;
|
||||
|
||||
/* This is a straightforward implementation, count the uv's in the island that will move and take the mean displacement/rotation and apply it to all
|
||||
/* This is a straightforward implementation, count the UVs in the island that will move and take the mean displacement/rotation and apply it to all
|
||||
* elements of the island except from the stitchable */
|
||||
typedef struct IslandStitchData {
|
||||
/* rotation can be used only for edges, for vertices there is no such notion */
|
||||
|
@ -145,7 +145,7 @@ typedef struct StitchState {
|
|||
float limit_dist;
|
||||
/* snap uv islands together during stitching */
|
||||
bool snap_islands;
|
||||
/* stich at midpoints or at islands */
|
||||
/* stitch at midpoints or at islands */
|
||||
bool midpoints;
|
||||
/* editmesh, cached for use in modal handler */
|
||||
BMEditMesh *em;
|
||||
|
@ -781,8 +781,8 @@ static void stitch_setup_face_preview_for_uv_group(UvElement *element, StitchSta
|
|||
|
||||
|
||||
/* checks if uvs are indeed stitchable and registers so that they can be shown in preview */
|
||||
static void stitch_validate_uv_stichability(UvElement *element, StitchState *state, IslandStitchData *island_stitch_data,
|
||||
PreviewPosition *preview_position)
|
||||
static void stitch_validate_uv_stitchability(UvElement *element, StitchState *state, IslandStitchData *island_stitch_data,
|
||||
PreviewPosition *preview_position)
|
||||
{
|
||||
UvElement *element_iter;
|
||||
StitchPreviewer *preview = state->stitch_preview;
|
||||
|
@ -817,8 +817,8 @@ static void stitch_validate_uv_stichability(UvElement *element, StitchState *sta
|
|||
}
|
||||
|
||||
|
||||
static void stitch_validate_edge_stichability(UvEdge *edge, StitchState *state, IslandStitchData *island_stitch_data,
|
||||
PreviewPosition *preview_position)
|
||||
static void stitch_validate_edge_stitchability(UvEdge *edge, StitchState *state, IslandStitchData *island_stitch_data,
|
||||
PreviewPosition *preview_position)
|
||||
{
|
||||
UvEdge *edge_iter = edge->first;
|
||||
StitchPreviewer *preview = state->stitch_preview;
|
||||
|
@ -957,7 +957,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final)
|
|||
UvElement *element = (UvElement *)state->selection_stack[i];
|
||||
if (element->flag & STITCH_STITCHABLE_CANDIDATE) {
|
||||
element->flag &= ~STITCH_STITCHABLE_CANDIDATE;
|
||||
stitch_validate_uv_stichability(element, state, island_stitch_data, preview_position);
|
||||
stitch_validate_uv_stitchability(element, state, island_stitch_data, preview_position);
|
||||
}
|
||||
else {
|
||||
/* add to preview for unstitchable */
|
||||
|
@ -968,7 +968,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final)
|
|||
UvEdge *edge = (UvEdge *)state->selection_stack[i];
|
||||
if (edge->flag & STITCH_STITCHABLE_CANDIDATE) {
|
||||
edge->flag &= ~STITCH_STITCHABLE_CANDIDATE;
|
||||
stitch_validate_edge_stichability(edge, state, island_stitch_data, preview_position);
|
||||
stitch_validate_edge_stitchability(edge, state, island_stitch_data, preview_position);
|
||||
}
|
||||
else {
|
||||
preview->num_unstitchable++;
|
||||
|
@ -1006,8 +1006,8 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final)
|
|||
/* initialize the preview buffers */
|
||||
preview->preview_polys = (float *)MEM_mallocN(preview->preview_uvs * sizeof(float) * 2, "tri_uv_stitch_prev");
|
||||
preview->uvs_per_polygon = MEM_mallocN(preview->num_polys * sizeof(*preview->uvs_per_polygon), "tri_uv_stitch_prev");
|
||||
preview->preview_stitchable = (float *)MEM_mallocN(preview->num_stitchable * sizeof(float) * preview_size, "stitch_preview_stichable_data");
|
||||
preview->preview_unstitchable = (float *)MEM_mallocN(preview->num_unstitchable * sizeof(float) * preview_size, "stitch_preview_unstichable_data");
|
||||
preview->preview_stitchable = (float *)MEM_mallocN(preview->num_stitchable * sizeof(float) * preview_size, "stitch_preview_stitchable_data");
|
||||
preview->preview_unstitchable = (float *)MEM_mallocN(preview->num_unstitchable * sizeof(float) * preview_size, "stitch_preview_unstitchable_data");
|
||||
|
||||
preview->static_tris = (float *)MEM_mallocN(state->tris_per_island[state->static_island] * sizeof(float) * 6, "static_island_preview_tris");
|
||||
|
||||
|
@ -1019,7 +1019,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final)
|
|||
|
||||
/* copy data from MLoopUVs to the preview display buffers */
|
||||
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
|
||||
/* just to test if face was added for processing. uvs of inselected vertices will return NULL */
|
||||
/* just to test if face was added for processing. uvs of unselected vertices will return NULL */
|
||||
UvElement *element = BM_uv_element_get(state->element_map, efa, BM_FACE_FIRST_LOOP(efa));
|
||||
|
||||
if (element) {
|
||||
|
@ -2120,7 +2120,7 @@ static int stitch_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
return OPERATOR_PASS_THROUGH;
|
||||
}
|
||||
|
||||
/* Use Limit (Default off)*/
|
||||
/* Use Limit (Default off) */
|
||||
case LKEY:
|
||||
if (event->val == KM_PRESS) {
|
||||
state->use_limit = !state->use_limit;
|
||||
|
@ -2155,7 +2155,7 @@ static int stitch_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
}
|
||||
break;
|
||||
|
||||
/* Select geometry*/
|
||||
/* Select geometry */
|
||||
case RIGHTMOUSE:
|
||||
if (!event->shift) {
|
||||
stitch_cancel(C, op);
|
||||
|
|
|
@ -127,9 +127,9 @@ static void free_anim_movie(struct anim *UNUSED(anim))
|
|||
|
||||
|
||||
#if defined(_WIN32)
|
||||
# define PATHSEPERATOR '\\'
|
||||
# define PATHSEPARATOR '\\'
|
||||
#else
|
||||
# define PATHSEPERATOR '/'
|
||||
# define PATHSEPARATOR '/'
|
||||
#endif
|
||||
|
||||
static int an_stringdec(const char *string, char *head, char *tail, unsigned short *numlen)
|
||||
|
@ -142,7 +142,7 @@ static int an_stringdec(const char *string, char *head, char *tail, unsigned sho
|
|||
nume = len;
|
||||
|
||||
for (i = len - 1; i >= 0; i--) {
|
||||
if (string[i] == PATHSEPERATOR) break;
|
||||
if (string[i] == PATHSEPARATOR) break;
|
||||
if (isdigit(string[i])) {
|
||||
if (found) {
|
||||
nums = i;
|
||||
|
@ -826,7 +826,7 @@ static int ffmpeg_decode_video_frame(struct anim *anim)
|
|||
* which is necessary to decode the remaining data
|
||||
* in the decoder engine after EOF. It also prevents a memory
|
||||
* leak, since av_read_frame spills out a full size packet even
|
||||
* on EOF... (and: it's save to call on NULL packets) */
|
||||
* on EOF... (and: it's safe to call on NULL packets) */
|
||||
|
||||
av_free_packet(&anim->next_packet);
|
||||
|
||||
|
|
|
@ -124,7 +124,7 @@ typedef struct SpaceButs {
|
|||
short mainb, mainbo, mainbuser; /* context tabs */
|
||||
short re_align, align; /* align for panels */
|
||||
short preview; /* preview is signal to refresh */
|
||||
/* texture context selector (material, lamp, particles, world, other)*/
|
||||
/* texture context selector (material, lamp, particles, world, other) */
|
||||
short texture_context, texture_context_prev;
|
||||
char flag, pad[7];
|
||||
|
||||
|
@ -650,7 +650,7 @@ typedef struct SpaceFile {
|
|||
short systemnr, system_bookmarknr;
|
||||
} SpaceFile;
|
||||
|
||||
/* FSMenuEntry's without paths indicate seperators */
|
||||
/* FSMenuEntry's without paths indicate separators */
|
||||
typedef struct FSMenuEntry {
|
||||
struct FSMenuEntry *next;
|
||||
|
||||
|
@ -853,7 +853,7 @@ typedef struct FileDirEntryArr {
|
|||
|
||||
/* FileDirEntry.status */
|
||||
enum {
|
||||
ASSET_STATUS_LOCAL = 1 << 0, /* If active uuid is available localy/immediately. */
|
||||
ASSET_STATUS_LOCAL = 1 << 0, /* If active uuid is available locally/immediately. */
|
||||
ASSET_STATUS_LATEST = 1 << 1, /* If active uuid is latest available version. */
|
||||
};
|
||||
|
||||
|
@ -924,7 +924,7 @@ typedef enum eSpaceImage_Mode {
|
|||
|
||||
/* SpaceImage->sticky
|
||||
* Note DISABLE should be 0, however would also need to re-arrange icon order,
|
||||
* also, sticky loc is the default mode so this means we don't need to 'do_versons' */
|
||||
* also, sticky loc is the default mode so this means we don't need to 'do_versions' */
|
||||
typedef enum eSpaceImage_Sticky {
|
||||
SI_STICKY_LOC = 0,
|
||||
SI_STICKY_DISABLE = 1,
|
||||
|
@ -957,7 +957,7 @@ typedef enum eSpaceImage_Flag {
|
|||
/* SI_DEPRECATED5 = (1 << 18), */ /* deprecated */
|
||||
|
||||
/* this means that the image is drawn until it reaches the view edge,
|
||||
* in the image view, its unrelated to the 'tile' mode for texface
|
||||
* in the image view, it's unrelated to the 'tile' mode for texface
|
||||
*/
|
||||
SI_DRAW_TILE = (1 << 19),
|
||||
SI_SMOOTH_UV = (1 << 20),
|
||||
|
|
|
@ -2650,7 +2650,7 @@ static void rna_def_space_view3d(BlenderRNA *brna)
|
|||
"rna_iterator_listbase_end", "rna_SpaceView3D_region_quadviews_get",
|
||||
NULL, NULL, NULL, NULL);
|
||||
RNA_def_property_ui_text(prop, "Quad View Regions", "3D regions (the third one defines quad view settings, "
|
||||
"the forth one is same as 'region_3d')");
|
||||
"the fourth one is same as 'region_3d')");
|
||||
|
||||
prop = RNA_def_property(srna, "show_reconstruction", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_RECONSTRUCTION);
|
||||
|
|
|
@ -2630,7 +2630,7 @@ PyDoc_STRVAR(BPy_EnumProperty_doc,
|
|||
" [(identifier, name, description, icon, number), ...] where the identifier is used\n"
|
||||
" for python access and other values are used for the interface.\n"
|
||||
" The three first elements of the tuples are mandatory.\n"
|
||||
" The forth one is either the (unique!) number id of the item or, if followed by a fith element\n"
|
||||
" The fourth one is either the (unique!) number id of the item or, if followed by a fith element\n"
|
||||
" (which must be the numid), an icon string identifier or integer icon value (e.g. returned by icon()...).\n"
|
||||
" Note the item is optional.\n"
|
||||
" For dynamic values a callback can be passed which returns a list in\n"
|
||||
|
|
|
@ -872,7 +872,7 @@ PyDoc_STRVAR(M_Geometry_intersect_point_quad_2d_doc,
|
|||
" :type quad_p2: :class:`mathutils.Vector`\n"
|
||||
" :arg quad_p3: Third point of the quad\n"
|
||||
" :type quad_p3: :class:`mathutils.Vector`\n"
|
||||
" :arg quad_p4: Forth point of the quad\n"
|
||||
" :arg quad_p4: Fourth point of the quad\n"
|
||||
" :type quad_p4: :class:`mathutils.Vector`\n"
|
||||
" :rtype: int\n"
|
||||
);
|
||||
|
|
|
@ -95,7 +95,7 @@ typedef struct ZSpan {
|
|||
float zmulx, zmuly, zofsx, zofsy; /* transform from hoco to zbuf co */
|
||||
|
||||
int *rectz, *arectz; /* zbuffers, arectz is for transparent */
|
||||
int *rectz1; /* seconday z buffer for shadowbuffer (2nd closest z) */
|
||||
int *rectz1; /* secondary z buffer for shadowbuffer (2nd closest z) */
|
||||
int *rectp; /* polygon index buffer */
|
||||
int *recto; /* object buffer */
|
||||
int *rectmask; /* negative zmask buffer */
|
||||
|
@ -142,7 +142,7 @@ void zbufclipwire(struct ZSpan *zspan, int obi, int zvlnr, int ec,
|
|||
void zbuf_make_winmat(Render *re, float winmat[4][4]);
|
||||
void zbuf_render_project(float winmat[4][4], const float co[3], float ho[4]);
|
||||
|
||||
/* sould not really be exposed, bad! */
|
||||
/* should not really be exposed, bad! */
|
||||
void hoco_to_zco(ZSpan *zspan, float zco[3], const float hoco[4]);
|
||||
void zspan_scanconvert_strand(ZSpan *zspan, void *handle, float *v1, float *v2, float *v3, void (*func)(void *, int, int, float, float, float) );
|
||||
void zbufsinglewire(ZSpan *zspan, int obi, int zvlnr, const float ho1[4], const float ho2[4]);
|
||||
|
|
Loading…
Reference in New Issue